Краш-тест вёрстки
Студенты делают страницу «чётко по макету». Ровно с теми же текстами, картинками и формами, что в дизайне. Это правильно. Есть дизайн, надо сверстать. Но по неопытности они часто не задумываются, что это всё-таки сайт, а не картинка. И что нужно сверстать так, чтобы можно было поменять текст. Или порядок полей в форме. Или добавить новые поля. Или удалить старые. Или даже собрать новую страницу из существующих блоков. И надо, чтобы сайт не развалился. В продвинутом курсе этому посвящён отдельный раздел. Я разберу типичные ошибки новичков.
Фиксированная высота
Студенты часто попадаются на кнопках. Например, на таких:
![Хорошая кнопка](/blog/2016/06/19/crash-test-viorstki/button-height.png)
Хорошая кнопка
Задают кнопке высоту 50px, верхний паддинг 10px. Кнопка выглядит отлично. Что будет, если написать на кнопке «Купить за 1000 рублей»? Текст вылезет из кнопки:
![Текст выпал из кнопки, потому что её высота зафиксирована](/blog/2016/06/19/crash-test-viorstki/buttons-height-overflow_cover.png)
Текст выпал из кнопки, потому что её высота зафиксирована
Как надо? Надо паддингами:
![Длинный текст растягивает кнопку](/blog/2016/06/19/crash-test-viorstki/button-height-good.png)
Длинный текст растягивает кнопку
Есть паддинги сверху и снизу — контент сам растягивает кнопку. Бывает, что нужно задать высоту какому-нибудь блоку с фоновой картинкой и текстом внутри:
![Заголовок на фоне фотографии](/blog/2016/06/19/crash-test-viorstki/photo-header-height.png)
Заголовок на фоне фотографии
Тут скорее странно использовать padding-bottom: 150px
. Три строчки же отлично поместятся, не нужно для них растягивать блок. А вот пять уже не влезут, нужно растянуть. Что делать? Использовать min-height
вместе с паддингами. Тогда и блок не схлопнется, когда текста мало, и не будет слишком больших отступов, когда текста много.
Где можно использовать фиксированную высоту? Там, где нет текста. Например, в декоративных блоках.
Выравнивание по центру
У нас всё та же кнопка:
![Хорошая кнопка](/blog/2016/06/19/crash-test-viorstki/button-height.png)
Маркетологи провели исследование и решили, что «заказать онлайн» больше привлекает пользователей, чем купить. Так и написали:
![Тексту тесно](/blog/2016/06/19/crash-test-viorstki/button-center.png)
Тексту тесно
Текст упёрся в края. Если бы были паддинги по бокам, всё было бы хорошо:
![С паддингами не тесно](/blog/2016/06/19/crash-test-viorstki/button-center-good.png)
С паддингами не тесно
Не все паддинги
Вот симпатичная текстария:
![](/blog/2016/06/19/crash-test-viorstki/textarea.png)
Но я пишу в ней текст, и вот он упёрся в правый и нижний края:
![](/blog/2016/06/19/crash-test-viorstki/textarea-bad.png)
Потому что паддинг есть только сверху и слева:
![](/blog/2016/06/19/crash-test-viorstki/textarea-padding.png)
Что делать? Конечно, добавить паддинги со всех сторон. Чтобы не забывать паддинги для всех сторон, пользуйтесь короткой записью в одно свойство padding
, а не полные свойства padding-left
, padding-top
. Для кнопок, полей и большинства элементов вам подойдёт запись в два числа, по вертикали и по горизонтали:
padding: 10px 20px;
Если отступ снизу отличается от отступа сверху, используйте запись в три числа (сверху, по бокам, снизу):
padding: 10px 20px 15px;
Ну и в тех редчайших случаях, когда отступ слева отличается от отступа справа, используйте четыре числа:
padding: 10px 20px 15px 40px;
Паддинги описываются по часовой стрелке, начиная с верхнего:
![](/blog/2016/06/19/crash-test-viorstki/padding-order.png)
Если значения для стороны нет, значение берётся с противоположной стороны. Когда это понимаешь, порядок сторон и что значат два или три паддинга уже не забудешь. У бордеров и марджинов порядок такой же.
Проставляйте все паддинги одним свойством.Выпадающие элементы
Этот блок хорошо смотрится в своём окружении за счёт отступов соседей:
![](/blog/2016/06/19/crash-test-viorstki/overflow-bad.png)
Но если перед ним встанет какой-нибудь другой блок, то всё:
![](/blog/2016/06/19/crash-test-viorstki/overflow-collaps.png)
Старайтесь делать так, чтобы из блока ничего не выпадало. Ни сверху, ни снизу, ни справа, ни слева:
![](/blog/2016/06/19/crash-test-viorstki/overflow-outline.png)
Тогда ваша вёрстка будет гораздо более предсказуемой.
Из блоков ничего не должно выпадать.Флоаты
Флоаты придумали для вставки картинок и врезок в текст, чтобы текст их обтекал:
![](/blog/2016/06/19/crash-test-viorstki/float-img.png)
Потом флоаты стали использовать для раскладки страницы, компоновки блоков и вообще чего угодно. Например, для вёрстки такого контрола:
![](/blog/2016/06/19/crash-test-viorstki/float.png)
Здесь чекбокс прифлоачен и имеет правый отступ. Вот что будет, если добавить больше текста:
![](/blog/2016/06/19/crash-test-viorstki/float-bad-1.png)
Строки ниже чекбокса подвигаются влево, потому что обтекают чекбокс:
![](/blog/2016/06/19/crash-test-viorstki/float-show.png)
Если блок с текстом сделать блочным и задать ему overflow: hidden
, то он займёт свободное в строке место, и не будет позволять своему контенту вылезать влево:
![](/blog/2016/06/19/crash-test-viorstki/float-good.png)
На этом же принципе основаны раскладки на флоатах. Но в 2016-м году такие штуки и на флексах делать можно.
Уберите лишнее обтекание.Абсолютное позиционирование
Абсолютно позиционировать декоративные блоки — это нормально. Вот, например, абсолютно спозиционированный псевдоэлемент (новинка):
![](/blog/2016/06/19/crash-test-viorstki/absolute.png)
А вот что будет, если текст будет подлиннее:
![](/blog/2016/06/19/crash-test-viorstki/absolute-bad.png)
Последнее слово уже не влезло. Чтобы такого не было, зарезервируйте место под абсолютным элементом. Например, с помощью паддинга:
![](/blog/2016/06/19/crash-test-viorstki/absolute-good.png)
Как сверстать и не облажаться
Откройте вашу вёрстку. Откройте веб-инспектор. Возьмите какой-нибудь блок. И добавьте в него побольше текста. Ещё больше. Что будет, если добавить четыре строки? Шесть? Длинное слово без пробелов?
Найдите любой список однотипных элементов. Например, меню или поля формы. Выберите один из элементов и нажмите Ctrl+C
. Он скопируется. Выберите блок, в котором эти элементы лежат, и нажмите Ctrl+V
. Он вставится. И ещё раз пять вставьте. Разъехалось? Сделайте, чтобы не разъезжалось.
Протестируйте всю страницу блок за блоком. И поправьте всё, что развалилось. Ну а как вы хотели?