SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Downloaden Sie, um offline zu lesen
LESS and even more!
LESS and even more!
Код стилей:
● Понятный
● Гибкий
● Разбит на файлы небольшого
размера
SMACSS
Scalable and Modular Architecture for CSS
by Jonathan Snook
Категории стилей
1. Base
2. Layout
3. Module
4. State
5. Theme
1. Base
html, body {...}
input[type=text] {...}
a {...}
a:hover {...}
p > span {...}
span + span {...}
- reset.css
2. Layout
#header, #footer {...}
#sidebar-first, #sidebar-second {...}
#content {...}
.l-fixed #sidebar-first { width: 200px; }
.l-fluid #sidebar-first { width: 20%; }
3. Module
.menu {
border: 1px solid #ccc;
}
.menu > h2 {
padding: 5px;
}
.menu li {
padding: 5px;
}
.menu {
border: 1px solid #ccc;
}
.menu-header {
padding: 5px;
}
.menu-item {
padding: 5px;
}
Sub-modules
.menu {
border: 1px solid #ccc;
}
.menu-item {
padding: 5px;
}
.menu-horizontal .menu-item {
display: inline-block;
}
4. State
#header.is-sticky {
position: fixed;
top: 0;
}
.menu.is-collapsed > h2 {
text-decoration: underline;
}
Изменение состояния
● класс
● псевдо-класс
● media query
● атрибут
.menu.is-collapsed {...}
a:hover {...}
@media screen and (max-width: 400px) {...}
.button[data-state=pressed] {...}
5. Theme
/* in module-name.css */
.mod {
border: 1px solid;
}
/* in theme.css */
.mod {
border-color: blue;
}
/* in theme.css */
.theme-border {
border-color: purple;
}
.theme-background {
background: linear-gradient( ... );
}
● используйте классы
● избегайте селекторов с
идентификаторами
● избегайте селекторов по элементам
● избегайте большой вложенности в
селекторах
● используйте префиксы в классах
Структура файлов
● выносите базовые стили в отдельный файл
● в зависимости от типов layout-ов, выносите их в
отдельный файл или каждый основной тип в отдельный
файл
● выносите каждый модуль в отдельный файл
● в зависимости от размера проекта, выносите подмодули
в отдельные файлы
● выносите глобальные состояния в отдельный файл
● выносите layout-ы и состояния, относящиеся к модулю, в
том числе media queries, в файл модуля
Sass
Переменные
$fontSize: 16px;
$lineHeight: normal;
$fontColor: #000;
.element {
font-size: $fontSize;
line-height: $lineHeight;
color: $fontColor;
}
$black: #000;
$fontColor: $black;
.element {
color: $fontColor;
}
.scss
.element {
font-size: 16px;
line-height: normal;
color: black;
}
.element {
color: black;
}
.css
Переменные
$borderWidth: 1px;
$borderStyle: solid;
$borderColor: #ccc;
$border: $borderWidth $borderStyle $borderColor;
.element-1 {
border: $border;
}
.element-2 {
border: $borderWidth $borderStyle $borderColor;
}
.element-1 {
border: 1px solid #cccccc;
}
.element-2 {
border: 1px solid #cccccc;
}
.scss .css
Вложенные правила
.menu {
a {
color: #0000cc;
&:hover {
text-decoration: underline;
}
&.active {
color: #cc0000;
}
}
}
.scss
.menu a {
color: #0000cc;
}
.menu a:hover {
text-decoration: underline;
}
.menu a.active {
color: #cc0000;
}
.css
Миксины (Mixins)
@mixin link {
color: #0000cc;
&:hover {
text-decoration: underline;
}
}
a {
@include link;
}
.scss
a {
color: #0000cc;
}
a:hover {
text-decoration: underline;
}
.css
Миксины
@mixin border-radius($radius) {
-moz-border-radius: $radius;
-webkit-border-radius: $radius;
border-radius: $radius;
}
.rounded {
@include border-radius(5px);
}
.scss
.rounded {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
}
.css
Миксины
@mixin fixed-size($width: 100px, $height: 100px) {
width: $width;
height: $height;
}
.box-1 {
@include fixed-size;
}
.box-2 {
@include fixed-size(150px, 200px);
}
.scss
.box-1 {
width: 100px;
height: 100px;
}
.box-2 {
width: 150px;
height: 200px;
}
.css
Расширения
.error {
border: 1px #f00;
background-color: #fdd;
}
.error.intrusion {
background-image: url("/image/hacked.png");
}
.seriousError {
@extend .error;
border-width: 3px;
}
.scss
.error, .seriousError {
border: 1px #f00;
background-color: #fdd;
}
.error.intrusion, .intrusion.seriousError {
background-image: url("/image/hacked.png");
}
.seriousError {
border-width: 3px;
}
.css
Расширения
a:hover {
text-decoration: underline;
}
.hoverlink {
@extend a:hover;
}
.scss
a:hover, .hoverlink {
text-decoration: underline;
}
.css
Математические
выражения и функции
$baseFontSize: 16px;
$color: #999;
$elementOuterWidth: 300px;
$elementLeftRightPadding: 20px;
.element {
padding: 0 $elementLeftRightPadding;
width: $elementOuterWidth -
$elementLeftRightPadding * 2;
font-size: $baseFontSize + 2;
color: $color + #000033;
}
.title {
font-size: $baseFontSize * 1.5;
}
.scss
.element {
padding: 0 20px;
width: 260px;
font-size: 18px;
color: #9999cc;
}
.title {
font-size: 24px;
}
.css
Математические
выражения и функции
$colNumber: 3;
.col {
width: floor(100% / $colNumber);
}
.col.last {
width: 100% - floor(100% / $colNumber) *
($colNumber - 1);
}
$contentWidth: 960px;
$colPaddingLeftRight: 20px;
.another-col {
width: floor(($contentWidth / $colNumber) - 2 *
$colPaddingLeftRight);
}
.scss
.col {
width: 33%;
}
.col.last {
width: 34%;
}
.another-col {
width: 280px;
}
.css
Функции работы с
цветами
$linkColor: #0000ff;
$buttonColor: #b83000;
a {
color: $linkColor;
&:hover {
color: lighten($linkColor, 10%);
}
}
.button {
background-color: $buttonColor;
&:hover {
background-color: darken($buttonColor, 10%);
}
}
.scss
a {
color: blue;
}
a:hover {
color: #3333ff;
}
.button {
background-color: #b83000;
}
.button:hover {
background-color: #852300;
}
.css
Директива @import
.element-1 {
display: block;
float: left;
}
element-1.scss
.element-1 {
display: block;
float: left;
}
.element-2 {
display: inline-block;
border: 1px solid #999;
}
main.css
.element-2 {
display: inline-block;
border: 1px solid #999;
}
element-2.scss
@import "element-1.scss";
@import "element-2";
main.scss
+ Zen Grids
Omega
(7.x-4.x)
/* main.scss */
@import
"variables",
"mixins",
"base/import",
"layout/import",
"components/import";
Полезные ссылки
google.com
Полезные ссылки
● CSS coding standards https://drupal.org/node/1886770
● SMACSS http://smacss.com/
● Sass http://sass-lang.com/
● Compass http://compass-style.org/
● Zen https://drupal.org/project/zen
● Omega https://drupal.org/project/omega
● AdaptiveTheme https://drupal.org/project/adaptivetheme
Спасибо за
внимание!

Weitere ähnliche Inhalte

Andere mochten auch

Must-knows and common mistakes in theming. Kate Kalashnikova.
Must-knows and common mistakes in theming. Kate Kalashnikova.Must-knows and common mistakes in theming. Kate Kalashnikova.
Must-knows and common mistakes in theming. Kate Kalashnikova.ADCI Solutions
 
Upgrade with 6 to 7. Denis Komel'kov
Upgrade with 6 to 7. Denis Komel'kovUpgrade with 6 to 7. Denis Komel'kov
Upgrade with 6 to 7. Denis Komel'kovADCI Solutions
 
Agenda ppt street traders investigation
Agenda ppt street traders investigationAgenda ppt street traders investigation
Agenda ppt street traders investigationagendaFM
 
Contextly. Dmitry Tartynov
Contextly. Dmitry TartynovContextly. Dmitry Tartynov
Contextly. Dmitry TartynovADCI Solutions
 
Open Letter Submission on WEGE Bill
Open Letter Submission on WEGE BillOpen Letter Submission on WEGE Bill
Open Letter Submission on WEGE BillagendaFM
 
Drupal front-end performance
Drupal front-end performance Drupal front-end performance
Drupal front-end performance ADCI Solutions
 
Drupal. History and Future. Sergey Susikov.
Drupal. History and Future. Sergey Susikov.Drupal. History and Future. Sergey Susikov.
Drupal. History and Future. Sergey Susikov.ADCI Solutions
 
Introduction to cron queue
Introduction to cron queueIntroduction to cron queue
Introduction to cron queueADCI Solutions
 

Andere mochten auch (9)

Must-knows and common mistakes in theming. Kate Kalashnikova.
Must-knows and common mistakes in theming. Kate Kalashnikova.Must-knows and common mistakes in theming. Kate Kalashnikova.
Must-knows and common mistakes in theming. Kate Kalashnikova.
 
Upgrade with 6 to 7. Denis Komel'kov
Upgrade with 6 to 7. Denis Komel'kovUpgrade with 6 to 7. Denis Komel'kov
Upgrade with 6 to 7. Denis Komel'kov
 
Agenda ppt street traders investigation
Agenda ppt street traders investigationAgenda ppt street traders investigation
Agenda ppt street traders investigation
 
Contextly. Dmitry Tartynov
Contextly. Dmitry TartynovContextly. Dmitry Tartynov
Contextly. Dmitry Tartynov
 
Open Letter Submission on WEGE Bill
Open Letter Submission on WEGE BillOpen Letter Submission on WEGE Bill
Open Letter Submission on WEGE Bill
 
Drupal front-end performance
Drupal front-end performance Drupal front-end performance
Drupal front-end performance
 
Sharp 32 pulg 32c24
Sharp 32 pulg 32c24Sharp 32 pulg 32c24
Sharp 32 pulg 32c24
 
Drupal. History and Future. Sergey Susikov.
Drupal. History and Future. Sergey Susikov.Drupal. History and Future. Sergey Susikov.
Drupal. History and Future. Sergey Susikov.
 
Introduction to cron queue
Introduction to cron queueIntroduction to cron queue
Introduction to cron queue
 

Ähnlich wie LESS and even more. Anton Shubkin.

Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтендаСтажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда7bits
 
Андрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass frameworkАндрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass frameworkAlbina Tiupa
 
CSS. Практика
CSS. ПрактикаCSS. Практика
CSS. ПрактикаVitebsk Miniq
 
Front-end разработка. Compass
Front-end разработка. CompassFront-end разработка. Compass
Front-end разработка. CompassDrupalSib
 
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)Ontico
 
Артем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSSАртем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSSDataArt
 
Web осень 2012 лекция 8
Web осень 2012 лекция 8Web осень 2012 лекция 8
Web осень 2012 лекция 8Technopark
 
010 презентация less и адаптивный дизайн
010 презентация   less и адаптивный дизайн010 презентация   less и адаптивный дизайн
010 презентация less и адаптивный дизайнsivorka
 
Web осень 2013 лекция 4
Web осень 2013 лекция 4Web осень 2013 лекция 4
Web осень 2013 лекция 4Technopark
 
Crossbrowser Css layout
Crossbrowser Css layoutCrossbrowser Css layout
Crossbrowser Css layoutDarkestMaster
 
всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта Olga Pirozhenko
 
Ускорение frontend-разработки с помощью Haml, Sass, Compass
Ускорение frontend-разработки с помощью Haml, Sass, CompassУскорение frontend-разработки с помощью Haml, Sass, Compass
Ускорение frontend-разработки с помощью Haml, Sass, CompassAndrey Sitnik
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....rit2011
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....rit2011
 
04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилей04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилейRoman Brovko
 
Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)
Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)
Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)Ontico
 
пользовательские свойства как основа архитектуры CSS
пользовательские свойства как основа архитектуры CSSпользовательские свойства как основа архитектуры CSS
пользовательские свойства как основа архитектуры CSSZigzag_McQuack
 

Ähnlich wie LESS and even more. Anton Shubkin. (20)

Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтендаСтажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
 
Semantic Grid. Layout of the future
Semantic Grid. Layout of the futureSemantic Grid. Layout of the future
Semantic Grid. Layout of the future
 
Андрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass frameworkАндрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass framework
 
CSS. Практика
CSS. ПрактикаCSS. Практика
CSS. Практика
 
Front-end разработка. Compass
Front-end разработка. CompassFront-end разработка. Compass
Front-end разработка. Compass
 
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
 
Артем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSSАртем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSS
 
Web осень 2012 лекция 8
Web осень 2012 лекция 8Web осень 2012 лекция 8
Web осень 2012 лекция 8
 
CSS
CSSCSS
CSS
 
010 презентация less и адаптивный дизайн
010 презентация   less и адаптивный дизайн010 презентация   less и адаптивный дизайн
010 презентация less и адаптивный дизайн
 
Web осень 2013 лекция 4
Web осень 2013 лекция 4Web осень 2013 лекция 4
Web осень 2013 лекция 4
 
Crossbrowser Css layout
Crossbrowser Css layoutCrossbrowser Css layout
Crossbrowser Css layout
 
всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта
 
аккордеон
аккордеонаккордеон
аккордеон
 
Ускорение frontend-разработки с помощью Haml, Sass, Compass
Ускорение frontend-разработки с помощью Haml, Sass, CompassУскорение frontend-разработки с помощью Haml, Sass, Compass
Ускорение frontend-разработки с помощью Haml, Sass, Compass
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
 
04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилей04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилей
 
Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)
Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)
Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)
 
пользовательские свойства как основа архитектуры CSS
пользовательские свойства как основа архитектуры CSSпользовательские свойства как основа архитектуры CSS
пользовательские свойства как основа архитектуры CSS
 

LESS and even more. Anton Shubkin.