SASS + SMACSS правильно инкапсулирующие модули

Вот моя установка:

Файловые отношения

home.php <---styles---- _layout.scss
   |
imports
   |
   v
animation.html <---styles---- _animation.scss

home.php - файл, используемый для обрисовки "макета" HTML для домашней страницы:

<div id="animation">
    <div class="site-container">

        <div class="animation-container">
            <?php include 'animation.html'; ?>
        </div>

    </div>
</div>

_layout.scss - файлы, используемые для стилизации не импортированного содержимого home.php:

#animation {
    //styles <div id="animation">
}

    .site-container {margin: 0 auto; max-width: 980px;}

        .animation-container {
            //styles <div class="animation-container">
        }

animation.html - содержит html для "модуля" с именем "animation", импортированного выше

<div class="animation-wrap">
    <div class="example-selector"></div>
    //more html for animation module
</div>

_animation.scss - стили html в animation.html

Вопрос: Как я должен инкапсулировать селекторы в _animation.scss?

Возможности

1.) Я мог бы вложить все селекторы в _animation.scss примерно так:

.animation-wrap {

    .example-selector {

    }
    //all other selectors are nested here using SASS, thus they will not affect
    //elements outside of the animation-wrap
}

2.) Я мог бы присвоить пространство имен почти всем селекторам в _animation.scss, добавив префикс "animation-" (и в соответствующий HTML)

.animation-wrap {}

.animation-example-selector {}

3.) Могут использовать дочерние селекторы для уменьшения каскадирования, но я сомневаюсь, что это лучше, и у него плохая поддержка IE

4.) Подклассы? Но я думаю, что это более актуально для перемещения модуля в другое место, а не для его инкапсуляции, чтобы убедиться, что он не проникает в другой код модуля / макета

Извините за скучный вопрос, это было неловко выразить словами. Любой дополнительный совет или знание передовой практики очень ценится

1 ответ

Извините за плохой вопрос. Это лучше сформулированный вопрос для аналогичной проблемы.

Я решил использовать совершенно новую '&' гибкость SASS 3.3 для именования селекторов в _animation.scss, вот так

.module-animation { 
        &-animation-wrap {

        }
}

Это поддерживает чистоту HTML, инкапсулирует модуль и не загромождает CSS длинными префиксами.

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