для достижения этого поведения у вас есть два основных способа сделать это. первое описание не совместимо с Inte rnet Explorer.
В последней версии CSS, описанной в W3 C, мы можем иметь переменную непосредственно в CSS.
Как этот бэкэнд может сделать что-то вроде этого:
<head>
<style type="text/css">
:root {
--primary-color: #cecece;
--secondary-color: #fefefe;
}
</style>
</head>
тогда на вашем s css (или css) вы можете сделать что-то вроде:
.mySelector {
color: var(--primary-color, black);
}
, который в основном будет интерпретироваться как:
.mySelector {
color: #cecece;
}
Или запасной цвет black
, если --primary-color
не определен.
Как вы можете себе представить, для бэкэнда очень просто подготовить конфигурацию для внешнего интерфейса. А со своей стороны (в качестве внешнего интерфейса) вы можете просто использовать то, что уже доступно в CSS инструментах API.
Но если вы ищете что-то, совместимое с IE. Возможно, вам нужна более сложная инфраструктура.
Цель состоит в том, чтобы при каждой смене цвета пользователя вызывать компиляцию sass для веб-пакетов, чтобы создать вывод css с соответствующей переменной конфигурацией.
для этого вам понадобится загрузчик ресурсов SaSS , который автоматически внедрит файл sass во все остальные файлы. Это похоже на автоматическое добавление @import "_colors"
.
, тогда бэкэнд-сервер должен будет:
- Записать куда-нибудь _color.s css файл (скажем, /user/123/_color.s css)
- Запросить компиляцию, например
webpack client 123
- прочитать выходную папку веб-пакета для клиента 123 и определить, существует ли указанный c CSS существует
- Вставить в ваша голова HTML.
Для настройки веб-пакета
в вашем веб-пакете у вас будет что-то вроде:
const argv = require("yargs").argv;
entry: {
[...]
},
output: {
// Take the argument as clientId and craft dedicated output folder.
path: helpers.root(`public/themes/front/${argv.client}`),
filename: "[name].[contenthash].js",
chunkFilename: "[name].[contenthash].js"
}
Как эта база на Идентификатор клиента, в котором вы сохраните исходную CSS в указанной папке c.
Наконец, правила SaSS будут выглядеть так:
{
test: /\.scss$/,
use: [
'style-loader',
'css-loader',
'postcss-loader',
'sass-loader',
{
loader: 'sass-resources-loader',
options: {
resources: (argv.client) ? `/user/${ argv.client }/_color.scss` : `/user/default/_color.scss`,
},
},
],
}