Как @ extend из другого файла sass, или как достичь OOSASS? [дубликат]
этот вопрос уже есть ответ здесь:
мой вопрос на самом деле шире, чем в заголовке написано. Именно здесь я сталкиваюсь с проблемой с моей идеей, но я открыт для всех видов решений. Позвольте мне объяснить мой общий цель.
мне нравится, что могут делать препроцессоры CSS. Мне нравятся идеи простые OOCSS селекторы и SMACSS. Я новичок во всем этом. Я пытаюсь обновить свои методы проектирования, чтобы каким-то образом включить лучшее из всех миров. У меня есть теоретический метод, который работает так:
- используйте только семантические имена классов или идентификаторы или что угодно
- определите модули или шаблоны в некоторой общей таблице стилей
- имейте в таблицы стилей страницы которые @расширяют модули от общего стилей на семантические селекторы, относящиеся к данной страницы
значит так:
/* modules.scss */
.ruddy {color: red}
.fullwidth {width: 100%; display: block;}
плюс:
/* homepage.scss */
@import modules.sass
#intro {@extend ruddy; @extend fullwidth}
aside {@extend ruddy;}
.thing {@extend fullwidth;}
становится этот:
/* homepage.css */
#intro, aside {color: red}
#intro, .thing {width: 100%; display: block;}
Я не обязательно видел, как кто-то еще это делает, но мне показалось, что это хорошая идея. Проблема, с которой я сталкиваюсь в своей великой схеме, заключается в том, что @extend не работает из импортированного файла. Кто-то где-то еще так сказал, что это невозможно. Это правда? У меня есть миксины для работы. но проблема с ними в том, что они дублируют каждый атрибут в выходном css, что не кажется идеальным.
Я на самом деле более пристрастен к LESS (синтаксис), но это даже не имеет расширения на данный момент. Должен ли я не беспокоиться о неэффективности миксинов или есть какой-то способ достичь того, о чем я прошу?
Примечание: Я авто-компиляции моей Сасс средство Prepros. Когда я пытаюсь скомпилировать код, такой как выше, я получаю ошибку как.
предупреждение на линии 11 ... sassдомой.scss: "#intro " не удалось @ расширить "ruddy". Селектор "ruddy" не найден.
Если я просто скопирую код из модуля.СКС на странице.scss тогда проблема уходит.
2 ответов
проблема:
#intro {@extend ruddy; @extend fullwidth}
aside {@extend ruddy;}
.thing {@extend fullwidth;}
ruddy
и fullwidth
не селекторы. Если вы расширяете .ruddy
class, вам нужно включить период, так как это часть селектора.
#intro {@extend .ruddy; @extend .fullwidth}
aside {@extend .ruddy;}
.thing {@extend .fullwidth;}
это неправда.
вы можете объявить классы (включая %префиксами те) в одном файле импортируйте первый файл во второй файл и расширьте классы во втором файле.
пример:
foo.Сасс!--16-->
%foo
color: red
бар.Сасс!--16-->
@import foo.sass
html
@extend %foo
выполнить sass bar.sass bar.css
.
бар.в CSS появляется
html {
color: red; }
PS для реального опыта SASS, вы должны рычагикомпас. Компас-это куча вещей под одним названием:
- удобный инструмент для эффективной компиляции SASS;
- огромная библиотека удобных стилей SASS на все случаи жизни;
- экосистема расширений, которые вы можете легко установить и использовать в своих проектах. Вот что выделяет Сасс. Вам не нужно изобретать колесо снова и снова.
UPD наконец-то ошибка смс!
вы пропускаете точку в названии класса. aside {@extend ruddy;}
должно быть aside {@extend .ruddy;}
.