创建引用其他自定义颜色的自定义实用程序
Create custom utility referencing additional custom colors
我的 tailwind.config.cjs
文件中配置了几个自定义实用程序:
plugins: [
plugin(({ addUtilities }) => {
const utilities = {
'.border-invalid': {
border: '1px solid #ef4444',
},
[...]
};
addUtilities(utilities);
}),
],
我也定义了自定义颜色,像这样
extend: {
colors: {
'red-50': '#FEF2F2',
[...]
'red-500': '#EF4444',
[...]
}
}
我不想在我的自定义实用程序中使用 hard-coded 值,而是想引用我的自定义颜色,这样如果我更改调色板,我的自定义实用程序就会相应更新。所以,理想情况下,它应该是这样的:
const utilities = {
'.border-invalid': {
apply: 'border border-solid border-red-500',
},
或者在我的自定义实用程序中引用 red-500
而不是 hard-coded #EF4444
.
有办法实现吗?
@ihar-aliakseyenka 答案很好,我添加这个只是为了告诉第二个选择,border: "1px solid theme('colors.red-500')"
甚至在鼠标悬停时显示一个漂亮而清晰的 css 定义:
虽然第一个选项 border:
1px solid ${theme('colors.red-500')}` 仅显示 literarl 值(正如预期的那样,顺便说一句):
您可以使用 theme() 指令
plugins: [
plugin(({ addUtilities, theme }) => { // extract theme
const utilities = {
'.border-invalid': {
border: `1px solid ${theme('colors.red-500')}`, // concatenate
}
};
addUtilities(utilities);
}),
],
// or pass it as a string
plugins: [
plugin(({ addUtilities }) => {
const utilities = {
'.border-invalid': {
border: "1px solid theme('colors.red-500')",
}
};
addUtilities(utilities);
}),
],
Note: you set your color as red-500
, so no dot notation will be available like theme('colors.red.500')
(it will cause error. Well maybe not because Tailwind has red-500 color but in any other cases it will)
我的 tailwind.config.cjs
文件中配置了几个自定义实用程序:
plugins: [
plugin(({ addUtilities }) => {
const utilities = {
'.border-invalid': {
border: '1px solid #ef4444',
},
[...]
};
addUtilities(utilities);
}),
],
我也定义了自定义颜色,像这样
extend: {
colors: {
'red-50': '#FEF2F2',
[...]
'red-500': '#EF4444',
[...]
}
}
我不想在我的自定义实用程序中使用 hard-coded 值,而是想引用我的自定义颜色,这样如果我更改调色板,我的自定义实用程序就会相应更新。所以,理想情况下,它应该是这样的:
const utilities = {
'.border-invalid': {
apply: 'border border-solid border-red-500',
},
或者在我的自定义实用程序中引用 red-500
而不是 hard-coded #EF4444
.
有办法实现吗?
@ihar-aliakseyenka 答案很好,我添加这个只是为了告诉第二个选择,border: "1px solid theme('colors.red-500')"
甚至在鼠标悬停时显示一个漂亮而清晰的 css 定义:
虽然第一个选项 border:
1px solid ${theme('colors.red-500')}` 仅显示 literarl 值(正如预期的那样,顺便说一句):
您可以使用 theme() 指令
plugins: [
plugin(({ addUtilities, theme }) => { // extract theme
const utilities = {
'.border-invalid': {
border: `1px solid ${theme('colors.red-500')}`, // concatenate
}
};
addUtilities(utilities);
}),
],
// or pass it as a string
plugins: [
plugin(({ addUtilities }) => {
const utilities = {
'.border-invalid': {
border: "1px solid theme('colors.red-500')",
}
};
addUtilities(utilities);
}),
],
Note: you set your color as
red-500
, so no dot notation will be available liketheme('colors.red.500')
(it will cause error. Well maybe not because Tailwind has red-500 color but in any other cases it will)