Justify Grid — новое слово в разметке

в 16:47, , рубрики: css, html, layout, Веб-разработка, метки: , ,

Justify Grid — новое слово в разметке
Доброго времени суток уважаемые читатели. На сегодняшний день создание разметки для страницы грубо говоря не автоматизировано. Разметку мы выполняем с помощью float или inline-block (подробнее). Поэтому я хочу поделиться с вами замечательной идей — Justify Grid Framefork.

Проблема

Если говорить о верстке на float, то мы сталкиваемся с проблемой центрирования элемента и нам приходиться скурпулезно указывать все значения ширины и отступов. Эту проблему безусловно решают существующие Grid фреймворки (к примеру 960.gs). Но получается симантически не верная разметка и разработчикам постоянно приходиться использовать .clearfix. Плюс ко всему проблемы могут возникнуть из за дробных пикселей. Если говорить об inline-block, то неудобства появляются из за того, что элементы с этим значением выравниваются по базовой линии, а не по верхнему краю. А если на странице несколько inline-block'ов, каждый из которых расположен с новой строки, то между ними будут некоторые промежутки. Любой пробел повлияет на Ваш layout. Решение есть — CSS Grid Layout или Flexible Box Layout, но эти решения не поддерживаются на большинстве браузеров.

Justify Grid

Приведу небольшой пример:

<div class="main">
  <h1>Image Gallery</h1>
  <div class="image"></div>
  <div class="image"></div>
  <div class="image"></div>
</div>
.main {
  text-align: justify;
  font-size: 0;
}
.main:after {
  content: '';
  display: inline-block;
  width: 100%;
}
h1, .image {
  text-align: left;
  font-size: medium;
}
.image {
  vertical-align: top;
  display: inline-block;
  width: 30.3571%;
}

Все работает благодаря псевдо-элементу :after: Именно он делает отступы между элементами. Я понимаю как он работает, но я не понимаю почему он так работает. :after появляется после элемента… Очень хотелось бы увидеть подробности в комментариях.. Ширина блоков и отступы определяются в CSS с помощью следующей формулы:
Justify Grid — новое слово в разметке

А формула эта высчитывается с помощью одного прекрасного SASS файлика:

$columns: 12 !default;
$column-width: 4em !default;
$gutter-width: 2.5em !default;

%grid {
  text-align: justify !important;
  text-justify: distribute-all-lines;
  font-size: 0 !important;

  & > * {
    text-align: left;
    font-size: medium;
  }

  &:after {
    content: '';
    display: inline-block;
    width: 100%;
  }
}

%grid-cell {
  vertical-align: top;
  display: inline-block;
  width: 100%;
}

@function grid-span($cols, $total: $columns) {
  @return ($column-width * $cols  + $gutter-width * ($cols  - 1)) /
          ($column-width * $total + $gutter-width * ($total - 1)) * 100%;
}

Justify Grid — кроссбраузерный. Плюс фреймворк позволяет еще передвигать и добавлять элементы с помощью классов .push .pull .append .prepend. А на сайте проекта имеется и генератор нужного CSS из заданных параметров.

Страничка проекта — http://justifygrid.com/
GitHub

Спасибо всем за внимание

Автор: ilusha_sergeevich

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js