Try it yourself with our free Css Minifier tool — runs entirely in your browser, no signup needed.

How to Minify CSS in C#

How to Minify CSS in C#

Minifying CSS is an essential step in optimizing the performance of web applications. By removing unnecessary characters, such as whitespace and comments, minified CSS files reduce the file size, resulting in faster page loads and improved user experience. In this article, we will explore how to minify CSS in C# using a simple and efficient approach.

Quick Example

Here is a minimal example of how to minify CSS in C#:

using System.Text.RegularExpressions;

public static string MinifyCss(string css)
{
    return Regex.Replace(css, @"(\s+|/\*.*?\*/)", string.Empty).Trim();
}

This code uses regular expressions to remove whitespace and comments from the input CSS string.

Step-by-Step Breakdown

Let's break down the code line by line:

  • using System.Text.RegularExpressions;: We import the System.Text.RegularExpressions namespace, which provides the Regex class used for regular expression matching.
  • public static string MinifyCss(string css): We define a public static method MinifyCss that takes a CSS string as input and returns the minified CSS string.
  • return Regex.Replace(css, @"(\s+|/\*.*?\*/)", string.Empty).Trim();: This line uses the Regex.Replace method to replace all occurrences of whitespace and comments in the input CSS string with an empty string. The regular expression (\s+|/\*.*?\*/) matches one or more whitespace characters (\s+) or comments (/\*.*?\*/). The Trim() method is used to remove any leading or trailing whitespace from the resulting string.

Handling Edge Cases

Here are some common edge cases to consider:

Empty/Null Input

If the input CSS string is empty or null, the method should return an empty string:

public static string MinifyCss(string css)
{
    if (string.IsNullOrEmpty(css))
    {
        return string.Empty;
    }
    return Regex.Replace(css, @"(\s+|/\*.*?\*/)", string.Empty).Trim();
}

Invalid Input

If the input CSS string contains invalid characters, the method should throw an exception:

public static string MinifyCss(string css)
{
    if (!IsValidCss(css))
    {
        throw new ArgumentException("Invalid CSS input", nameof(css));
    }
    return Regex.Replace(css, @"(\s+|/\*.*?\*/)", string.Empty).Trim();
}

private static bool IsValidCss(string css)
{
    // implement CSS validation logic here
}

Large Input

If the input CSS string is very large, the method may throw an OutOfMemoryException. To handle this, we can use a streaming approach:

public static string MinifyCss(string css)
{
    using (var reader = new StringReader(css))
    {
        using (var writer = new StringWriter())
        {
            MinifyCss(reader, writer);
            return writer.ToString();
        }
    }
}

private static void MinifyCss(TextReader reader, TextWriter writer)
{
    var regex = new Regex(@"(\s+|/\*.*?\*/)");
    var buffer = new char[1024];
    while (true)
    {
        var count = reader.Read(buffer, 0, buffer.Length);
        if (count == 0)
        {
            break;
        }
        var chunk = new string(buffer, 0, count);
        var minifiedChunk = regex.Replace(chunk, string.Empty);
        writer.Write(minifiedChunk);
    }
}

Unicode/Special Characters

If the input CSS string contains Unicode or special characters, the method should handle them correctly:

public static string MinifyCss(string css)
{
    return Regex.Replace(css, @"(\s+|/\*.*?\*/)", string.Empty, RegexOptions.IgnorePatternWhitespace | RegexOptions.CultureInvariant).Trim();
}

Common Mistakes

Here are some common mistakes developers make when minifying CSS in C#:

Wrong Regular Expression

Using a regular expression that matches too much or too little:

// wrong
return Regex.Replace(css, @"\s+", string.Empty);

Corrected code:

return Regex.Replace(css, @"(\s+|/\*.*?\*/)", string.Empty);

Not Handling Edge Cases

Not handling empty or null input:

// wrong
return Regex.Replace(css, @"(\s+|/\*.*?\*/)", string.Empty);

Corrected code:

if (string.IsNullOrEmpty(css))
{
    return string.Empty;
}
return Regex.Replace(css, @"(\s+|/\*.*?\*/)", string.Empty);

Not Using Streaming for Large Input

Not using a streaming approach for large input:

// wrong
return Regex.Replace(css, @"(\s+|/\*.*?\*/)", string.Empty);

Corrected code:

using (var reader = new StringReader(css))
{
    using (var writer = new StringWriter())
    {
        MinifyCss(reader, writer);
        return writer.ToString();
    }
}

Performance Tips

Here are some performance tips for minifying CSS in C#:

  • Use a streaming approach for large input to avoid OutOfMemoryException.
  • Use a compiled regular expression to improve performance.
  • Use RegexOptions.IgnorePatternWhitespace and RegexOptions.CultureInvariant to improve performance and handle Unicode characters correctly.

FAQ

Q: What is the purpose of minifying CSS?

A: Minifying CSS reduces the file size of CSS files, resulting in faster page loads and improved user experience.

Q: How do I handle large input CSS strings?

A: Use a streaming approach to avoid OutOfMemoryException.

Q: How do I handle Unicode or special characters in CSS?

A: Use RegexOptions.IgnorePatternWhitespace and RegexOptions.CultureInvariant to handle Unicode characters correctly.

Q: What is the difference between Regex.Replace and string.Replace?

A: Regex.Replace uses regular expressions to match and replace patterns, while string.Replace uses literal string matching.

Q: Can I use this method to minify other types of files?

A: No, this method is specifically designed to minify CSS files. For other file types, you may need to use a different approach.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp