#css #tailwind-css
#css #tailwind-css
Вопрос:
Возможно ли использовать переменные CSS с Tailwind CSS? Например, допустим, у меня есть эти переменные:
--primary-color: #fff;
--secondary-color: #000;
И я хотел бы использовать их в Tailwind следующим образом:
<div class="bg-primary-color">
<h1>Hello World</h1>
</div>
Как я могу этого добиться?
Ответ №1:
Теперь Tailwind поддерживает пользовательские свойства CSS в виде произвольных значений начиная с версии v3.0.
:root {
--text-color: red;
--text-size: 5rem;
}
<script src="https://cdn.tailwindcss.com"></script>
<span class="text-[color:var(--text-color)] text-[length:var(--text-size)] font-bold">
Hello world!
</span>
Комментарии:
1. Раздражает то, что мне приходится каждый раз определять тип данных, что также делает его действительно раздутым, но да, по крайней мере, это работает.
Ответ №2:
Ответ Армандо не сработал для меня, но с этим изменением он сработал.
global.css
:
нет необходимости настраивать класс или идентификатор. вы можете настроить таргетинг на сам корень, используя псевдоселектор https://www.w3schools.com/cssref/sel_root.asp
@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
--primary-color: #fff;
--secondary-color: #000;
}
что касается tailwind.config.js
:
module.exports = {
theme: {
extend: {
colors: {
"primary-color": "var(--primary-color)",
"secondary-color": "var(--secondary-color)"
},
},
},
};
Комментарии:
1. Мне потребовалась минута, чтобы понять, что
var
также внутри строки.
Ответ №3:
Предполагая, что вы уже добавили TailwindCSS в свой проект и что ваш файл CSS вызывается global.css
.
Сначала вам нужно отредактировать global.css
, чтобы выглядеть так:
@tailwind base;
@tailwind components;
@tailwind utilities;
.root,
#root,
#docs-root {
--primary-color: #fff;
--secondary-color: #000;
}
И затем, чтобы иметь возможность их использовать, вам необходимо обновить tailwind.config.js
с помощью новых переменных CSS следующим образом:
module.exports = {
theme: {
extend: {
colors: {
"primary-color": "var(--primary-color)",
"secondary-color": "var(--secondary-color)"
},
},
},
};
Теперь вы можете использовать эти переменные по своему усмотрению:
<div class="bg-primary-color">
<h1>Hello World</h1>
</div>
Ответ №4:
Вы можете легко настроить его с помощью этого плагина. (поддерживает darkMode) https://github.com/mertasan/tailwindcss-variables
npm install -D @mertasan/tailwindcss-variables
Использование:
// tailwind.config.js
module.exports = {
theme: {
colors: {
red: {
50: 'var(--colors-red-50)'
}
}
variables: {
DEFAULT: {
sizes: {
small: '1rem',
button: {
size: '2rem'
}
},
colors: {
red: {
50: '#ff3232',
},
},
},
'.container': {
sizes: {
medium: '1.5rem',
},
},
},
},
plugins: [
require('@mertasan/tailwindcss-variables')
]
}
Вывод:
:root {
--sizes-small: 1rem;
--sizes-button-size: 2rem;
--colors-red-50: #ff3232
}
.container {
--sizes-medium: 1.5rem
}
Комментарии:
1. Я предполагаю, что переменные css не были встроены в tailwind в какой-то момент. Я использую tailwindcss@2.2.4 и я могу ссылаться на переменные css без этого плагина.
Ответ №5:
Когда я впервые работал с Tailwind и Svelte, я искал решение этой проблемы, и я обнаружил, что вы можете использовать атрибут style:
<script>
let cssVariables = {
'primary-color': "#ffffff",
'secondary-color': "#000"
}
let styleValues = Object.entries(cssVariables)
.map(([key, value]) => `--${key}:${value}`)
.join(';')
</script>
<p style={styleValues}
class="text-center text-[4vmax] text-[color:var(--primary-color)]">
Hello World
</p>
Приведенный выше код создает объект, этот объект преобразуется в строку, которая работает как чистый CSS, каждое свойство присоединяется к этой строке.
Это работает, предполагая, что вы в стройном, хотя, в HTML этого не делает.
Если вы хотите использовать Tailwind с HTML, вы должны написать всю строку целиком:
<p style="--primary-color:#ffffff;--secondary-color:#000"
class="text-[4vmax] text-center text-[color:var(--primary-color)]">
Hello World
</p>
Итак, я рекомендую вам использовать фреймворк, который поможет вам использовать привязку данных. Кроме того, есть и другие вещи, которые вы можете сделать с помощью этого трюка, например, реактивный CSS (ниже, в виде Svelte):
<script>
$: changingHue = 0
setInterval(() => changing_hue , 250)
$: cssVariables = {
'primary-color': `hsl(${changingHue} 100% 70%)`,
'secondary-color': "#000"
}
$: styleValues = Object.entries(cssVariables)
.map(([key, value]) => `--${key}:${value}`)
.join(';')
</script>
<p style={styleValues}
class="text-center text-[4vmax] text-[color:var(--primary-color)]">
Hello World
</p>
В заключение, вам не нужна другая библиотека, чтобы заставить Tailwind использовать переменные CSS, достаточно Javascript и даже HTML.
Комментарии:
1. смешивание CSS и JS должно быть наименьшим средством, поскольку это выполнимо только с помощью css
2. @petitkriket Да, в простом проекте CSS и его переменных было бы достаточно