- justify-content and align-content not working in CSS Grid
- 1 Answer 1
- Выравнивание блоков в CSS разметке Grid
- Две оси grid layout
- Выравнивание элементов на блоке или столбце по оси
- Элементы с внутренним соотношением сторон
- Justifying Items on the Inline or Row Axis
- Center an item in the area
- Aligning the grid tracks on the block, or column, axis
- Justifying the grid tracks on the row axis
- Alignment and auto margins
- Alignment and Writing Modes
- CSS свойство justify-items
- Определение и применение
- Поддержка браузерами
- Значения свойства
- Версия CSS
- Наследуется
- Анимируемое
- Пример использования
justify-content and align-content not working in CSS Grid
I have a grid with 3 rows, 1 column and item of the middle row is a grid itself of 2 columns and 4 rows.
Question1 — My issue is align-text and justify-text are not working for the embedded container. I want to center the items of the embedded container but they still appear on the start position. I have used the following rule to center the item (a para) but it doesnt work.
However, if I add display:flex , it works! why?
Question 2: The buttons I have added (P1,C1) do not move to center even with display:flex
Following is the complete code
1 Answer 1
Question 2: The buttons I have added (P1,C1) do not move to center even with display:flex
Notice that when you apply the centering rule.
on the p elements, the rule applies to the content of the p (i.e., the text). That’s what is actually being centered.
Similarly, when you apply the centering rule to the button element, it is also centering the content of the button (i.e., the text).
You are expecting it to center the button itself. If the rule doesn’t center the p it will not center the button siblings either.
If you want to center the button elements, try this:
As to the other problem, I am not seeing it. I get the same result for centering with display: flex and display: grid .
This post may be useful to you: Centering in CSS Grid
Источник
Выравнивание блоков в CSS разметке Grid
Если вы знакомы с flexbox, вы уже столкнулись с тем, как гибкие элементы могут быть правильно выровнены внутри контейнера flex. Эти свойства выравнивания, которые мы впервые встретили в спецификации flexbox, были перенесены в новую спецификацию под названием Box Alignment Level 3. Эта спецификация содержит подробную информацию о том, как выравнивание должно работать во всех различных методах компоновки.
Каждый метод макета, который реализует выравнивание ящиков, будет иметь некоторые отличия из-за того, что каждый метод имеет разные функции и ограничения (и унаследованное поведение), что делает невозможным выравнивание точно таким же образом по всем направлениям. Спецификация Box Alignment содержит подробную информацию для каждого метода, однако вы были бы разочарованы, если бы попытались выполнить выравнивание по многим методам прямо сейчас, поскольку поддержка браузера ещё не существует. Там, где у нас есть поддержка браузера для свойств выравнивания и распределения пространства из спецификации Box Alignment, в grid макета.
В этом руководстве представлены демонстрации того, как работает выравнивание ячеек в макете. Вы увидите много общего в том, как эти свойства и ценности работают в flexbox. Из-за того, что сетка двумерна и однобочечна, существует несколько небольших различий, за которыми вы должны следить. Поэтому мы начнём с рассмотрения двух осей, с которыми мы сталкиваемся при выравнивании объектов в сетке.
Две оси grid layout
При работе с раскладкой сетки у вас есть две оси для выравнивания объектов — оси блока или столбца, оси inline или строки. Ось блока — это ось, на которой блоки выложены в макете блока. Если у вас есть два абзаца на вашей странице, они отображаются один под другим, поэтому в этом направлении мы описываем ось блока. В спецификации CSS Grid Layout она называется осью столбца, так как это ось, по которой выполняются наши дорожки столбцов.
Внутренняя ось (inline axis) проходит по оси блока, это направление, в котором выполняется регулярный поток строк. В спецификации CSS Grid Layout его иногда называют осью строки, являющейся осью, по которой идут наши дорожки.
Мы можем выровнять содержимое внутри областей сетки и сетка отслеживает себя на этих двух осях.
Выравнивание элементов на блоке или столбце по оси
Элементы управления align-self и align-items на оси блока. Когда мы используем эти свойства, мы меняем выравнивание элемента в области сетки, которую вы поместили.
В следующем примере у меня есть четыре области сетки внутри моей сетки. Я могу использовать свойство align-items в контейнере сетки, чтобы выровнять элементы, используя одно из следующих значений:
- auto
- normal
- start
- end
- center
- stretch
- baseline
- first baseline
- last baseline
Имейте в виду, что после установки align-self: start высота каждого дочернего
Свойство align-items устанавливает свойство align-self для всех дочерних элементов сетки. Это означает, что вы можете установить свойство индивидуально, используя align-self по элементу сетки.
В следующем примере я использую свойство align-self , чтобы продемонстрировать различные значения выравнивания. В первой области отображается поведение по умолчанию для выравнивания, которое должно растягиваться. Второй элемент имеет значение самоограничения start , третий end и четвёртый center .
Элементы с внутренним соотношением сторон
Спецификация указывает, что поведение по умолчанию в align-self должно растягиваться, за исключением элементов, которые имеют внутреннее соотношение сторон, в этом случае они ведут себя как start . Причиной этого является то, что если элементы с соотношением сторон настроены на растяжение, это значение по умолчанию будет искажать их.
Это поведение было уточнено в спецификации, при этом браузеры ещё не реализовали правильное поведение. Пока это не произойдёт, вы можете убедиться, что элементы не растягиваются, например изображения, которые являются прямыми дочерними элементами сетки, путём установки align-self и justify-self (en-US) start . Это будет имитировать правильное поведение после его реализации.
Justifying Items on the Inline or Row Axis
Поскольку align-items и align-self обрабатывают выравнивание элементов на оси блока, justify-items и justify-self (en-US) выполнить ту же работу на оси inline или row. Значения, которые вы можете выбрать, такие же, как для align-self .
- auto
- normal
- start
- end
- center
- stretch
- baseline
- first baseline
- last baseline
Вы можете увидеть тот же пример, что и для align-items ниже. На этот раз мы применяем свойство justify-self (en-US) .
Опять же, значение по умолчанию stretch , за исключением элементов с внутренним соотношением сторон. Это означает, что по умолчанию элементы сетки будут покрывать их площадь сетки, если вы не измените её, установив выравнивание. Первый элемент в примере демонстрирует это выравнивание по умолчанию:
Как и align-self и align-items , вы можете применить justify-items к контейнеру сетки, чтобы установить значение justify-self (en-US) для всех элементов.
Свойства justify-self (en-US) и justify-items не реализованы в flexbox. Это связано с одномерным характером flexbox и может быть несколько элементов вдоль оси, что делает невозможным оправдание одного элемента. Чтобы выровнять элементы вдоль основной, встроенной оси в flexbox, вы используете свойство justify-content .
Center an item in the area
Объединив свойства align и justify, мы можем легко центрировать элемент внутри области сетки.
Aligning the grid tracks on the block, or column, axis
Если у вас есть ситуация, когда ваши дорожки сетки используют область, которая меньше, чем контейнер сетки, вы можете выровнять трассы сетки самостоятельно внутри контейнера. И снова это работает на блочной и встроенной осях с align-content выравниванием дорожек на оси блока и justify-content , выполняющим выравнивание по встроенной оси. Значения для align-content и justify-content :
- normal
- start
- end
- center
- stretch
- space-around
- space-between
- space-evenly
- baseline
- first baseline
- last baseline
В приведённом ниже примере у меня есть контейнер сетки размером 500 пикселей на 500 пикселей. Я определил 3 строки и столбцы, каждый из 100 пикселей с 10-пиксельным жёлобом. Это означает, что внутри контейнера сетки есть пространство как в блочном, так и в линейном направлениях.
Свойство align-content применяется к контейнеру сетки, поскольку оно работает на всей сетке. Поведение по умолчанию в макете сетки start , поэтому наши дорожки сетки находятся в верхнем левом углу сетки, выровнены по отношению к стартовым линиям сетки:
Если я добавлю align-conten в мой контейнер со значением end , все треки перейдут в конечную строку контейнера сетки в размерности блока:
Мы также можем использовать значения для этого свойства, которые могут быть знакомы с flexbox; значения пространственного распределения space-between , space-around и space-evenly . Если мы обновим align-content до space-between , вы увидите как выглядят элементы на нашем пространстве grid:
Стоит отметить, что использование этих значений пространственного распределения может привести к увеличению элементов в вашей сетке. Если элемент охватывает более одной дорожки сетки, так как дополнительное пространство добавляется между дорожками, этот предмет должен стать большим, чтобы поглотить пространство. Мы всегда работаем в строгой сетке. Поэтому, если вы решите использовать эти значения, убедитесь, что содержимое ваших треков может справиться с дополнительным пространством или что вы использовали свойства выравнивания для элементов, чтобы заставить их перемещаться в начало, а не растягиваться.
В приведённом ниже изображении я поместил сетку с align-content , со значением start рядом с сеткой, когда значение align-content имеет значение space-between . Вы можете видеть, как элементы 1 и 2, которые охватывают два ряда дорожек, взяты на дополнительной высоте, поскольку они получают дополнительное пространство, добавленное к промежутку между этими двумя дорожками:
Justifying the grid tracks on the row axis
На оси inline мы можем использовать justify-content для выполнения того же типа выравнивания, что мы использовали align-content для оси блока.
Используя тот же пример, я устанавливаю justify-content space-around . Это снова вызывает дорожки, которые охватывают более одного столбца, чтобы получить дополнительное пространство:
Alignment and auto margins
Другой способ выравнивания элементов внутри их области — использовать автоматические поля. Если вы когда-либо центрировали ваш макет в окне просмотра, установив правое и левое поле блока контейнера в auto , вы знаете, что автоматическая маржа поглощает все доступное пространство. Установив маржу в auto с обеих сторон, она выдвигает блок в середину, так как оба поля пытаются взять все пространство.
В следующем примере я дал элементу 1 левое поле auto . Вы можете увидеть, как содержимое теперь переместится в правую часть области, поскольку автоматическая маржа занимает оставшееся пространство после того, как было назначено место для содержимого этого элемента:
Вы можете видеть, как элемент выравнивается с помощью Firefox Grid Highlighter:
Alignment and Writing Modes
Во всех этих примерах я работал на английском языке, который является языком слева направо. Это означает, что наши стартовые линии находятся сверху и слева от нашей сетки, когда мы думаем в физических направлениях.
CSS Grid Layout и спецификация Box Alignment предназначены для работы с режимами записи в CSS. Это означает, что если вы работаете с языком справа налево, например на арабском языке, начало сетки будет верхним и правым, поэтому значение по умолчанию для justify-content: start будет состоять в том, что треки сетки начинаются с правой стороны сетки.
Однако, если вы устанавливаете автоматические поля, используя margin-right или margin-left , или абсолютно позиционирующий элемент, используя top , right , bottom and left смещения, вы не будете соблюдать режимы записи. В следующем руководстве мы рассмотрим это взаимодействие между компоновкой сетки CSS, выравниванием ящиков и режимами записи. Это будет важно понимать, если вы разрабатываете сайты, которые затем отображаются на нескольких языках, или если вы хотите смешивать языки или режимы записи в дизайне.
Источник
CSS свойство justify-items
Определение и применение
CSS свойство justify-items производит выравнивание всех элементов макета сетки по оси строки grid-контенера.
Для того, чтобы произвести выравнивание всех элементов макета сетки по оси столбца grid-контейнера, вы можете воспользоваться свойством align-items.
В настоящее время если элемент не является элементом сетки макета (не находится внутри родительского элемента, который является блочным, или строчным grid-контейнером), то свойство justify-items не окажет на такой элемент никакого эффекта.
Обращаю Ваше внимание на то, что если элемент не является grid-контейнеромом, то свойство justify-items не окажет на такой элемент никакого эффекта.
Схематичное отображение работы свойства justify-items для конкретного контейнера отображено на следующем изображении:
Поддержка браузерами
Свойство | Chrome | Firefox | Opera | Safari | IExplorer | Edge |
---|---|---|---|---|---|---|
justify-items | 54.0* | 52.0 | 44.0 | 10.3 | 10.0* -ms- | 16.0 12.0 -ms- |
Значения свойства
Значение | Описание |
---|---|
stretch | Элементы растягиваются по размеру строки ячейки контейнера. Если объединенный размер элементов меньше размера контейнера выравнивания, все элементы с автоматическим размером увеличиваются поровну (не пропорционально), при этом соблюдаются ограничения, налагаемые параметром max-height / max-width (или эквивалентной функциональностью), так что объединенный размер точно заполняет контейнер выравнивания. |
center | Элементы размещаются в середине каждой ячейки контейнера. |
start | Элементы размещаются по начальному краю ячеек. |
end | Элементы размещаются по конечному краю ячеек. |
baseline | Элементы распологаются по их базовой линии. |
initial | Устанавливает свойство в значение по умолчанию. |
inherit | Указывает, что значение наследуется от родительского элемента. |
Версия CSS
Наследуется
Анимируемое
Пример использования
В следующем примере мы рассмотрим использование свойства align-content для grid-контейнеров:
В этом примере мы разместили пять строчных grid-контейнеров шириной 30% от родительского элемента внутри которых мы разместили по шесть элементов
С помощью свойства grid для всех строчных grid-контейнеров мы указываем значение auto , которое определяет, что размер строк определяется размером контейнера и размером содержимого элементов в строке. Через косую черту с помощью функциональной нотации repeat() мы размещаем в макете сетки по три столбца в каждом контейнера, используя допустимое значение длины в «гибких» единицах измерения fr. В этом случае каждый столбец занимает часть оставшегося пространства в контейнере сетки макета пропорционально заданному коэффициенту.
С помощью свойства justify-items для каждого строчного grid-контейнера определяем как происходит выравнивание всего макета сетки по оси столбца:
- Для первого grid-контейнера мы установили значение stretch — элементы растягиваются по размеру строки ячейки контейнера.
- Для второго grid-контейнера мы установили значение start — элементы размещаются по начальному краю ячеек.
- Для третьего grid-контейнера мы установили значение end — элементы размещаются по конечному краю ячеек.
- Для четвертого grid-контейнера мы установили значение center — элементы размещаются в середине каждой ячейки контейнера.
- Для пятого grid-контейнера мы установили значение baseline — элементы распологаются по их базовой линии.
Пример использования свойства justify-items. CSS свойства
Источник