Блог веб разработки статьи | видеообзоры | исходный код

Блог веб разработки статьи | видеообзоры | исходный код

webfanat вконтакте webfanat youtube

Grid CSS

Grid  CSS

Всем привет и погнали. Допустим у нас есть следующий код:

<div class="container">
    <div>
        <p>Статье 1</p>
    </div>
    <div>
        <p>Статье 2</p>
    </div>
    <div>
        <p>Статье 3</p>
    </div>
    <div>
        <p>Статье 4</p>
    </div>
</div>

Здесь у нас в неком контейнере (container) расположены поочередно четыре элемента. Давайте их выделим с помощью свойства outline, чтобы удобнее было работать дальше.

.container div{
    outline:1px solid #f00;
    text-align:center;
}

И начнем работать со свойствами grid.

Первое что нам необходимо сделать это прописать свойству display нашего главного контейнера значение grid.

.container{
      display: grid;
 }

И дальше мы уже может работать с его свойствами. Допустим мы хотим выровнять все наши элементы в строку и задать им определенную ширину, причем каждому разную. Не вопрос.

.container{
     display: grid;
     grid-template-columns: 100px 200px 300px 400px;
 }

Здесь мы с помощью свойства grid-template-columns выровняли наши четыре элемента в строку и задали каждому из них свою ширину в порядке их очереди. Если мы хотим каждому элементу задать одинаковую ширину, то можем прописать так:

grid-template-columns: repeat(4, 300px);

тут в качестве значения мы воспользовались функцией repeat где указали количество элементов, в нашем случае это четыре, и их общую ширину.

Едем дальше. С помощью свойства grid-gap мы можем указывать отступы между элементами grid, к примеру.

.container{
     display: grid;
     grid-template-columns: repeat(4, 22%);
     grid-gap: 4%;
 }

Кто дружит с математикой я думаю меня поймет. То есть между элементами grid мы с помощью свойства grid-gap задали отступы равные в четыре процента от всей ширины контейнера.

При использовании свойств grid мы также можем пользоваться такой единицей измерения как fr, к примеру:

.container{
     display: grid;
     grid-template-columns: 1fr 1fr 1fr;
     grid-gap: 4%;
 }

здесь у нас все элементы с позиционируются в одну строку кроме последнего. То есть единица измерения fr растягивает элементы пропорционально на допустимую ширину.

.container{
     display: grid;
     grid-template-columns: 1fr 3fr 1fr 3fr;
     grid-gap: 4%;

 }

Все элементы расположены в одну строку причем четные элементы в три раза больше нечетных. Ну общую суть я думаю вы поняли.

Мы также пользуясь свойствами grid можем позиционировать наши элементы по вертикали:

.container{
     display: grid;
     grid-template-columns: 1fr 3fr 1fr 3fr;
     grid-gap: 4%;
     align-items: center;
     height:500px;
 }

В данном селекторе мы задали нашему контейнеру высоту 500px и выровняли в нем четыре элемента по центру высоты c помощью свойства align-items пришедшего от флексов(flex).

align-items: flex-start;//По вверху

align-items: center; //По центру

align-items: flex-end; //Понизу

Далее..

.container{
    display: grid;
    grid-template-columns: 1fr 1fr;
    grid-gap: 4%;
    grid-template-rows: 250px 250px;
}

Здесь мы создали две колонки с четыремя элементами одинаковой высоты 250px. С помощью свойства grid-template-rows мы можем задавать высоту для каждой новой строки элементов.

То есть если мы зададим свойству grid-template-rows значение:

grid-template-rows: 250px 100px;

То у нас элементы первой строки будут высотой 250px, а элементы второй строки 100px. Здесь в принципе ничего сложного нет.

Теперь рассмотрим создание так называемого негативного пространства, то есть пустого.

div:first-child{
        grid-column-start:3;
    }

здесь мы нашему первому дочернему элементу div задали свойство grid-column-start со значением 3.

В результате в каждой строке у нас будет по три элемента, причем на месте первых двух элементов у нас будет пустое пространство, потому что слева от первого элемента ничего нет.

Давайте рассмотрим еще на примере второго элемента:

div:nth-of-type(2){
        grid-column-start:3;
    }

В данном случае у нас в первой строке будут располагаться первый элемент слева, пространство посередине и второй элемент справа. Есть и обратное свойство grid-column-end.

В общем если что то непонятно, можете самостоятельно поиграться с данным свойством на всех элементах.

Напоследок рассмотрим одну из самых полезных фишек данной технологии. А именно написание адаптивных свойств которые будут учитывать разрешение экрана и перестраивать позиционирование элементов при его изменении.

.container{
        display: grid;
        grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
        grid-gap:10px;
    }

Теперь смотрим у радуемся как наши элементы при смене разрешения и сжатии перестраиваются. Это можно посмотреть просто увеличив разрешение с помощью горячей клавиши ctrl+ или через отладчик браузера. Только если смотрите через браузер не забудьте указать специальный мета тег медиа запросов: .

Как это работает? Здесь в свойстве grid-template-columns мы в качестве значения мы указали функцию repeat в качестве первого параметра мы ей передали специальное значение 'auto-fit' которое автоматически определает количество элементов в строке. Вторым аргументом мы пердаем функцию minmax в которой определены значения минимальной ширины и максимальной ширины элемента.

Сразу отмечу что помимо значения auto-fit данная конструкция может принимать auto-fill. Данное значение пытается поместить как можно больше элементов в строку, здесь также учитывается содержимое элементов. Если элемент не влезает в строку, то он автоматически переносится на следующую тем самым оставляя после себя пустое место.

Вот в принципе и все что я хотел вам рассказать. Я вам рассказал только самое основное, так как данная технология довольна обширна.

Так что все в ваших рукак.

На этом я с вами прощаюсь. Желаю успехов и удачи! Пока!

Оцените статью:

Статьи

Комментарии

Внимание!!! Комментарий теперь перед публикацией проходит модерацию

Все комментарии отправлены на модерацию

Реклама

Запись экрана

Данное расширение позволяет записывать экран и выводит видео в формате webm