Функция затемнения для css тем - Ошибка: аргумент `$ color` из` darken ($ color, $ amount) `должен быть цветом

Пытаюсь добавить возможность изменить цвет сайта. Итак, у меня есть цветовое поле, которое работает нормально, но проблема в том, что мне нужно изменить цвет на 10% темнее при наведении курсора мыши. Функция darken говорит, что первым аргументом должен быть цвет.

Error: argument `$color` of `darken($color, $amount)` must be a color

Мой код следующий:

:root {
  --main-colour: #f06d06;
}

$colour-primary: var(--main-colour);


.btn {
    background-color: $colour-primary;

    &:hover {
       background-color: darken($colour-primary, 10%);
    }
}

Мне нужна переменная --main-color, потому что она будет использоваться для изменения цвета в реальном времени.

Любые идеи?

Большое спасибо

Я пытаюсь воспроизвести этот пример: css-tricks.com/css-custom-properties-theming. Цвет фона работает нормально, единственная проблема заключается в том, что я пытаюсь использовать цвет с функцией затемнения.

Alejandro 30.05.2018 21:34
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
4
1
4 449
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

var(--main-colour) - это функция CSS, которая интерполируется во время выполнения (поэтому она будет разрешена ПОСЛЕ компиляции SCSS). SCSS скомпилирован, поэтому все его функции вычисляются раньше и не меняют время выполнения.

Проблема в вашем коде возникает из-за того, что функция darken требует действительного цвета для выполнения вычислений, и во время компиляции все, что она получает, - это var(--main-colour), а не сам цвет. (darken - это функция SCSS, а не функция CSS, поэтому ее нельзя изменить во время выполнения).

и какое решение?

ValRob 01.11.2018 20:14

@ValRob К сожалению, нет прямого решения этой проблемы в текущем состоянии. Если вам нужно затемнить цвет в CSS, вы скорее ищете решение на основе JS.

vicbyte 03.11.2018 21:36

Это наиболее краткое объяснение, которое я видел по этому поводу, и хотя мне не нравится, что он работает таким образом, он имеет полный смысл.

siannopollo 20.03.2020 23:08

Вместо использования var используйте $. тогда вы можете обойти проблему: $green: hsl(154, 59%, 51%); background: darken($green, 10%);

Parsa Arvaneh 22.06.2021 16:28

Эта проблема исходит от Bootstrap.

Если вы работаете с такими фреймворками, как React или angular, не забудьте импортировать функцию перед переменными.

@import 'functions';
@import 'variables';

Вам нужно импортировать 3 файла

@import "../node_modules/bootstrap/scss/functions"; @import "../node_modules/bootstrap/scss/variables"; @import "../node_modules/bootstrap/scss/mixins";

Как уже было сказано, невозможно. Однако в некоторых случаях filter: brightness(90%); может быть обходным решением. Подробнее о фильтрах CSS здесь.

В новой версии вам необходимо импортировать переменные начальной загрузки. Если патч файла проверки ошибок по-прежнему, он решает после импорта переменных начальной загрузки, я не импортировал переменные начальной загрузки, ... @import "~ bootstrap / scss / functions"; @import '~ bootstrap / scss / variables';

Другие вопросы по теме