Я хотел бы сделать как h2, так и ссылку белыми, что достаточно просто, но у меня также есть другой тип блока, который существует за пределами наложения, где я бы хотел, чтобы h2 был белым ... что такое лучший способ сделать это?
Для вашего конкретного случая, это звучит как лучший способ, чтобы написать код будет:
// in overlay.css/.less/.scss/etc...
.overlay__title,
.overlay__text{
color: white;
}
// in otherBlock.css/.less/.scss/etc...
.otherBlock__title{
color: white;
}
который выглядит странно знакомым.
Чтобы объяснить, почему, давайте сделаем шаг в сторону от CSS и посмотрим, как работают другие языки программирования.
Представьте у вас есть объект в языке ООП, таких как C#, и этот объект должен представлять книгу. Для объекта книги, вероятно, потребуется title
(e.x.Автостопом по Галактике):
class Book {
string Title { get; set; }
}
Теперь представьте, что вам сейчас нужно создать объект, который представляет человека. Объект человека также нужен title
(e.x. Dr.):
class Person {
string Title { get; set; }
}
Между этих двух классов не существует структуры наследования. Это означает, что будет код, который должен быть переписан, несмотря на то, что он выглядит аналогичным.
Возвращаясь к CSS, эти два блока произойдет иметь некоторые схожие стили. Вы не описали какой-либо связи между ними, что они должны использовать для повторного использования кода, поэтому просто дублируйте стили.
Если вы используете препроцессор, вы можете обнаружить, что полезно использовать переменные — особенно для цветов — и Mixins — особенно куски многоразовых стилей — уменьшить объем кода, который на самом деле писать, но в конце концов CSS будет умеренно повторяться.
Это прекрасно. Если ваш CSS будет загружен gzipped, то дублирование будет сжиматься довольно хорошо.
... но как насчет других случаев?
Если вы обнаружите, что вы постоянно перекрывая определенный набор стилей (.body__text
, .content__text
, .description__text
), и все они относятся к одному элементу (бывший <p>
), а затем рассмотреть возможность изменения стилей по умолчанию для этого элемента, чтобы уменьшить количество CSS, которое вы используете для переопределения элемента.
Если вы обнаружили, что вы постоянно перестраиваете ту же конкретную структуру в пределах существующих блоков, вам может потребоваться создать новый блок. Например:
<div class="article">
<time class="article__timestamp">
<span class="article__date">...</span>
<span class="article__time">...</span>
</time>
...
</div>
и
<div class="post">
<time class="post__timestamp">
<span class="post__date">...</span>
<span class="post__time">...</span>
</time>
...
</div>
может быть переработан в:
<div class="article">
<time class="timestamp">
<span class="timestamp__date">...</span>
<span class="timestamp__time">...</span>
</time>
...
</div>
и
<div class="post">
<time class="timestamp">
<span class="timestamp__date">...</span>
<span class="timestamp__time">...</span>
</time>
...
</div>