Что такое STRAP?
STRAP — это крутой базовый шаблон на Compass с крайне полезными фичами. Это больше, чем ещё один CSS-фреймворк (наверное, потому что это вообще не CSS-фреймворк). STRAP — это самый лучший способ упорядочить и ускорить вёрстку.
STRAP — это крутой базовый шаблон на Compass с крайне полезными фичами. Это больше, чем ещё один CSS-фреймворк (наверное, потому что это вообще не CSS-фреймворк). STRAP — это самый лучший способ упорядочить и ускорить вёрстку.
Ну, к примеру, такие фичи, как вложенные сетки с вертикальным выравниванием, как модульная структура и темизация, как крайне полезные примеси и функции, как удобная реализация спрайтов (обычный Compass излишне усложняет этот процесс или не даёт достаточной гибкости) и возможно ещё что-то. Ну это так, в общих чертах.
Нормальные браузеры, нормальные мобильные браузеры, IE8+
В папке проекта выполните команду:
grunt serve
чтобы запустить локальный сервер для разработкиgrunt serve:test
чтобы сделать то же самое, но и отслеживать тестыgrunt
или grunt build
чтобы собрать проект в папку dist
.
UpperCamelCase
(что очень хорошо, если вы используете другой формат);именуются-через-дефис
;именуется_через_подчёркивание
.ALL_UPPER_CASE
;именуются-через-дефис
;_подчёркивание
;//
Всё более-менее очевидно, поэтому я остановлюсь на самом неочевидном: папке sass
. Файлы этой папки должны отвечать за конечные, генерируемые CSS-файлы.
Внутри каждого из них происходит сборка STRAP со всякими модулями: примесями, функциями, дополнительными классами, темами.
Практически всё содержимое /sass/strap/
, за исключением /sass/strap/strap-lib/
является пользовательским расширением существующих в STRAP примесей, функций, конфигов и т.п.
-
для разделения названия имён файлов и папок;/images/sprites/
должны иметь префикс подчёркивания _
для корректной генерации;/sass/strap/
должны иметь префикс подчеркивания _
, чтобы не быть скомпилированными в качестве отдельных файлов;__
не содержат в своём корне CSS (например, файлы с примесями, функциями, конфигами);/sass/strap/strap-lib
— любое поведение можно переопределить в пользовательских файлах.
// Инициализация
@import "strap/__init";
// Вы можете подключить все ui-компоненты одной строкой
@import "strap/_imports";
// ...или выборочно
@import "strap/strap-lib/misc/_normalize";
@import "strap/strap-lib/ui/_grid";
@import "strap/strap-lib/ui/_typography";
@import "strap/strap-lib/ui/_icons";
// Можете подключить всю тему целиком
@import "strap/themes/strap-ui/_init";
// Или частично
@import "strap/themes/strap-ui/ui/icons/_entypo";
/sass/strap/strap-lib/ui/_grid.scss
.Container
— класс, с помощью которого происходит выравнивание контента по центру страницы. Рекомендуется к использованию в качестве обёртки (см. исходный код данной страницы).
12 колонок, шириной 60px с отступами в 20px по-умолчанию, что даёт суммарную сетку в 960px.
Изменить дефолтные значения можно в конфиге /sass/strap/__config.scss
В нашем распоряжении находится 12 колонок, и мы можем разделить их так, как захотим. Главное, чтобы части были целыми.
1. В первую очередь нам понадобится блок .Row
(сплошная строка).
<div class="Row"></div>
2. Теперь было бы неплохо разделить её на несколько частей (8 и 4, к примеру).
<div class="Row">
<div class="Col-8"></div>
<div class="Col-4"></div>
</div>
3. И наконец, добавим блок .Content
внутрь каждой колонки, чтобы было понятно, где находится контент (опционально).
<div class="Row">
<div class="Col-8">
<div class="Content">
8 колонок
</div>
</div>
<div class="Col-4">
<div class="Content">
4 колонки
</div>
</div>
</div>
Никакой дополнительной магии не требуется. Просто поместите ещё один блок .Row
внутрь колонки.
<div class="Col-6">
<div class="Content">
<div class="Row">
<div class="Col-2">
<div class="Content">
Col-2
</div>
</div>
<div class="Col-3">
<div class="Content">
Col-3
</div>
</div>
<div class="Col-1">
<div class="Content">
Col-1
</div>
</div>
</div>
</div>
</div>
Все вертикальные отступы, все размеры всех элементов по-умолчанию так или иначе кратны высоте строки, что делает страницу ещё более гармоничной*.
* — На самом деле, всё не совсем так: сделать полноценный вертикальный ритм, без ручной подгонки, не представляется возможным. Однако, даже предлагаемый вертикальный ритм всегда выглядит лучше его отсутствия.
<div class="Col-4 Top">
<div class="Content">
Этот блок должен быть<br/>
где-то вверху.
</div>
</div>
<div class="Col-4 Middle">
<div class="Content">
Этот блок — посередине.
</div>
</div>
<div class="Col-4 Bottom">
<div class="Content">
А этот — прижат к самому низу.
</div>
</div>
Поведение по-умолчанию: при достижении определённого значения размера экрана, колонки превращаются в список, «падая» друг под другом и расширяясь на 100%.
Для упрощения вёрстки блоков для разных размеров экранов существуют несколько простых и удобных классов, дополняющих строку .Row
:
.Row.NoBreak
— не даёт колонкам падать вообще. Очень удобно, когда нужно разбить строку пополам в мобильной версии сайта.
.Row.Phone.Break
— колонки падают только на телефонных разрешениях.
.Row.Phone.Landscape.Break
— колонки начинают падать с телефонных разрешений в альбомной ориентации.
Данный пример так же иллюстрирует возможности вложенных колонок в адаптивной вёрстке.
.Row.Tablet.Break
— колонки начинают падать с планшетных разрешений экрана.
.Row.Tablet.Landscape.Break
— колонки начинают падать с планшетных разрешений в альбомной ориентации.
Те же самые классы работают для скрытия элементов, в зависимости от разрешения экрана. Только вместо .Break
используется .Hide
.
/sass/strap/strap-lib/ui/_typography.scss
Чтобы убрать отступы — достаточно добавить соответствующий класс к заголовку:
.NoTopMargin
.NoBottomMargin
.NoMargin
Так выглядит обычный параграф.
А это <small>По-умолчанию, в STRAP встроены иконки Entypo. Ну как встроены — их классы нужно подключать, чтобы работать с ними:
// Инициализация
@import "strap/init";
...
// Подключение классов для иконок Entypo
@import "strap/ui/icons/entypo";
...
Этот вариант почти правильный. Почти, потому что внутри /sass/strap/ui/icons/_entypo.scss
мы можем увидеть строчку // @required ui/icons
.
Такая строчка означает, что перед тем, как подключить данный файл, нужно убедиться, что так же подключён strap/ui/_icons.scss
.
// Инициализация
@import "strap/init";
...
// Правильное подключение классов для иконок Entypo
@import "strap/ui/icons";
@import "strap/ui/icons/entypo";
...
<i class="Icon Entypo {EntypoIconClass}"></i>
, где {EntypoIconClass}
— это класс иконки из представленных ниже:
Plus
Minus
Info
LeftThin
UpThin
RightThin
DownThin
LevelUp
LevelDown
Switch
Infinity
PlusSquared
MinusSquared
Home
Keyboard
Erase
Pause
FastForward
FastBackward
ToEnd
ToStart
Hourglass
Stop
UpDir
Play
RightDir
DownDir
LeftDir
Adjust
Cloud
Star
StarEmpty
Cup
Menu
Moon
HeartEmpty
Heart
Note
NoteBeamed
Layout
Flag
Tools
Cog
Attention
Flash
Record
CloudThunder
Tape
Flight
Mail
Pencil
Feather
Check
Cancel
CancelCircled
CancelSquared
Help
Quote
PlusCircled
MinusCircled
Right
Direction
Forward
Ccw
Cw
Left
Up
Down
ListAdd
List
LeftBold
RightBold
UpBold
DownBold
UserAdd
HelpCircled
InfoCircled
Eye
Tag
UploadCloud
Reply
ReplyAll
Code
Export
Print
Retweet
Comment
Chat
Vcard
Address
Location
Map
Compass
Trash
Doc
DocTextInv
Docs
DocLandscape
Archive
Rss
Share
Basket
Shareable
Login
Logout
Volume
ResizeFull
ResizeSmall
Popup
Publish
Window
ArrowCombo
ChartPie
Language
Air
Database
Drive
Bucket
Thermometer
DownCircled
LeftCircled
RightCircled
UpCircled
DownOpen
LeftOpen
RightOpen
UpOpen
DownOpenMini
LeftOpenMini
RightOpenMini
UpOpenMini
DownOpenBig
LeftOpenBig
RightOpenBig
UpOpenBig
Progress0
Progress1
Progress2
Progress3
BackInTime
Network
Inbox
Install
Lifebuoy
Mouse
Dot
Dot2
Dot3
Suitcase
FlowCascade
FlowBranch
FlowTree
FlowLine
FlowParallel
Brush
PaperPlane
Magnet
Gauge
TrafficCone
Cc
CcBy
CcNc
CcNcEu
CcNcJp
CcSa
CcNd
CcPd
CcZero
CcShare
CcRemix
Github
GithubCircled
Flickr
FlickrCircled
Vimeo
VimeoCircled
Twitter
TwitterCircled
Facebook
FacebookCircled
FacebookSquared
Gplus
GplusCircled
Pinterest
PinterestCircled
Tumblr
TumblrCircled
Linkedin
LinkedinCircled
Dribbble
DribbbleCircled
Stumbleupon
StumbleuponCircled
Lastfm
LastfmCircled
Rdio
RdioCircled
Spotify
SpotifyCircled
Qq
Instagram
Dropbox
Evernote
Flattr
Skype
SkypeCircled
Renren
SinaWeibo
Paypal
Picasa
Soundcloud
Mixi
Behance
GoogleCircles
Vkontakte
Smashing
DbShape
Sweden
LogoDb
Picture
Globe
Leaf
GraduationCap
Mic
Palette
Ticket
Video
Target
Trophy
ThumbsUp
ThumbsDown
Bag
User
Users
Lamp
Alert
Water
Droplet
CreditCard
Monitor
Briefcase
Floppy
Cd
Folder
DocText
Calendar
ChartLine
ChartBar
Clipboard
Attach
Bookmarks
Book
BookOpen
Phone
Megaphone
Upload
Download
Box
Newspaper
Mobile
Signal
Camera
Shuffle
Loop
ArrowsCcw
LightDown
LightUp
Mute
Sound
Battery
Search
Key
Lock
LockOpen
Bell
Bookmark
Link
Back
Flashlight
ChartArea
Clock
Rocket
Block
/sass/strap/strap-lib/__functions.scss
line([lines: 1, font-size: px])
Возвращает количество пикселей, соответствующее высоте lines
линий для установленного размера шрифта font-size
.
Функция необходима для поддержания вертикального ритма. Используется для задания вертикальных отступов и высоты строки.
Постарайтесь не использовать любые другие вертикальные отступы. Аргумент lines
должен быть кратен 0.25
/* 1 */
margin-bottom: line(1);
/* 2 */
margin-bottom: line(1, 20px);
/* 1 */
margin-bottom: 20px;
/* 2 */
margin-bottom: 31px;
gutter([number: 1])
Возвращает указанное количество горизонтальных отступов, определяемых константой $GUTTER_WIDTH
. Постарайтесь не использовать любые другие горизонтальные отступы.
Аргумент number
должен быть кратен 0.25
/sass/strap/strap-lib/__mixins.scss
@include font-size (font-size[, lines])
Устанавливает размер шрифта в rem
(с обратной совместимостью) и соответствующую ему высоту строки, чтобы попадать в вертикальный ритм.
Всегда устанавливайте размер шрифта с помощью этой примеси.
/* 1 */
@include font-size(20px);
/* 2 */
@include font-size(20px, 2);
/* 1 */
font-size: 20px;
font-size: 1.42857rem;
line-height: 31px;
/* 2 */
font-size: 20px;
font-size: 1.42857rem;
line-height: 56px;
@include load-font(name, file-name-without-extension[, weight[, style]])
Подключает файлы шрифтов из папки /css/fonts/
. Шрифты одного начертания должны обладать единым именем file-name-without-extension
и быть представлены в четырёх форматах: eot, svg, ttf, woff.
Насыщенность font-weight
и стиль font-style
задаются через аргументы weight
и style
.
@include heading(top-lines, bottom-lines, font-size)
Устанавливает отступы в базовых линиях: сверху top-lines
и снизу bottom-lines
, а так же размер шрифта font-size
для заголовка.
Необходим для соблюдения заголовками вертикального ритма.
@include all-headers { styles; }
Позволяет задавать стили для h1, h2, h3, h4, h5, h6 сразу.
@include breakpoint(start[, end]) { styles; }
Создаёт контрольные точки разрешений экрана для адаптивной вёрстки, начиная с которых срабатывают заданные styles
.
Если указан второй аргумент, правила срабатывают в диапазоне разрешений от start
включительно до end
не включительно.
Значением аргументов могут быть px или фиксированные значения ( phone | phone landscape | tablet | tablet landscape | content ), переопределяемые в /sass/strap/__config.scss
.
@include breakpoint(phone landscape, tablet) {
.Content {
background: #c00;
}
}
@media only screen and (min-width: 480px) and (max-width: 959px) {
.Content {
background: #c00;
}
}
@include sprite-dir(dir-name[, sprites-dir])
Создаёт спрайт из png изображений папки _dir-name (без префикса)
, находящейся в sprites-dir
(по-умолчанию, в /images/sprites/
). Используется со sprite-file
.
@include sprite-element(file-name)
Возвращает изображение, смещение и размер спрайта file-name
, который находится в папке _dir-name
, установленной последним вызовом sprite-dir (dir-name)
.
.Icon {
// Создаёт спрайт из всех .png внутри /images/themes/strap-docs/sprites/_browsers/
// /images/themes/strap-docs/sprites/browsers-sprite.png
@include sprite-dir("browsers", "themes/strap-docs/sprites");
&.IE {
// Указывает на файл /images/themes/strap-docs/sprites/_browsers/ie.png
@include sprite-element("ie");
}
}
.Icon.IE {
background: url(../images/themes/strap-docs/sprites/browsers-sprite.png) no-repeat;
background-position: 0 -84px;
height: 79px;
width: 84px;
}