#vue.js #materialize
Вопрос:
Я установил materializecss в свой проект Vue 3.0 с помощью npm.
Он импортирован в мой main.js:
import 'materialize-css/dist/css/materialize.min.css'
Все работает нормально, но когда я хочу использовать @extend для раскрашивания текста, вот так:
<style lang="scss">
.a {
@extend .grey-text, .text-lighten-3;
}
</style>
Я получаю сообщение об ошибке:
SassError: The target selector was not found.
Use "@extend .grey-text !optional" to avoid this error.
Если я использую «!необязательно», правило не применяется.
Можно ли использовать расширения materializecss sass в Vue3? Если да, то как?
Ответ №1:
Сначала вам нужно импортировать/инициализировать часть Sass, содержащую правило CSS (селектор), которое будет расширено.
Sass в файлах компонентов Vue имеет область действия и не видит никакого кода за пределами этого файла (даже если вы не используете scoped
ключевое слово в теге стиля). Это также dart-sass
работает по умолчанию.
Предполагая, что Materialize установлен как node_module и что часть типографии находится там, где находится ваш расширенный класс, вы @используете его следующим образом:
@use 'materialize-css/sass/components/_typography' as *;
a {
@extend .grey-text, .text-lighten-3;
}
Комментарии:
1. Спасибо, я пытался, но все та же ошибка, обновлено в процентах
2. Извините, я неправильно понял проблему, после секундного раздумья я обновил ответ. Вам не нужны %, точки должны работать. Чего не хватает, так это расширяемого класса, который вам нужно сначала импортировать с помощью @use.
3. Доказательство аналогичной концепции здесь, где мы @используем переменные из пакета узлов в компоненте Vue: github.com/ahansson/hgrid-css-vue-vite/blob/master/src/…
4. Путь на самом деле @use ‘материализовать-css/sass/материализовать.scss’ как *; но ответ был правильным!! У меня есть еще один вопрос: если бы я использовал другой препроцессор scss, доступный с vue cli (node sass или smt), решило бы это проблему без использования @use?
5. Хорошо, обновим ответ. с правильным путем, но будьте осторожны, если вы @используете materialise.scss, вы импортируете полную структуру в свой компонент. Вместо этого попробуйте найти конкретный файл, в котором находится ваш расширяемый класс, чтобы избежать получения полного дубликата Materialize в каждом компоненте. Node-sass к настоящему времени устарел, его не следует использовать. До того, как sass-dart все в Sass, вероятно, было глобальным, они изолировали модули
@use
и другие методы, позволяющие использовать пространство имен. Более обременительный, но и гораздо более надежный в крупных проектах.