Я немного читал о Теории Николь Салливан о Объектно-ориентированном CSS . Короче говоря, основная идея состоит в том, что вместо того, чтобы начинать с нуля каждый раз, когда мы создаем стиль веб-сайта, вероятно, лучше использовать некоторые уже написанные базовые строительные блоки в качестве классов, а затем расширять в соответствии с нашими потребностями. («Расширение» подразумевает добавление более специфических / переопределяющих классов в HTML из-за невозможности наследования классов CSS друг от друга ... надеюсь, в CSS4? :) Принцип OOCSS основан на том факте, что вам не нужно переписывайте класс Java Math каждый раз, когда вам нужно найти синус двойного числа. Код уже написан (кем-то), так почему бы не использовать его?
Хотя я думаю, что это отличное предложение в абстрактной форме, у меня возникают проблемы с его пониманием с соответствующей точки зрения. [Прочтите ниже мой конкретный вопрос, но я всегда ищу материалы для чтения, поэтому не стесняйтесь остановиться на минуту и прокомментировать еще несколько ссылок на ресурсы OOCSS, например, преимущества и критика, и т. д.]
Вот моя таблица стилей:
.heading {...} /* for all heading styles */
.alpha {...} /* specific changes for h1 */
.beta {...} /* specific changes for h2 */
.gamma {...} /* specific changes for h3 */
.delta {...} /* specific changes for h4 */
.epsilon {...} /* specific changes for h5 */
.zeta {...} /* specific changes for h6 */
Теперь первый селектор предназначен для любого заголовка с общими свойствами, такими как font-family
, letter-spacing
и т. Д. И затем каждый «подкласс» (на самом деле не подкласс) имеет определенные различия, такие как color
, font-style
, font-weight
и т. Д. Тот факт, что эти "подклассы" записаны после .heading
в таблице стилей, указывает на то, что если любое из них содержит одинаковые свойства с неравными значениями, то свойство в .heading
будет переопределено этим в "подклассе". Чтобы получить заголовок 1, я бы написал:
<h1 class="heading alpha">Contact Me</h1>
Фактически, я мог бы стилизовать любой элемент, например span
, с помощью class="heading alpha"
, но на самом деле это действительно h1
элемент.
[Конечно, я бы хотел сказать
.heading {...}
.alpha {
extends: .heading;
...
}
==============================
<h1 class="alpha">Contact</h1>
но мы еще не достигли этого уровня.]
У меня вопрос: если бы heading alpha
s были выровнены по левому краю, что бы я сделал, чтобы сделать этот экземпляр центрированным? Николь сказала бы, что я должен импортировать ее таблицу стилей и использовать ее правило .txtC {text-align:center;}
, чтобы мой код стал:
<h1 class="heading alpha txtC">Contact Me</h1>
Но я думаю, что немного однозначно иметь соответствие «один к одному» с правилами и классами CSS. Если бы я использовал этот метод, то мне не нужно было бы писать какие-либо из моих собственных таблиц стилей, а вместо этого просто добавить несколько небольших классов («legos») в мой HTML-код, сделав его громоздким и нечитаемым. Представьте себе:
<p class="ital size-medium sans-ser txtJ med-height dark-blue">This is a
size 12pt, italic, Arial, left-right justified, 1.2em line height, dark
blue paragraph.</p>
Не имеет ли смысла написать один класс specialParagraph
(или paragraph-special
или что-то еще) и затем назначить все эти правила в CSS? Нет необходимости в Legos? В моем случае, я не могу просто добавить .alpha {text-align: center;}
в начало моей страницы контактов? Или, может быть, даже in-line?