What is postcss-html?
The postcss-html npm package is a tool that allows PostCSS to be used with HTML, including HTML-like syntaxes such as XML, XHTML, and HTML with inline styles. It enables developers to process styles within `<style>` tags or inline `style` attributes using PostCSS plugins.
What are postcss-html's main functionalities?
Processing inline styles
This feature allows processing of inline styles within HTML. The code sample demonstrates how to use postcss-html to process a string containing HTML with a `<style>` tag.
const postcssHtml = require('postcss-html');
const result = postcssHtml.process('<style>h1 { color: red; }</style>', { /* options */ }).then(result => {
console.log(result.html);
});
Processing styles in HTML-like files
This feature processes styles within HTML-like files. The code sample shows how to read an HTML file, process it with postcss-html, and then write the processed HTML to a new file.
const postcssHtml = require('postcss-html');
const fs = require('fs');
fs.readFile('index.html', (err, html) => {
if (err) throw err;
postcssHtml.process(html, { /* options */ }).then(result => {
fs.writeFile('index-processed.html', result.html, (err) => {
if (err) throw err;
console.log('The file has been saved!');
});
});
});
Other packages similar to postcss-html
postcss-scss
The postcss-scss package is a syntax for PostCSS that allows you to work with SCSS (Sassy CSS) directly, without converting it to CSS first. It is similar to postcss-html in that it extends PostCSS's capabilities to non-standard CSS syntaxes, but it focuses on SCSS rather than HTML.
postcss-jsx
postcss-jsx is an npm package that enables PostCSS to parse and transform CSS within JSX files. It is similar to postcss-html as it extends PostCSS to handle CSS within a different context (JSX instead of HTML), allowing for linting and other transformations within JavaScript frameworks like React.
stylelint
stylelint is a powerful, modern linter that helps you avoid errors and enforce conventions in your styles. It is similar to postcss-html in that it can be used to lint styles within HTML files, but it is primarily a standalone tool rather than a PostCSS plugin.
PostCSS HTML Syntax
PostCSS syntax for parsing HTML (and HTML-like)
Getting Started
First thing's first, install the module:
npm install postcss-html --save-dev
If you want support SCSS/SASS/LESS/SugarSS syntax, you need to install the corresponding module.
Use Cases
const postcss = require('postcss');
const syntax = require('postcss-html')({
scss: require('postcss-scss'),
less: require('postcss-less'),
css: require('postcss-safe-parser'),
});
postcss(plugins).process(source, { syntax: syntax }).then(function (result) {
result.content
});
If you want support SCSS/SASS/LESS/SugarSS syntax, you need to install these module:
Advanced Use Cases
Options
const options = {
rules: [
{
test: /^postcss$/i,
lang: 'scss'
},
{
test: /^customcss$/i,
lang: 'custom'
},
],
css: 'postcss-safe-parser',
sass: require('postcss-sass'),
scss: 'postcss-scss',
less: require.resolve('./node_modules/postcss-less'),
sugarss: require('sugarss'),
custom: require('postcss-custom-syntax'),
}
const syntax = require('postcss-html')(options);
Turning PostCSS off from within your HTML
PostCSS can be temporarily turned off by using special comments in your HTML. For example:
<html>
<body>
<a style="color: red;" description="style is not parsed."></a>
<a style="color: red;" description="style is parsed."></a>
<html>
<body>
<a style="color: red;" description="style is not parsed."></a>
<a style="color: red;" description="style is not parsed."></a>
<a style="color: red;" description="style is parsed."></a>
Linting with Stylelint
The main use case of this plugin is to apply linting with Stylelint to <style>
tags and <div style="*">
property in HTML (and HTML-like).
You can use it by configuring your stylelint
config as follows:
{
"overrides": [
{
"files": ["*.html", "**/*.html"],
"customSyntax": "postcss-html"
}
]
}
You can use it more easily if you use an already configured sharable config.
{
+ "extends": [
+ "stylelint-config-html",
// If you are using Vue.
+ "stylelint-config-recommended-vue"
+ ],
- "overrides": [
- {
- "files": ["*.html", "**/*.html"],
- "customSyntax": "postcss-html"
- }
- ]
}