Переопределение переменных border-radius с помощью темы

Здравствуйте,

Я попытался переопределить новые переменные для border-radius с помощью удалённой темы, но, похоже, что базовые переменные :root всегда имеют приоритет. Я могу переопределить их, создав компонент темы в админ-панели. Есть ли способ переопределить их с помощью темы? Что я упускаю? :slightly_smiling_face:

Это небольшое изменение очень полезно, большое спасибо! :heart:


Окей, всё работает как ожидалось, это просто мой тестовый сайт меня разыграл. :slightly_smiling_face:

3 лайка

Эм, похоже, это была не шутка :grinning_face_with_smiling_eyes: С удалённой темой я могу переопределить это только если использую !important.

Если я использую это так :arrow_down_small:

$border-radius: 2em !important;

:root { 
   --d-button-border-radius: #{$border-radius}; 
   --d-input-border-radius: #{$border-radius}; 
 }

Иначе, если я попробую это так :arrow_down_small:

:root { 
   --d-button-border-radius: 2em; 
   --d-input-border-radius: 2em; 
 }

Тогда переменные :root из ядра имеют приоритет.

Что я упускаю? :thinking: Спасибо! :slightly_smiling_face:

2 лайка

При тестировании в теме всё работает… как и ожидалось, корень темы переопределяет корень ядра.

Можете показать больше информации? Где вы определяете свой корень? Как выглядит ваш инспектор?

3 лайка

Привет, Чарли,

Спасибо, что проверили это :slightly_smiling_face:

Я пробовал добавить это в scss/custom-variables.scss и импортировать в common.scss. Также пробовал добавить напрямую в common.scss.

Только сейчас заметил: это работает, если к теме не назначен ни один другой компонент (созданный в админке). Если я создам компонент в админке с некоторым CSS в разделе Common, то он не переопределит для меня основные переменные корня.

Это работает, если у темы нет компонентов или если раздел Common / CSS компонента пуст.

Screenshot 2022-11-24 at 18.22.24


Если я создам компонент с некоторым CSS в разделе Common и активирую его для темы:

То у меня это не работает.

d-default-border-radius и d-select-body-border-radius — это пользовательские переменные.

Спасибо за помощь! :slightly_smiling_face:

3 лайка

Понятно. Очень интересно. Спасибо за четкие шаги.

Посмотрим, что у меня получится. На данный момент я сомневаюсь, что существует какое-то другое решение, кроме !important, который вы уже используете, но будет полезно узнать, как и почему это работает именно так.

2 лайка

хм, да, я могу воспроизвести это… это немного странно.

У меня есть удалённая тема, и в файле common.scss содержится только:

:root {
  --d-border-radius: 100px;
}

Это работает, и я получаю скруглённые кнопки и другие элементы:

Как только я добавляю локальный компонент темы, содержащий CSS, всё ломается. Я создал локальный компонент темы, который в common.scss содержит только:

body {
  background: red;
}

Фон становится красным, но скругление границ исчезает:

Тот же компонент работает нормально в удалённом варианте. Я получаю и красный фон, и скруглённые границы.

@david/@pmusaraj, связано ли это с порядком компиляции удалённых и локальных тем?

5 лайков

Я думаю, это связано с нашим магическим внедрением variables.scss в каждый CSS-файл темы. Сейчас в variables.scss у нас следующее:


:root {
  --topic-body-width: #{$topic-body-width};
  --topic-body-width-padding: #{$topic-body-width-padding};
  --topic-avatar-width: #{$topic-avatar-width};
  --d-border-radius: initial;
  --d-nav-pill-border-radius: var(--d-border-radius);
  --d-button-border-radius: var(--d-border-radius);
  --d-input-border-radius: var(--d-border-radius);
}

Поскольку мы внедряем этот SCSS-файл в каждый SCSS-файл темы и плагина, он повторяется снова и снова:

Единственный способ переопределить это сейчас — добавить переопределение в последний стиль темы, только тогда оно будет выведено последним.

Думаю, нам нужно перенести это объявление :root в какое-то глобальное место вне variables.scss в ядре.

6 лайков

Ага! Большое спасибо, я никогда не задумывался, почему они повторяются, и просто полностью упустил это из виду.

Я переместил их в другой файл, чтобы избежать дублирования, и подтвердил, что это решает проблему.

6 лайков