Введение в объектно-ориентированного CSS (OOCSS)

Вы когда-нибудь слышали фразу “ Содержимое King”?Быть веб-разработчиком, и, следовательно, иметь работу that’ S часто связаны с созданием контента, it’ S вероятно, что вы.It’ SA довольно злоупотребляют, но верное утверждение о том, что привлекает посетителей в site.

От Web developer’ с точки зрения, однако, некоторые могут возразить, что Скорость king.Все больше и больше I’ м, начиная в пользу этой позиции.В последние годы многие опытные интерфейсных инженеры предложили свои suggestions о том, как мы можем улучшить работу пользователей с помощью некоторых производительности best practices.

К сожалению, CSS, кажется, получается что-то упускается из виду в этой области, в то время как многие разработчики (по уважительной причине) сосредоточены главным образом на производительности JavaScript и другие areas.

В этом посте I’ VL дело с этим часто упускается из виду район познакомить вас с концепцией объектно-ориентированных CSS и как она может помочь повысить как производительность и управляемость веб-pages.

Принципы OOCSS

Как с любым объектно-ориентированного метода кодирования, цель OOCSS является поощрение повторного использования кода и, в конечном счете, более быстрый и эффективный стилей, которые легче добавлять и maintain.

OOCSS

Как описано на OOCSS GitHub repo’ S Wiki page, OOCSS основана на двух основных principles.

Разделение структуры от Skin

Почти каждый элемент в стиле веб-страница имеет различные визуальные характеристики (т.е. “ skins”), которые повторяются в различных контекстах.Подумайте о website’ брендинг с — цвета, тонкие использование градиентов, или видимых границ.С другой стороны, другие вообще невидимы характеристик (т.е. “ structure”) также являются repeated.

Когда эти различные функции абстрагируются в классе на основе модулей, они становятся reusable и может быть применен к любому элементу и имеют те же основные результаты.Let’ сравним некоторые до и после кода, таким образом Вы можете видеть, что I’ говорю about.

Перед нанесением OOCSS принципам, вы, возможно, CSS, который выглядит примерно так:

#button {
	width: 200px;
	height: 50px;
	padding: 10px;
	border: solid 1px #ccc;
	background: linear-gradient(#ccc, #222);
	box-shadow: rgba(0, 0, 0, .5) 2px 2px 5px;
}

#box {
	width: 400px;
	overflow: hidden;
	border: solid 1px #ccc;
	background: linear-gradient(#ccc, #222);
	box-shadow: rgba(0, 0, 0, .5) 2px 2px 5px;
}

#widget {
	width: 500px;
	min-height: 200px;
	overflow: auto;
	border: solid 1px #ccc;
	background: linear-gradient(#ccc, #222);
	box-shadow: rgba(0, 0, 0, .5) 2px 2px 5px;
}

Трех элементов выше, имеют стили, которые являются уникальными для каждого, и they’ повторно применяться с одноразовых ID селектор для определения стилей.Но они также имеют ряд стилей в общем.Общие стили могут существовать для брендинга целей илисогласованность design.

С немного планирования и предусмотрительности, мы можем абстрагироваться от общих стилей CSS, так что бы в конечном итоге, а не так:

.button {
	width: 200px;
	height: 50px;
}

.box {
	width: 400px;
	overflow: hidden;
}

.widget {
	width: 500px;
	min-height: 200px;
	overflow: auto;
}

.skin {
	border: solid 1px #ccc;
	background: linear-gradient(#ccc, #222);
	box-shadow: rgba(0, 0, 0, .5) 2px 2px 5px;
}

Сейчас все элементы с использованием классов, общий стиль объединены в многоразовых “ skin” и ничего не излишне повторять.Нам просто нужно применять “ skin” класс для всех элементов и результат будет тот же, что и в первом примере будет производить, кроме как с меньше кода и возможностью для дальнейшего reuse.

Разделение контейнеры и Content

Второй принцип, описанный на OOCSS GitHub вики-страницы является разделение контейнеров с их содержанием.Чтобы проиллюстрировать, почему это важно, выполните следующие CSS:

#sidebar h3 {
	font-family: Arial, Helvetica, sans-serif;
	font-size: .8em;
	line-height: 1;
	color: #777;
	text-shadow: rgba(0, 0, 0, .3) 3px 3px 6px;
}

Эти стили будут применяться к любому третьего уровня заголовков, которые являются дочерними #sidebar элемент.? А что, если мы хотим применить те же стили третьего уровня заголовков, которые появляются в нижней, за исключением разного размера шрифта и изменение текста тень

Тогда мы должны были бы сделать что-то вроде этого:

#sidebar h3, #footer h3 {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 2em;
	line-height: 1;
	color: #777;
	text-shadow: rgba(0, 0, 0, .3) 3px 3px 6px;
}

#footer h3 {
	font-size: 1.5em;
	text-shadow: rgba(0, 0, 0, .3) 2px 2px 4px;
}

Или мы могли бы закончить с чем-то хуже:

#sidebar h3 {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 2em;
	line-height: 1;
	color: #777;
	text-shadow: rgba(0, 0, 0, .3) 3px 3px 6px;
}

/* other styles here.... */

#footer h3 {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 1.5em;
	line-height: 1;
	color: #777;
	text-shadow: rgba(0, 0, 0, .3) 2px 2px 4px;
}

Сейчас we’ Re необходимости дублирования styles, и, возможно, не понимают этого (или просто don’ T помощи).С OOCSS, we’ повторно призвал уделять больше предусмотрительности на то, что является общим между различными элементами, то отделить эти общие черты в модули или объекты, которые могут быть повторно использованы anywhere.

Стили, которые объявляются с помощью селектора потомка в эти примеры выше Не reusable., Потому что они зависят от конкретного контейнера (в данном случае либо боковой или нижней)

Когда мы используем OOCSS’ S класса-модуль на базе здания, мы гарантируем, что наши стили не зависят от любых содержащих элемент.Это означает, что они могут быть повторно anywhere В документе, независимо от структурных context.

Real-World Example

Для дальнейшей иллюстрации того, как OOCSS могут быть использованы, I’ буду использовать нечто похожее на то, что я сделал на __ +32 | моя site’ недавнем redesign.После кодирования внутренних элементов заголовка на мой сайт, я поняла, что основные структурные стили для внутренней части заголовка может быть использовано на другие элементы на page.

Так here’ S что-то вроде того, что у меня было, когда я начал укладку мой заголовок:

.header-inside {
	width: 980px;
	height: 260px;
	padding: 20px;
	margin: 0 auto;
	position: relative;
	overflow: hidden;
}

Несколько стилей, перечисленные здесь являются уникальными для .header-inside элемент.Но остальные могут образовывать модуль, который я могу использовать повторно.Так что я могу абстрактных структурных styles в свои многоразового класса.Here’ с результатом:

.globalwidth {
	width: 980px;
	margin: 0 auto;
	position: relative;
	padding-left: 20px;
	padding-right: 20px;
	overflow: hidden;
}

.header-inside {
	padding-top: 20px;
	padding-bottom: 20px;
	height: 260px;
}

Стили принадлежащих .globalwidth класса охватывают следующие аспекты:

  • Фиксированной width
  • Центрирование с помощью маржи: auto
  • Относительное позиционирование создать контекст позиционирования для детей elements
  • Левый и правый отступы 20px
  • Переполнения установлен в “ hidden” дляclearfixing

Сейчас we’ Re свободно использовать эти стили на любой элементы, которые требуют эти же характеристики, просто добавив, что класс нужный элемент — без написания дополнительного линии CSS.

Для моего сайта, я повторно эти структурные стили на первичный элемент содержания и внутренней колонтитула элемента.В зависимости от конструкции, эти стили можно применить и к горизонтальным элементом навигации, которые могут возникнуть между заголовком и содержанием, или любой другой элемент, который имеет фиксированную ширину и должно быть сосредоточено на page.

После добавления “ globalwidth” стили этих элементов, разметка будет выглядеть примерно так:

<header>
<div class="header-inside globalwidth">
</div>
</header>

<div class="main globalwidth">
</div>

<footer>
<div class="footer-inside globalwidth">
</div>
</foo ...

Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров

Comments are closed.