Властивість зазору в CSS є скороченим словом row-gap
і column-gap
, що визначає розмір жолобів, тобто простір між рядками та стовпцями в макетах сітки, гнучкості та багатостовпців.
/* Grid layout */ .container ( display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: 1fr 2fr 1fr; gap: 30px 20px; ) /* Flex layout */ .container ( display: flex; gap: 10%; ) /* Multi-column layout */ .container ( column-count: 5; gap: 20px; )
Використовуйте повзунок у демонстраційній версії нижче, щоб побачити gap
властивість у дії:
Синтаксис
gap
приймає одне або два значення:
- Одне значення встановлює як одне, так
row-gap
іcolumn-gap
одне значення. - Коли використовуються два значення, перше встановлює,
row-gap
а друге -column-gap
.
.container ( gap: 1rem; /* Is equivalent to: * row-gap: 1rem; * column-gap: 1rem */ gap: 10px 15%; /* Is equivalent to: * row-gap: 10px; * column-gap: 15%; */ )
Специфікація для модуля розмітки сітки CSS визначала простір між доріжками сітки, використовуючи grid-gap
властивість. gap
призначений для його заміни, щоб прогалини можна було визначити в декількох методах розмітки CSS, таких як flexbox, але grid-gap
все ще потрібно використовувати в тих випадках, коли браузер, можливо, реалізував, grid-gap
але ще не почав підтримувати новішу gap
властивість.
Цінності
gap
приймає такі значення:
normal
: (За замовчуванням) Браузер вкаже використовуване значення 1em для макета з декількома стовпцями та 0px для всіх інших контекстів макета (тобто grid та flex).: Будь-яка дійсна і неотрицательная довжина CSS, такі як
px
,em
,rem
і%
, серед інших.: Розмір зазору як невід’ємне відсоткове значення щодо розмірності елемента. (Детальніше див. Нижче).
initial
: Застосовує значення властивості за замовчуванням, яке єnormal
.inherit
: Приймає значення розриву для батьків.unset
: Видаляє струмgap
з елемента.
Відсотки властивостей щілини
Коли розмір контейнера в розмірі зазору визначений, визначає gap
відсотки до розміру вікна вмісту контейнера в будь-яких типах макета.
Іншими словами, коли браузер знає розмір контейнера, він може обчислити відсоткове значення gap
. Наприклад, коли висота контейнера становить 100 пікселів, а значення gap
- 10%, браузер знає, що 10% 100 пікселів - це 10 пікселів.
Але коли браузер не знає розмір, він запитає: "10% від чого?" У цих випадках gap
поводиться по-різному залежно від типу макета.
У макеті сітки відсотки вирішуються проти нуля для визначення власних внесків розміру, але вирішуються проти вікна вмісту елемента при викладанні вмісту вікна, це означає, що між елементами буде пробіл, але пробіл не впливає на розмір контейнера.
У цій демонстрації висота контейнера не визначена. Подивіться, що відбувається при збільшенні gap
розміру. Потім встановіть gap
піксельні одиниці та повторіть спробу:
У гнучкому макеті відсотки у всіх випадках вирішуються проти нуля, а це означає, що прогалини не застосовуватимуться, коли розмір контейнера не відомий браузеру:
Використання функції calc () із зазором
Ви можете використовувати calc()
функцію, щоб вказати розмір, gap
але на момент написання цієї статті його не підтримується в Safari та iOS.
.flex-layout ( display: flex; gap: calc(5vh + 5px) calc(5vw + 5px); )
.grid-layout ( display: grid; grid-template-columns: repeat(3, 1fr); gap: calc(5vmin + 5px); )
Приклади
gap
Властивість призначене для використання в мережевих, флекс і кілька колонок макетів. Давайте перевіримо кілька прикладів.
Розмітка сітки
У наступній демонстрації ви можете бачити, gap
як використовується для вказівки властивостей row-gap
та column-gap
властивостей контейнера сітки, визначаючи жолоби між рядками сітки та стовпцями сітки відповідно:
Розмітка гнучка
Застосування зазору до головної осі гнучкого контейнера вказує інтервал між гнучкими елементами в одному рядку гнучкого макета.
Ось column-gap
використовується в напрямку рядка:
Ось row-gap
використовується в напрямку стовпця:
Застосування gap
до поперечної осі гнучкого контейнера вказує інтервал між гнучкими лініями гнучкого макета.
Ось row-gap
в рядку:
Ось column-gap
у напрямку стовпця:
Макет із кількома стовпцями
column-gap
з'являється в макетах із декількох стовпців, щоб створити пробіли між полями стовпців, але зауважте, що row-gap
це не робить ефекту, оскільки ми працюємо лише в стовпцях. gap
все ще може використовуватися в цьому контексті, але застосовуватиметься лише те column-gap
.
Як ви можете бачити в наступній демонстрації, хоча gap
властивість має значення 2rem, воно розділяє елементи лише горизонтально, а не в обох напрямках, оскільки ми працюємо в стовпцях:
Тим більше ти знаєш ...
Є кілька речей, на які варто звернути увагу щодо роботи з gap
власністю.
Це хороший спосіб запобігти небажаним інтервалам
Ви коли-небудь використовували поля для створення інтервалу між елементами? Якщо ми не будемо обережні, ми можемо отримати додатковий інтервал до і після групи елементів.
Вирішення, яке зазвичай вимагає додавання від’ємних полів або вдавання до псевдоселекторів для видалення поля з певних елементів. Але приємна річ у використанні gap
в більш сучасних методах макетування полягає в тому, що у вас є простор між елементами. Додатковий обрив на початку та в кінці ніколи не є проблемою!
Але, ей, якщо ви хочете, щоб у вас було місце навколо предметів під час використання gap
, розмістіть padding
навколо контейнера так:
.container ( display: flex; gap: 1rem; padding: 1rem; )
Розмір жолоба не завжди дорівнює величині зазору
gap
Властивість не єдине , що може поставити простір між елементами. Поля, прокладки, justify-content
а align-content
також можуть збільшити розмір жолоба та вплинути на фактичне gap
значення.
У наступному прикладі ми встановлюємо 1em, gap
але, як бачите, між елементами є набагато більше місця, спричиненого використанням розподілених вирівнювань, таких як justify-content
і align-content
:
Підтримка браузера
Запити до функцій, як правило, є приємним способом перевірити, чи підтримує браузер певну властивість, але в цьому випадку, якщо ви перевірите gap
властивість у flexbox, ви можете отримати хибно позитивний результат, оскільки запит функції не розрізнятиме режими макетування. Іншими словами, це може підтримуватися в гнучкому макеті, що призводить до позитивного результату, але насправді не підтримується, якщо він використовується в макеті сітки.
Розмітка сітки
IE | Край | Firefox | Chrome | Сафарі | Опера |
---|---|---|---|---|---|
Ні | 16+ | 61+ | 66+ | 12+ | 53+ |
iOS Safari | Opera Mobile | Браузер Android | Chrome для Android | Firefox для Android |
---|---|---|---|---|
12+ | Ні | 81+ | 84+ | 68+ |
Розмітка сітки зі значеннями calc ()
IE | Край | Firefox | Chrome | Сафарі | Опера |
---|---|---|---|---|---|
Ні | 84+ | 79+ | 84+ | Ні | 69+ |
iOS Safari | Opera Mobile | Браузер Android | Chrome для Android | Firefox для Android |
---|---|---|---|---|
Ні | Ні | 81+ | 84+ | 68+ |
Розмітка сітки із процентним значенням
IE | Край | Firefox | Chrome | Сафарі | Опера |
---|---|---|---|---|---|
Ні | 84+ | 79+ | 84+ | Ні | 69+ |
iOS Safari | Opera Mobile | Браузер Android | Chrome для Android | Firefox для Android |
---|---|---|---|---|
Ні | Ні | 81+ | 84+ | 68+ |
Розмітка гнучка
Специфікація для використання gap
з flexbox наразі знаходиться у статусі Working Draft.
Дані про підтримку веб-переглядача подані компанією Caniuse, яка містить більше деталей. Цифра вказує на те, що браузер підтримує цю функцію на цій версії та вище.
Робочий стіл
Chrome | Firefox | IE | Край | Сафарі |
---|---|---|---|---|
84 | 63 | Ні | 84 | ТП |
Мобільний / планшетний
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
88 | 85 | Ні | Ні |
Макет із кількома стовпцями
IE | Край | Firefox | Chrome | Сафарі | Опера |
---|---|---|---|---|---|
Ні | 84+ | 79+ | 84+ | Ні | 69+ |
iOS Safari | Opera Mobile | Браузер Android | Chrome для Android | Firefox для Android |
---|---|---|---|---|
Ні | Ні | 81+ | 84+ | 68+ |
Більше інформації
- Модуль вирівнювання коробки CSS рівень 3
- Хром приземляється на розрив у Flexbox (квиток # 761904)
- Статус функції WebKit CSS
Пов’язані
- Розмітка сітки
- Макет Flexbox
- Макет у кілька стовпців