PostCSS 嵌套 CSS 变量在 Tailwind CSS & Next.js 中不起作用
PostCSS nesting with CSS variables isn't working in Tailwind CSS & Next.js
我正在尝试使用 PostCSS 嵌套 CSS 变量,但它根本不会转换 CSS 变量。
相反,它在 DOM 中为 CSS 变量显示 Invalid property value
。
我的 tailwind.css
文件包含一堆 CSS 变量:
tailwind.css
@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';
@layer base {
:root {
--font-mono: 'Fira Mono, monospace';
--text-1: '12px';
--text-2: '14px';
--colors-black: 'rgba(19, 19, 21, 1)';
--colors-white: 'rgba(255, 255, 255, 1)';
--colors-gray: 'rgba(128, 128, 128, 1)';
--colors-blue: 'rgba(3, 136, 252, 1)';
--colors-red: 'rgba(249, 16, 74, 1)';
--colors-yellow: 'rgba(255, 221, 0, 1)';
--colors-pink: 'rgba(232, 141, 163, 1)';
--colors-turq: 'rgba(0, 245, 196, 1)';
--colors-orange: 'rgba(255, 135, 31, 1)';
--space-1: '4px';
--space-2: '8px';
--space-3: '16px';
--radii-1: '2px';
--radii-2: '4px';
}
pre {
--background: 'hsla(206 12% 89.5% / 5%)';
--text: var('--colors-white');
--syntax1: var('--colors-orange');
--syntax2: var('--colors-turq');
--syntax3: var('--colors-pink');
--syntax4: var('--colors-pink');
--comment: var('--colors-gray');
--removed: var('--colors-red');
--added: var('--colors-turq');
box-sizing: 'border-box';
padding: var('--space-3');
overflow: 'auto';
font-family: var('--font-mono');
font-size: var('--text-2');
line-height: var('--space-3');
whitespace: 'pre';
background-color: var('--background');
color: var('--text');
'& > code': {
display: 'block';
}
'.token.parameter': {
color: var('--text');
}
'.token.tag, .token.class-name, .token.selector, .token.selector .class, .token.function': {
color: var('--syntax1');
}
'.token.attr-value, .token.class, .token.string, .token.number, .token.unit, .token.color': {
color: var('--syntax2');
}
'.token.attr-name, .token.keyword, .token.rule, .token.operator, .token.pseudo-class, .token.important': {
color: var('--syntax3');
}
'.token.punctuation, .token.module, .token.property': {
color: var('--syntax4');
}
'.token.comment': {
color: var('--comment');
}
'.token.atapply .token:not(.rule):not(.important)': {
color: 'inherit';
}
'.language-shell .token:not(.comment)': {
color: 'inherit';
}
'.language-css .token.function': {
color: 'inherit';
}
'.token.deleted:not(.prefix), .token.inserted:not(.prefix)': {
display: 'block';
px: '';
mx: '-';
}
'.token.deleted:not(.prefix)': {
color: var('--removed');
}
'.token.inserted:not(.prefix)': {
color: var('--added');
}
'.token.deleted.prefix, .token.inserted.prefix': {
userselect: 'none';
}
}
}
我的 PostCSS 配置包含 postcss-preset-env already which should support for CSS nesting. I also installed postcss-nested & postcss-css-variables,以防万一。
postcss.config.js
module.exports = {
plugins: [
'postcss-import',
'tailwindcss',
'postcss-flexbugs-fixes',
'postcss-nested',
'postcss-css-variables',
[
'postcss-preset-env',
{
autoprefixer: {
flexbox: 'no-2009',
},
stage: 3,
features: {
'custom-properties': false,
'nesting-rules': true,
},
},
],
],
}
这里转载→https://github.com/deadcoder0904/postcss-tailwind-next-bug
运行 应用程序并检查 DOM 以在显示 Invalid property value
.
的样式面板中查看 CSS 变量
如何获取 CSS 变量以与 Tailwind CSS 一起使用?
完整的解决方案是删除 CSS 中的引号和对象符号。我从 CSS-in-JS 复制了整个东西,但忘了删除引号和对象符号,也就是 :
tailwind.css
@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';
@layer base {
:root {
--font-mono: 'Fira Mono, monospace';
--text-1: 12px;
--text-2: 14px;
--colors-black: rgba(19, 19, 21, 1);
--colors-white: rgba(255, 255, 255, 1);
--colors-gray: rgba(128, 128, 128, 1);
--colors-blue: rgba(3, 136, 252, 1);
--colors-red: rgba(249, 16, 74, 1);
--colors-yellow: rgba(255, 221, 0, 1);
--colors-pink: rgba(232, 141, 163, 1);
--colors-turq: rgba(0, 245, 196, 1);
--colors-orange: rgba(255, 135, 31, 1);
--space-1: 4px;
--space-2: 8px;
--space-3: 16px;
--radii-1: 2px;
--radii-2: 4px;
}
pre {
--background: hsla(206 12% 89.5% / 5%);
--text: var(--colors-white);
--syntax1: var(--colors-orange);
--syntax2: var(--colors-turq);
--syntax3: var(--colors-pink);
--syntax4: var(--colors-pink);
--comment: var(--colors-gray);
--removed: var(--colors-red);
--added: var(--colors-turq);
box-sizing: border-box;
padding: var(--space-3);
overflow: auto;
font-family: var(--font-mono);
font-size: var(--text-2);
line-height: var(--space-3);
white-space: pre;
background-color: var(--background);
color: var(--text);
& > code {
display: block;
}
.token.parameter {
color: var(--text);
}
.token.tag,
.token.class-name,
.token.selector,
.token.selector .class,
.token.function {
color: var(--syntax1);
}
.token.attr-value,
.token.class,
.token.string,
.token.number,
.token.unit,
.token.color {
color: var(--syntax2);
}
.token.attr-name,
.token.keyword,
.token.rule,
.token.operator,
.token.pseudo-class,
.token.important {
color: var(--syntax3);
}
.token.punctuation,
.token.module,
.token.property {
color: var(--syntax4);
}
.token.comment {
color: var(--comment);
}
.token.atapply .token:not(.rule):not(.important) {
color: inherit;
}
.language-shell .token:not(.comment) {
color: inherit;
}
.language-css .token.function {
color: inherit;
}
.token.deleted:not(.prefix),
.token.inserted:not(.prefix) {
display: block;
px: ;
mx: -;
}
.token.deleted:not(.prefix) {
color: var(--removed);
}
.token.inserted:not(.prefix) {
color: var(--added);
}
.token.deleted.prefix,
.token.inserted.prefix {
userselect: none;
}
}
}
出于某种原因,在我的一个项目中,postcss-preset-env
没有工作,所以我不得不在 postcss.config.js
中使用 postcss-nested
& postcss-css-variables
。
postcss.config.js
module.exports = {
plugins: [
'postcss-import',
'tailwindcss',
'postcss-flexbugs-fixes',
'postcss-nested',
'postcss-custom-properties',
'autoprefixer',
// [
// 'postcss-preset-env',
// {
// autoprefixer: {
// flexbox: 'no-2009',
// },
// stage: 3,
// features: {
// 'custom-properties': true,
// 'nesting-rules': true,
// },
// },
// ],
],
}
但是 postcss-preset-env
在另一个具有相同配置的项目中工作。我已经通过清理缓存、重新安装依赖项和复制粘贴相同的配置对其进行了多次测试,所以我很确定这不是我项目的问题。
我正在尝试使用 PostCSS 嵌套 CSS 变量,但它根本不会转换 CSS 变量。
相反,它在 DOM 中为 CSS 变量显示 Invalid property value
。
我的 tailwind.css
文件包含一堆 CSS 变量:
tailwind.css
@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';
@layer base {
:root {
--font-mono: 'Fira Mono, monospace';
--text-1: '12px';
--text-2: '14px';
--colors-black: 'rgba(19, 19, 21, 1)';
--colors-white: 'rgba(255, 255, 255, 1)';
--colors-gray: 'rgba(128, 128, 128, 1)';
--colors-blue: 'rgba(3, 136, 252, 1)';
--colors-red: 'rgba(249, 16, 74, 1)';
--colors-yellow: 'rgba(255, 221, 0, 1)';
--colors-pink: 'rgba(232, 141, 163, 1)';
--colors-turq: 'rgba(0, 245, 196, 1)';
--colors-orange: 'rgba(255, 135, 31, 1)';
--space-1: '4px';
--space-2: '8px';
--space-3: '16px';
--radii-1: '2px';
--radii-2: '4px';
}
pre {
--background: 'hsla(206 12% 89.5% / 5%)';
--text: var('--colors-white');
--syntax1: var('--colors-orange');
--syntax2: var('--colors-turq');
--syntax3: var('--colors-pink');
--syntax4: var('--colors-pink');
--comment: var('--colors-gray');
--removed: var('--colors-red');
--added: var('--colors-turq');
box-sizing: 'border-box';
padding: var('--space-3');
overflow: 'auto';
font-family: var('--font-mono');
font-size: var('--text-2');
line-height: var('--space-3');
whitespace: 'pre';
background-color: var('--background');
color: var('--text');
'& > code': {
display: 'block';
}
'.token.parameter': {
color: var('--text');
}
'.token.tag, .token.class-name, .token.selector, .token.selector .class, .token.function': {
color: var('--syntax1');
}
'.token.attr-value, .token.class, .token.string, .token.number, .token.unit, .token.color': {
color: var('--syntax2');
}
'.token.attr-name, .token.keyword, .token.rule, .token.operator, .token.pseudo-class, .token.important': {
color: var('--syntax3');
}
'.token.punctuation, .token.module, .token.property': {
color: var('--syntax4');
}
'.token.comment': {
color: var('--comment');
}
'.token.atapply .token:not(.rule):not(.important)': {
color: 'inherit';
}
'.language-shell .token:not(.comment)': {
color: 'inherit';
}
'.language-css .token.function': {
color: 'inherit';
}
'.token.deleted:not(.prefix), .token.inserted:not(.prefix)': {
display: 'block';
px: '';
mx: '-';
}
'.token.deleted:not(.prefix)': {
color: var('--removed');
}
'.token.inserted:not(.prefix)': {
color: var('--added');
}
'.token.deleted.prefix, .token.inserted.prefix': {
userselect: 'none';
}
}
}
我的 PostCSS 配置包含 postcss-preset-env already which should support for CSS nesting. I also installed postcss-nested & postcss-css-variables,以防万一。
postcss.config.js
module.exports = {
plugins: [
'postcss-import',
'tailwindcss',
'postcss-flexbugs-fixes',
'postcss-nested',
'postcss-css-variables',
[
'postcss-preset-env',
{
autoprefixer: {
flexbox: 'no-2009',
},
stage: 3,
features: {
'custom-properties': false,
'nesting-rules': true,
},
},
],
],
}
这里转载→https://github.com/deadcoder0904/postcss-tailwind-next-bug
运行 应用程序并检查 DOM 以在显示 Invalid property value
.
如何获取 CSS 变量以与 Tailwind CSS 一起使用?
完整的解决方案是删除 CSS 中的引号和对象符号。我从 CSS-in-JS 复制了整个东西,但忘了删除引号和对象符号,也就是 :
tailwind.css
@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';
@layer base {
:root {
--font-mono: 'Fira Mono, monospace';
--text-1: 12px;
--text-2: 14px;
--colors-black: rgba(19, 19, 21, 1);
--colors-white: rgba(255, 255, 255, 1);
--colors-gray: rgba(128, 128, 128, 1);
--colors-blue: rgba(3, 136, 252, 1);
--colors-red: rgba(249, 16, 74, 1);
--colors-yellow: rgba(255, 221, 0, 1);
--colors-pink: rgba(232, 141, 163, 1);
--colors-turq: rgba(0, 245, 196, 1);
--colors-orange: rgba(255, 135, 31, 1);
--space-1: 4px;
--space-2: 8px;
--space-3: 16px;
--radii-1: 2px;
--radii-2: 4px;
}
pre {
--background: hsla(206 12% 89.5% / 5%);
--text: var(--colors-white);
--syntax1: var(--colors-orange);
--syntax2: var(--colors-turq);
--syntax3: var(--colors-pink);
--syntax4: var(--colors-pink);
--comment: var(--colors-gray);
--removed: var(--colors-red);
--added: var(--colors-turq);
box-sizing: border-box;
padding: var(--space-3);
overflow: auto;
font-family: var(--font-mono);
font-size: var(--text-2);
line-height: var(--space-3);
white-space: pre;
background-color: var(--background);
color: var(--text);
& > code {
display: block;
}
.token.parameter {
color: var(--text);
}
.token.tag,
.token.class-name,
.token.selector,
.token.selector .class,
.token.function {
color: var(--syntax1);
}
.token.attr-value,
.token.class,
.token.string,
.token.number,
.token.unit,
.token.color {
color: var(--syntax2);
}
.token.attr-name,
.token.keyword,
.token.rule,
.token.operator,
.token.pseudo-class,
.token.important {
color: var(--syntax3);
}
.token.punctuation,
.token.module,
.token.property {
color: var(--syntax4);
}
.token.comment {
color: var(--comment);
}
.token.atapply .token:not(.rule):not(.important) {
color: inherit;
}
.language-shell .token:not(.comment) {
color: inherit;
}
.language-css .token.function {
color: inherit;
}
.token.deleted:not(.prefix),
.token.inserted:not(.prefix) {
display: block;
px: ;
mx: -;
}
.token.deleted:not(.prefix) {
color: var(--removed);
}
.token.inserted:not(.prefix) {
color: var(--added);
}
.token.deleted.prefix,
.token.inserted.prefix {
userselect: none;
}
}
}
出于某种原因,在我的一个项目中,postcss-preset-env
没有工作,所以我不得不在 postcss.config.js
中使用 postcss-nested
& postcss-css-variables
。
postcss.config.js
module.exports = {
plugins: [
'postcss-import',
'tailwindcss',
'postcss-flexbugs-fixes',
'postcss-nested',
'postcss-custom-properties',
'autoprefixer',
// [
// 'postcss-preset-env',
// {
// autoprefixer: {
// flexbox: 'no-2009',
// },
// stage: 3,
// features: {
// 'custom-properties': true,
// 'nesting-rules': true,
// },
// },
// ],
],
}
但是 postcss-preset-env
在另一个具有相同配置的项目中工作。我已经通过清理缓存、重新安装依赖项和复制粘贴相同的配置对其进行了多次测试,所以我很确定这不是我项目的问题。