- Тема: Почему не работает CSS свойство order в гридах?
- Почему не работает CSS свойство order в гридах?
- Css grid order не работает
- grid-template-columns не работает
- 3 ответа
- Что может поломать макет на гридах (CSS Grid Layout)
- №1: Элементы с overflow-x поломают грид
- №2: Контролы формы поломают грид
- Что ещё, чёрт возьми, за «Замещаемые элементы»?
- Можно ли назвать это багами гридов? Не совсем.
- P.S. Это тоже может быть интересно:
Тема: Почему не работает CSS свойство order в гридах?
Опции темы
Добрый день уважаемые профессионалы и гости форума!
Я изучаю HTML и CSS и у меня возникла проблема со свойством order в гриде.
Суть проблемы такова:
я создаю grid в блоке навигации на моей странице в которой находятся: изображение, и три навигационных ссылки (завернуты в список),
я через свойство order с индексом 1 хочу переместить в самый низ картинку (ибо остальные элементы должны иметь по умолчанию индекс 0 согласно спецификации) ,
чтобы она была самой последней в сетке, но у меня это не получается.
Для примера здесь я приведу упрощенный вариант кода нежели в учебном проекте, но поведение, что в учебном проекте, что в упрощенном, который предоставлю здесь одинаковое (у автора учебного ролика все получается, а у меня с точно таким же кодом ничего не получается) .
Помогите пожалуйста понять, что не так я делаю, может я что то упускаю из виду.
Перечитал все в справочниках по этому свойству, вроде делаю все так же как в справочниках и примерах, но ничего не выходит.
Запускал в разных браузерах, результат одинаковый.
Ниже прикрепил скриншот со стрелкой которая указывает на то куда я хочу переместить изображение.
Заранее благодарю за помощь! Прошу сильно не ругаться если я пишу какие либо глупости, просто я совсем новичек
Код css и html блок один в один как в учебном проекте просто с абстрактным контентом для упрощения.
Источник
Почему не работает CSS свойство order в гридах?
Добрый день уважаемые профессионалы и гости форума!
Я изучаю HTML и CSS и у меня возникла проблема со свойством order в гриде.
Суть проблемы такова:
я создаю grid в блоке навигации на моей странице в которой находятся: изображение, и три навигационных ссылки (завернуты в список),
я через свойство order с индексом 1 хочу переместить в самый низ картинку (ибо остальные элементы должны иметь по умолчанию индекс 0 согласно спецификации) ,
чтобы она была самой последней в сетке, но у меня это не получается.
Для примера здесь я приведу упрощенный вариант кода нежели в учебном проекте, но поведение, что в учебном проекте, что в упрощенном, который предоставлю здесь одинаковое (у автора учебного ролика все получается, а у меня с точно таким же кодом ничего не получается) .
Помогите пожалуйста понять, что не так я делаю, может я что то упускаю из виду.
Перечитал все в справочниках по этому свойству, вроде делаю все так же как в справочниках и примерах, но ничего не выходит.
Запускал в разных браузерах, результат одинаковый.
Ниже прикрепил скриншот со стрелкой которая указывает на то куда я хочу переместить изображение.
Заранее благодарю за помощь! Прошу сильно не ругаться если я пишу какие либо глупости, просто я совсем новичек
Код css и html блок один в один как в учебном проекте просто с абстрактным контентом для упрощения.
Источник
Css grid order не работает
Добрый день уважаемые профессионалы и гости форума!
Я изучаю HTML и CSS и у меня возникла проблема со свойством order в гриде.
Суть проблемы такова:
я создаю grid в блоке навигации на моей странице в которой находятся: изображение, и три навигационных ссылки (завернуты в список),
я через свойство order с индексом 1 хочу переместить в самый низ картинку (ибо остальные элементы должны иметь по умолчанию индекс 0 согласно спецификации) ,
чтобы она была самой последней в сетке, но у меня это не получается.
Для примера здесь я приведу упрощенный вариант кода нежели в учебном проекте, но поведение, что в учебном проекте, что в упрощенном, который предоставлю здесь одинаковое (у автора учебного ролика все получается, а у меня с точно таким же кодом ничего не получается) .
Помогите пожалуйста понять, что не так я делаю, может я что то упускаю из виду.
Перечитал все в справочниках по этому свойству, вроде делаю все так же как в справочниках и примерах, но ничего не выходит.
Запускал в разных браузерах, результат одинаковый.
Ниже прикрепил скриншот со стрелкой которая указывает на то куда я хочу переместить изображение.
Заранее благодарю за помощь! Прошу сильно не ругаться если я пишу какие либо глупости, просто я совсем новичек
Код css и html блок один в один как в учебном проекте просто с абстрактным контентом для упрощения.
Источник
grid-template-columns не работает
У меня есть один блок, display: grid .
Согласно идее, первый элемент должен быть растянут на 2 столбца и 2 строки, остальные занимают одну ячейку каждый.
Но свойство grid-template-columns не работает для меня, какое бы значение я ни указывал, содержимое не перемещается.
Теперь первый элемент попал только в первую ячейку, вышел за границы, но не растянулся на два столбца и два ряда.
Где моя проблема?
3 ответа
Вы использовали свойства grid-template-columns и grid-template-rows для дочернего элемента сетки. Эти свойства используются с display: grid в контейнере.
Для прямых дочерних элементов сетки используйте grid-column и строка сетки.
Проблема в том, что вы применяете <
Вместо этого используйте grid-column и grid-row свойства, которые применяются к элементам сетки.
Контейнер, в котором вы определяете строки и столбцы, пишутся так grid-template- : 30% 70% (variety of different ways you can define) затем в фактической ячейке вы определяете, в какой строке и столбце она находится в grid-row: 1/3 и grid-column: 2/3
Посмотрите мой JSBIN пример. (Если бы ваше первое изображение было шире, оно уместилось бы на весь ряд . )
Источник
Что может поломать макет на гридах (CSS Grid Layout)
Два способа поломать CSS-гриды, и как их починить
Как фронтенд-разработчика, меня ничто так не раздражает, как неожиданное появление горизонтального скроллбара на сайте. Однако, выстраивая раскладку страницы заказа с помощью CSS-гридов, я на удивление обнаружил что-то мистическое, что поломало мой контейнер. Я полагал, что с размерами у гридов всё решается автоматически.
В итоге я нашёл два способа поломать CSS-гриды. Как это бывает, я умудрился в одной раскладке сделать и то, и другое.
№1: Элементы с overflow-x поломают грид
Для нашего магазина использовался паттерн подменю, которое могло бы прокручиваться с помощью overflow-x , чтобы показать больше вариантов оплаты. Даже с примененным overflow-x грид-элемент растягивался до scrollWidth подменю. Оказывается, любой элемент с overflow-x , будь то блок или адаптивная таблица, поломали бы грид. Вот наглядный пример.
Обычно с решением проблемы горизонтального переполнения справляется overflow-x: auto . Но не в этот раз. Ещё идея — обернуть элемент, попробовав всякие трюки с overflow: hidden , чтобы заставить раскладку подчиняться. Тоже нет.
Дело в том, что по умолчанию у грид-элементов стоит min-width: auto и их размер автоматически устанавливается по контенту в них. Оно устанавливает их min-width по ширине переполняющего блока. Поэтому для исправления глубоко вложенного переполняющего дочернего элемента вы, вопреки интуиции, не обращаете внимания на родительский элемент, а идете вверх по DOM-дереву до самого грид-элемента и обнуляете ему min-width .
Благодаря этому размеры грид-элемента с переполнением контента установятся правильно. Но не всегда.
№2: Контролы формы поломают грид
В нашей раскладке тоже использовался грид для размещения полей формы бок о бок. Я создал тестовый пример на CodePen с различными типами полей, чтобы изолировать эту проблему. При уменьшении окна браузера до момента появления горизонтального скролла (
380px) можно видеть, как поля выходят за границы грид-полосы.
В итоге, чтобы пофиксить подобные поля, придётся применить max-width: 100% , и хотя это в основном исправляет такое поведение в Chrome и Safari, некоторые элементы в этих браузерах и все подобные элементы в Firefox и Edge по-прежнему вываливаются за грид-полосу.
Потому что элементы и им подобные ( ,
, , ) обладают потенциальной способностью быть чем-то, называемым «Замещаемыми элементами»
Что ещё, чёрт возьми, за «Замещаемые элементы»?
Согласно MDN, замещаемый элемент — элемент, представление которого выходит за рамки CSS. Это ситуация, когда браузер получает разметку и внедряет элемент с чем-то вроде Shadow DOM. — подходящий пример, но большинство контролов формы также попадают под это описание.
Замещаемые элементы существуют на какой-то спецификационной ничейной территории. Правила их оформления и отображения четко не определены, только лишь то, что у них «часто есть внутренние размеры». Поэтому каждый браузер по своему трактует внешний вид по умолчанию определённых элементов и использование замещаемых элементов в целом. На скриншоте ниже видно, как в зависимости от браузера выглядят замещаемые элементы и их размеры.
В нашей ситуации у некоторых элементов input есть фантомные «внутренние размеры», применяемые браузером. Они не отображаются в качестве браузерного стиля, ни во вкладке «Стили», ни в «Вычисленные стили», но их min-width около
180px для стандартного .
Чтобы кроссбраузерно пофиксить «вываливание» элементов за границы грид-полосы, придётся переопределить этот внутренний размер замещаемых элементов.
Здесь есть побочный эффект, когда прогрессбар, и поля range и number теперь всегда занимают 100% грид-полосы. Это можно переопределить и настроить.
Можно ли назвать это багами гридов? Не совсем.
Такое поведение, как указал некто на StackOverflow, соответствует спецификации. Гриды перенимают поведение флексбоксов относительно min-width: auto , а у замещаемых элементов их min-width зависит от внутренних размеров. Так что само по себе это не баг.
Тем не менее, почти для каждой из моих раскладок мне приходилось применять вспомогательный класс к капризным грид-элементам. Чтобы у него было запоминающееся фирменное название, я назвал его «Fit Grid» (по-русски можно передать как «Влит-в-грид» — прим. перев.).
Гриды для тяжелых раскладок не должны задумываться, что в них за контент, и должны выдерживать самые разные сценарии. Было бы неплохо внедрить это в каждый проект, чтобы сделать грид-элементы максимально устойчивыми. Пусть это и не баг, но я отношу это к территории «Clearfix 2.0».
Как по мне, так замещаемые элементы всегда должны подчиняться и вмещаться в грид-полосы. Я был бы рад, если бы браузеры сошлись на этом. Единственный вопрос, который крутится в моей голове, это должны ли контролы формы, такие как прогрессбар, ползунок и числовые занимать всю грид-полосу. Решение — input , select < width: 100% >, но нутром чую, что не все этого захотят.
Если у вас есть улучшения, дайте мне знать, и я опубликую их на GitHub, но, пожалуйста, перед требованием исправить что-то, всё же проверяйте это в каждом браузере. Спасибо, d00dz.
Спасибо Грегу Уитворту из Microsoft Edge за помощь в отладке и лучшем понимании замещаемых элементов.
P.S. Это тоже может быть интересно:
Если вам понравилась статья, поделитесь ей!
Источник