Files
hugo/content/en/functions/css/PostCSS.md
T
Bjørn Erik Pedersen e477373487 Squashed 'docs/' changes from 227aab619..8390a4a3a
8390a4a3a Add Void Linux installation instructions
d6099aae8 Update link to PostCSS plugins
25dad4693 netlify: Hugo 0.139.4
2b1fa118c Fix typo
3ef1eb505 Update hosting-on-aws-amplify
c0f6d35d6 Fix typo
aa54d4301 Correct directory name
98aa26bdb Improve instructions for hosting with AWS Amplify
a07638a80 Add new-in badges
6ad018055 netlify: Hugo 0.139.3
1050835d6 Update title of hugo.Store page
ebbd2e851 Clarify the shortcode Ordinal method
b7716ed95 Revise code block render hook for Mermaid diagrams
f1da9b6ea netlify: Hugo 0.139.2
d8ac9f428 Downgrade the Go toolchain in go.mod to a slightly older Go version
254b3c4f2 netlify: Hugo 0.139.1
03e666038 Add hugo.Store, site.Store and Shortcode.Store
157e8983b Update Anchorize.md
59fa9f214 Document the PageRef menu entry method
bda544cce docs(transform.Unmarshal): match lang attribute to title language in examples
1985886bd Adjust front matter of shared Markdown snippets
da5bd70d1 Fix typo
431b65d6b Update theme
b63ef69f5 Update style guidance
d50ed3422 Remove old new-in badges
12bfb9933 Update docs.yaml
0b936cacd netlify: Hugo 0.139.0
ab7668b4d dartsass: Add silenceDeprecations option
154df9bfc Merge commit '838bd312b1a287bb33962ad478dbc54737654f35'
efa80477c docs: Regen CLI docs
ad99e4a7a docs: Regenerate CLI docs

git-subtree-dir: docs
git-subtree-split: 8390a4a3ac
2024-12-11 09:53:33 +01:00

3.9 KiB

title, description, categories, keywords, action, toc
title description categories keywords action toc
css.PostCSS Processes the given resource with PostCSS using any PostCSS plugin.
aliases related returnType signatures
postCSS
functions/css/Sass
functions/css/TailwindCSS
resource.Resource
css.PostCSS [OPTIONS] RESOURCE
true

{{< new-in 0.128.0 >}}

{{ with resources.Get "css/main.css" | postCSS }}
  <link rel="stylesheet" href="{{ .RelPermalink }}">
{{ end }}

Setup

Follow the steps below to transform CSS using any of the available PostCSS plugins.

Step 1
Install Node.js.
Step 2
Install the required Node.js packages in the root of your project. For example, to add vendor prefixes to your CSS rules:
npm i -D postcss postcss-cli autoprefixer
Step 3
Create a PostCSS configuration file in the root of your project. You must name this file postcss.config.js or another supported file name. For example:
module.exports = {
  plugins: [
    require('autoprefixer')
  ]
};

{{% note %}} {{% include "functions/resources/_common/postcss-windows-warning.md" %}} {{% /note %}}

Step 4
Place your CSS file within the assets/css directory.
Step 5
Process the resource with PostCSS:
{{ with resources.Get "css/main.css" | postCSS }}
  <link rel="stylesheet" href="{{ .RelPermalink }}">
{{ end }}

Options

The css.PostCSS method takes an optional map of options.

config
(string) The directory that contains the PostCSS configuration file. Default is the root of the project directory.
noMap
(bool) Default is false. If true, disables inline sourcemaps.
inlineImports
(bool) Default is false. Enable inlining of @import statements. It does so recursively, but will only import a file once. URL imports (e.g. @import url('https://fonts.googleapis.com/css?family=Open+Sans&display=swap');) and imports with media queries will be ignored. Note that this import routine does not care about the CSS spec, so you can have @import anywhere in the file. Hugo will look for imports relative to the module mount and will respect theme overrides.
skipInlineImportsNotFound
(bool) Default is false. Before Hugo 0.99.0 when inlineImports was enabled and we failed to resolve an import, we logged it as a warning. We now fail the build. If you have regular CSS imports in your CSS that you want to preserve, you can either use imports with URL or media queries (Hugo does not try to resolve those) or set skipInlineImportsNotFound to true.
{{ $opts := dict "config" "config-directory" "noMap" true }}
{{ with resources.Get "css/main.css" | postCSS $opts }}
  <link rel="stylesheet" href="{{ .RelPermalink }}">
{{ end }}

No configuration file

To avoid using a PostCSS configuration file, you can specify a minimal configuration using the options map.

use
(string) A space-delimited list of PostCSS plugins to use.
parser
(string) A custom PostCSS parser.
stringifier
(string) A custom PostCSS stringifier.
syntax
(string) Custom postcss syntax.
{{ $opts := dict "use" "autoprefixer postcss-color-alpha" }}
{{ with resources.Get "css/main.css" | postCSS $opts }}
  <link rel="stylesheet" href="{{ .RelPermalink }}">
{{ end }}

Check environment

The current Hugo environment name (set by --environment or in configuration or OS environment) is available in the Node context, which allows constructs like this:

const autoprefixer = require('autoprefixer');
const purgecss = require('@fullhuman/postcss-purgecss');
module.exports = {
  plugins: [
    autoprefixer,
    process.env.HUGO_ENVIRONMENT !== 'development' ? purgecss : null
  ]
}