Итак, у меня есть проект React с загруженным Bootstrap.css. Я хотел бы как-то переопределить переменные, поэтому, например, у меня есть несколько кнопок вроде
<button className = "btn btn-primary">Hello</button>
Которые в основном наследуют цвет от:
:root {
--primary: somecolor;
}
Есть ли способ как-то отменить это? Я пробовал передать его как встроенный стиль для компонентов, таких как <Component style = {{"--primary" : "red"}} />, который переопределит :root { --primary }, но цвета кнопок останутся прежними. Самый простой способ сделать это, учитывая, что я поддерживаю динамические цвета, поэтому я не могу создать несколько файлов CSS, и было бы хорошо, если бы мне не пришлось переписывать каждую кнопку, я должен быть styled-component, который умы реквизит!
Я могу, но разве это не перекомпилируется при каждой смене цветов? Предпочел бы сделать это во время выполнения, если возможно






Не уверен, что это сработает, но идея ...
Не могли бы вы отредактировать свой файл bootstrap.css как этот
: root {--primary: unset; }
Таким образом, вам не придется перезаписывать стили начальной загрузки?
В основном я пытаюсь использовать предоставленный метод для создания тем, но да, я мог бы пойти дальше и поменять местами все цвета .*-primary, я думаю! Спасибо
На самом деле нет простого способа сделать это. Вы можете сгенерировать CSS для «пользовательских» основных цветов в SASS, а затем добавить «корневой» класс основного цвета к компоненту следующим образом ...
SASS для генерации «первичного» цвета Bootstrap CSS
/* import the necessary Bootstrap files */
@import "bootstrap";
@mixin build-primary-classes($color) {
/* background classes */
@include bg-variant(".bg-primary", $color);
/* btn classes */
.btn-primary {
@include button-variant($color, $color);
}
.btn-outline-primary {
@include button-outline-variant($color);
}
/* text- classes */
@include text-emphasis-variant(".text-primary", $color);
/* badge classes */
.badge-primary {
@include badge-variant($color);
}
/* borders */
.border-primary {
border-color: $color !important;
}
}
$customprimarycolors: (
"purple": purple,
"red": red,
"orange": orange
);
@each $colorName, $color in $customprimarycolors {
.#{$colorName} {
@include build-primary-classes($color);
}
}
JS
class Hello extends React.Component {
constructor(props) {
super(props);
}
render() {
return(
<div className = {this.props.className}>Hello <button className = "btn btn-primary">Button</button></div>
);
}
}
ReactDOM.render(<Hello className = "red" />, document.getElementById('root'));
Демо Codeply: https://codeply.com/go/R4X5x8taiH
ЧЕСТНО ГОВОРЯ ... Я не уверен, стоит ли попытаться перезаписать в CSS некоторые части классов, построенных при начальной загрузке, на переменную цвета, такую как $primary, но пусть остальные классы построены на той же переменной, что и она.
Вот так возникают проблемы ...
ИМХО лучшим способом было бы сделать это так, как это предоставляет Bootstrap:
При изменении в SASS базовой переменной $primary на новый желаемый цвет в Bootstrap цвет изменится, и классы будут там. Или добавление нового цвета $additional-color и добавление цвета для карты $theme-color, и все дополнительные классы создаются на лету ... Просто взгляните на документацию ... это намного проще, чем кажется на первом Смотреть:
https://getbootstrap.com/docs/5.0/customize/color/
Итак, да: в темах SASS можно просто установить / добавить цветовые вары.
Но если в проекте невозможно использовать SASS или прямая настройка по каким-то причинам не нужна ... в сети есть множество бесплатных простых в использовании инструментов для создания тем, которые сделают эту работу за вас. Тогда вы сможете импортировать чистый и согласованный CSS Bootstrap с желаемыми цветами. Потому что это так просто. Bootstrap так же успешен (что не означает, что мне / вам он должен понравиться). Поскольку Bootstrap 5 все еще является бета-версией, здесь пример для BS4 ...
http://pikock.github.io/bootstrap-magic/app/index.html#!/editor
ПРИМЕЧАНИЕ: только изменение / перезапись цветовых переменных CSS в файле CSS недостаточно, поскольку цвета в классах жестко закодированы в исходные шестнадцатеричные цвета. Вам действительно придется перезаписать исходные классы, что приведет к дублированию структур кода.
Вы можете использовать SASS?