При изучении Susy одним из вопросов, который всегда стоял передо мной, заключался в следующем: “Как удалить
или
1 paddingу первого и последнего столбца
1 marginв разметке Susy без применения CSS-свойств
1 columnи
1 first-child”.
1 last-child?
Этот вопрос является один из самых главных для всех, кто только начинает изучение Susy. Если посмотреть в корень данного вопроса, то его основную суть можно свести к следующему (если судить по многочисленным постам в Интернет): необходимо использовать значение
вместо значения 1
inside
. Для того, чтобы точно ответить на этот вопрос, необходимо хорошо понимать, каким образом положение отступов 1
after
в целом оказывает влияние на всю разметку, созданную в Susy.1
gutter
Как мне кажется, вопрос о расположении отступов
в разметке Susy является самой важной настройкой, поскольку он оказывает влияние на весь код в целом. Если у вас перед прочтением статьи существовал такой вопрос, то данная статья именно для вас.1
gutter
Что такое - расположение отступов gutter
Расположение отступа
позволяет полностью менять всю разметку страницы, созданную в Susy. Данный параметр определяет, где должны находиться отступы 1
gutter
относительно столбцов 1
gutter
. Также данная настройка определяет, будут ли отступы 1
columns
являться CSS-свойством 1
gutter
или 1
padding
.1
margin
Эта параметр находиться среди глобальных настроек переменной
. Как вариант, данный параметр можно использовать локально, внутри миксина 1
$susy
. Давайте начнем с рассмотрения случая, когда расположение отступа 1
span
управляется из глобальной переменной 1
gutter
.1
$susy
По умолчанию, расположение отступов в Susy определено ключевым словом
. Помимо этого, существуют еще варианты: 1
after
, 1
before
, 1
split
и 1
inside
. Ниже представлен полный вариант синтаксиса параметра 1
inside-static
в глобальной переменной 1
gutter-position
:1
$susy
Ключевые слова в круглых скобках являются возможными вариантами значения параметра
.1
gutter-position
Для ясности понимания тонкостей разметки в Susy при использовании параметра
необходимо создать простую структуру:1
gutter-position
Gutter-position: after
Значением по умолчанию для параметра
является ключевое слово 1
gutter-position
. Данное значение заставляет Susy располагать отступы gutters после каждого столбца разметки. В этом режиме необходимо удалить отступ у последнего столбца в разметке. В этом случае отступы gutters являются CSS-свойством margin и размещаются в разметке следующим образом:1
after
При использовании значения по умолчанию для параметра
миксин 1
gutter-position
создает три CSS-правила - 1
span
, 1
width
и 1
margin-right
:1
float: left
Результирующий CSS-код:
В этом коде свойство
- это отступ 1
margin-right
, созданный Susy в данной разметке.1
gutter
Можно использовать ключевое слово
для удаления крайнего 1
last
у столбца:1
margin
В результате получим результат в виде
:1
margin-right: 0
В рассматриваемой нами разметке область контента занимает 3 столбца из 4. При этом область боковой панели размещается в одном столбце из 4-х. Кроме того, боковая панель является последним элементом разметки, поэтому код для подобного случая будет таким:
Краткое заключение: значение
параметра
1 afterявляется наиболее интуитивно понятным случаем создания разметки в Susy. При использовании значения по умолчанию единственный момент, о котором следует помнить - это убрать отступ у последнего столбца разметки с помощью ключевого слова
1 gutter-position.
1 last
Gutter-position: before
Значение
является одним из вариантов предыдущего значения - 1
before
. Суть этого значения также простая. Вместо размещения отступов gutter после столбцов (как в случае с 1
after
), при значении 1
after
отступы gutters размещаются перед столбцами. В этом случае необходимо удалить отступ у первого столбца в разметке. Отступы gutter также являются в данном случае CSS-свойством 1
before
:1
margin
При использовании значения
для параметра 1
before
миксин 1
gutter-position
генерирует три CSS-правила: 1
span
, 1
width
и 1
margin-left
с помощью кода:1
float: left
Результирующий CSS-код будет выглядеть таким образом:
Так как значение
является прямой противоположностью значения 1
before
, то его очень легко понять, если до этого вы хорошо разобрались с 1
after
. Вместо использования ключевого слова 1
after
для удаления отступа у последнего столбца разметки, в данном случае нужно использовать ключевое слово 1
last
для удаления отступа у первого столбца разметки:1
first
В результате получим точно такую же разметку, что и в предыдущем случае.
Краткое заключение: при использовании значения
разметка получается точно такой же, как и в предыдущем случае. Единственное отличие заключается в применении ключевого слова
1 beforeдля первого столбца разметки.
1 first
Gutter-position: split
Значение
параметра 1
split
кардинально отличается от двух предыдущих значений 1
gutter-position
и 1
before
. Если установлено значение 1
after
, то ширина отступа 1
split
делиться пополам (надвое) и обе половинки отступа располагаются по обеим сторонам одного столбца. В этом режиме отступы 1
gutter
генерируются в CSS-коде в виде CSS-свойства 1
gutters
. В этом случае нет необходимости удалять отступы для крайних столбцов разметки:1
margin
Если, как в нашем случае, имеются только два блока (с классом
и 1
.content
), то создание такой разметки выполняется просто. Для этого достаточно воспользоваться функцией 1
.sidebar
, как обычно:1
span
Однако, ситуация становиться не такой ясной, если блок
или блок 1
.content
будут содержать внутри себя блоки-потомки.1
.sidebar
Давайте добавим два блока
с классом 1
div
и классом 1
.child-one
внутрь блока 1
.child-two
для того, чтобы проиллюстрировать эту ситуацию:1
.content
Для обоих вновь созданных блока применим тот же подход, что и ранее. Блок с классом
будет иметь ширину 2-х столбцов из 3-х; блок с классом 1
.child-one
будет иметь ширину 1-го столбца из 3-х.1
.child-two
Обратите внимание на тот факт, что границы обоих блоков
и 1
.child-one
не совпадают с границами фоновой сетки!1
.child-two
Это происходит потому, что при задании для параметра
значения 1
gutter-position
нужно учитывать взаимосвязь между блоками-родителями и блоками-потомками. В данном конкретном случае блоком-родителем является 1
split
, а блоками-потомками являются 1
.content
и 1
.child-one
.1
.child-two
Для создания правильной разметки в данном случае необходимо добавить для блока-родителя ключевое слово
для того, чтобы показать, что этот блок как раз и является блоком-родителем:1
nest
Теперь посмотрите, как точно оба блока .child-one
.child-two` вписались в границы сетки, “нарисованной” фоновым изображением!1
и
На первый взгляд, ситуация является немного запутанной. Для того, чтобы не путаться, нужно всегда помнить, что в случае необходимости вписать блоки-потомки точно в границы сетки, нужно использовать ключевое слово для их блока-родителя.
Если “копнуть” поглубже и проанализировать сгенерированный CSS-код, то можно заметить, что для блоков
и 1
.child-one
он совершенно различный:1
.child-two
Блок-родитель имеет плавание влево
и ширину, которая указана в процентах; при этом ширина отступов 1
float: left
этого блока не учитывается (75% равно 3/4).1
gutters
Блоки-потомки имеют все те же свойства, что и блок-родитель. Но при этом отступы gutters имеют место быть для этих блоков.
Краткое заключение: значение
кардинально отличается от двух рассмотренных ранее значений
1 splitи
1 before. При использовании значения
1 afterнеобходимо добавлять ключевое слово
1 splitк блоку-родителю и использовать миксин
1 nestдля всех блоков-потомков.
1 span
Gutter-position: inside/inside-static
Оба значения
и 1
inside
очень похожи на предыдущее значение 1
inside-static
. Отступы gutters также делятся пополам (надвое) и обе половинки располагаются по обеим сторонам каждого столбца. Однако, в этом случае в CSS-выводе отступы являются свойством 1
split
, а не 1
padding
. Также в этом случае нет необходимости удалять отступы у крайних столбцов в разметке:1
margin
Отступы
в случае 1
gutters
имеют тот же принцип, что и при значении 1
gutter-position: inside
. Если для блока-родителя не будет указано ключевое слово 1
split
, то блоки-потомки выйдут за границы разметки.1
nest
Если просто добавить ключевое слово
для блока-родителя 1
nest
, то в результате получим следующее:1
.content
Значение
работает точно также, как и значение 1
inside-static
. Единственное исключение заключается в том, что отступы gutters получаются в фиксированных единицах измерения, а не в процентах. Кроме этого, в глобальной переменной 1
inside
необходимо задать параметр 1
$susy
с указанием ширины столбца 1
column-width
.1
column
Краткое заключение: значение
работает точно также, как и значение
1 inside. При использовании значения
1 splitнеобходимо добавлять ключевое слово
1 insideк блоку-родителю и использовать миксин
1 nestдля всех блоков-потомков.
1 span
Значение
и 1
inside
имеют одинаковый сгенерированный CSS-код, поэтому можно с легкостью менять между собой эти значения в глобальной переменной 1
split
для параметра 1
$susy
.1
gutter-position
Заключение
Различные типы разметки в Susy создаются с помощью выбора расположения отступов
. Различное местоположение отступов 1
gutters
в каждом случае имеет свои тонкости и требует понимания процесса, если вы хотите эффективно их использовать.1
gutters
Существует два основных способа создания разметки при содействии отступов
:1
gutters
-
значения
и1
before
имеют создают отступы1
after
с одной стороны каждого столбца1
gutters
; для крайнего столбца необходимо удалить отступ1
column
с помощью ключевого слова1
gutter
или1
first
.1
last
-
значения
,1
inside
,1
inside-static
разделяют каждый отступ1
split
на две равные половины, которые располагаются по обе стороны каждого столбца1
gutter
. Такие отступы не нуждаются в удалении.1
column
Эта статья является небольшой выдержкой из книги Learning Susy, а точнее - из главы 8, посвященной позиционированию отступов
в разметке Susy. В книге вопрос позиционирования рассмотрен подробнее на основе более сложного примера. Если материал, поданный в статье, вам понравился, то книга понравиться еще больше.1
gutter
Примечание переводчика: данный пост является переводом статьи Understanding Gutter Positions in Susy, созданным мною с любезного разрешения ее автора Zell Liew.