Допустим, вы создаете концептуальный виджет с именем Awesome Widget и хотите полностью защитить его от конфликтов с окружающими элементами или дочерними элементами, которые находятся в виде содержимого внутри виджета.
Что мы делаемне хотите
div ul li {}
Решение 1: дочерний комбинатор CSS
Использование селектора дочерних комбинаторов CSS, чтобы указать, что должны быть нацелены только прямые дочерние элементы.
.awesomewidget > div > ul > li {}
Решение 2: пространство имен классов
Использование aw (Awesome Widget) в качестве пространства имен для каждого класса, уменьшая вероятность любых других элементов на странице, используя этоточное пространство имен + имя класса.
.awesomewidget .aw-container .aw-list .aw-listitem {}
В CSS есть что-то вроде @namespace, но это только для XML.
Помимо решений 1 и 2, есть ли другие, которые можно использовать?Какой из них вы бы предпочли?Есть ли рекомендации?
РЕДАКТИРОВАТЬ: пример проблемы, которая возникает без надлежащего предотвращения конфликтов имен и стилей
Стилизация виджетов:
.awesomewidget > div ul li {
background-color:red;
}
Пользовательстиль:
ul li {
background-color:blue;
}
Разметка:
<div class="awesomewidget">
<div>
<ul>
<li>
<!-- user content starts here -->
<p>I am the user and I want to add some content here. Let's add a list:</p>
<ul>
<li>Why is this list-item red and not blue?</li>
</ul>
<!-- user content ends here -->
</li>
<li>
<!-- user content starts here -->
<!-- user content ends here -->
</li>
</ul>
</div>
</div>