Ref:
SassError: Неопределенная переменная: $ white
Каждый <style lang="scss">
компилируется индивидуально. Вам нужно @import
файл, который определяет $white
в вашем компоненте, прежде чем парсер узнает, что означает $white
.
Именно поэтому большинство фреймворков хранят свои переменные в файле _variables.scss
, который импортируется ввсе остальные файлы / контексты SCSS.
_variables.scss
даже не загружается на страницу, потому что в большинстве случаев он фактически не содержит никаких правил. Он содержит только определения переменных, которые импортируются в другие файлы .scss
, которые выводят .css
.
Ссылка:
Тем не менее, все SCSS, содержащиеся в файле SASS, где определяется переменная, работают во всем приложении.
Если вы импортируете файл SCSS в ваш vue.config.js
, на выходе будет обычный тег <style>
. Его содержимое будет сгенерировано во время компиляции / сборки и приведет к некоторому CSS (который применяется ко всему документу).
Если специально не импортирован в компонент SCSS (с помощью команды @import
), компилятор не будет знатьчто означает $white
.
Существует важное различие между контекстом компиляции и контекстом браузера. Компиляция происходит во время компиляции (скорее всего, в node-sass
). Контекст браузера - это фактический браузер, который понимает только CSS, полученный в результате компиляции.
Как Vue применяет правила стиля только к родительскому элементу, а не к дочерним элементам того же класса? Это достигается с помощью области видимости.
Это означает применение настраиваемого атрибута data-v-{key}
ко всем селекторам в сгенерированном теге <style>
и ко всем элементам, к которым должен применяться стиль.
См. Этот пример ипроверьте его с помощью веб-консоли: https://codesandbox.io/s/vue-template-ge2hb
Он производит такую разметку:
Как видите, scoped
К CSS добавлен дополнительный [data-v-763db97b]
, добавленный к селектору, что означает, что он применяется только к элементам, имеющим этот атрибут data
.