Выравнивание по центру в CSS
Сегодня хочется рассмотреть очень важную тему — выравнивание элементов по горизонтали и вертикали.
Изучим текущее положение дел.
Итак, мы видим, что у нас есть блочный элемент, растягивающийся по ширине на всю страницу, а внутри дочерний строковый span. У обоих элементов по-умолчанию position: static, значит они находятся в потоке.
Выравнивание по горизонтали
С выравниванием по горизонтали проблем обычно нет. В данном случае дочерний элемент строковый, значит мы можем выровнять все текстовое содержимое дива с помощью text-align: center. В том случае, если бы он был строчно-блоковый, можно было бы воспользоваться тем же методом.
А что если бы наш дочерний элемент был бы блочным с заданной шириной? Видим, что на блочное содержимое text-align не действует:
Если мы не зададим ширину, то текст отцентрируется, но лишь потому что элемент займет всю ширину, а нам обычно нужно центрирование самого блока.
В данном случае мы можем прибегнуть к margin: auto. Браузер автоматический определит отступы нашего дочернего элемента со всех сторон. Но посмотрите по вертикали элемент не отцентрировался. Потому что margin-top и margin-bottom приводятся автоматом к 0.
Выравнивание по вертикали
Что же нам делать с вертикальным выравниванием?
Рассматриваем известные. Мы знаем высоту родительского элемента, к тому же дочерний элемент — одна строка. Значит можем задать ей высоту:
line-height: 200px;
Ровно столько сколько высота родительского элемента. Так как текст в span встает по центру строки, мы его так отцентрируем.
Аналогично line-height сработает и для строчного дочернего элемента.
Однако, для нескольких строк такой вариант не сработает.
Для наглядности покрасим наш родительский элемент. И можно вспомнить про position: absolute.
Для начала нужно позиционировать родительский элемент, чтобы отсчитывать отступы дочернего относительно него. Ставим в div position: relative.
Далее позиционируем дочерний абсолютно, задаем отступ сверху 50%. Однако, в данном случае по центру у нас будет вершина дочернего элемента. Ставим margint-top равный половине высоты дочернего элемента. В случае с одной строкой эта высота равна line-height.
Отлично, все работает. Разве что перестал работать margin: auto для выравнивания по горизонтали, так как при абсолютном позиционировании margin рассчитывается только если задано расстояние элемента от родительского позиционированного для данной стороны. Т.е. для того, чтобы работал margin: auto для левой и правой стороны, нам нужно задать left и right.
А теперь давайте забудет про абсолютное позиционирование. И попробуем другие способы. Например, мы может воспользоваться свойством display: table. Правда, как у любой таблицы, ширина родительского элемента теперь рассчитывается по содержимому. Зато нам не требуется знание высоты дочернего элемента, как в случаей с абсолютным позиционированием.
Кстати, если дочерний элемент инлайновый и известна высота родителя, то мы можем использовать vertical-align: middle.
И наконец, в том случае если мы хотим отцентрировать строчно-блочный элемент и нам не известна ни высота родителя, ни высота дочернего элемента, то можно воспользоваться дополнительным элементом.
Почему это работает? Сначала следует сказать,что строчно-блочные элементы выстраиваются в линию, которая заключена в так называемую box-line. Высота коробки зависит от высоты содержимого. Внутри коробки есть базовая линия, на которой располагается строковое содержимое инлайн элемента. Положение этой линии может меняться в зависимости от значения vertical-align любого инлайн элемента, входящего в box-line.
Мы хотим выровнять относительно родительского элемента, значит нужно назначить дочернему его высоту. Мы не можем нашему дочернему поставить такую высоту, ведь он нам нужен не на весь родительский. Тогда мы используем дополнительный элемент. Он невидим, если мы, проставим для него только высоту. Но он меняет положение базовой линии для всей строки. Поэтому аналогично выравнится и исходный элемент.
Еще, конечно, можно воспользоваться flex: justify-content устанавливает выравнивание по горизонтали, а align-items по вертикали. Но обратите внимание на поддержку браузерами.
Полезные статьи
Vertical-Align: All You Need To Know
A Complete Guide to Flexbox
Выравнивание контента по центру блока со скролом
Горизонтальное и вертикальное выравнивание внутри родительского блока со скролом
- Post author:Admin
- Запись опубликована:18.11.2020
- Post category:CSS / Flexbox / SCSS
Не так давно я столкнулся с проблемой выравнивания контента по центру блока со скролом, пришлось потратить некоторое время на поиски решения этой проблемы.
Горизонтальное центрирование контента по центру блока.
Для примера реализуем блок с горизонтальным скролом. Внутри которого будет блок типа flexbox. А внутри него будет некоторое количество элементов.
<div> <div> <div>Element</div> <div>Element</div> <div>Element</div> <div>Element</div> <div>Element</div> <div>Element</div> </div> </div>
.scroll { width: 400px; height: 60px; overflow-x: scroll; border: 1px solid #d1d1d1; } .flex-container { display: flex; justify-content: center; } .flex-item { padding: 6px 10px; border: 1px solid #d1d1d1; }
Если посмотреть на результат то на первый взгляд может показаться что все в порядке.
Но если проинспектировать код то можно заметить что ширина flex контейнера равна ширине родительского блока со скролом.
Теперь предположим что нам нужно отцентрировать элементы внутри flex контейнера.
Если элементов будет несколько то все будет нормально отображаться.
Но если элементов будет больше и появится горизонтальный скрол то можно заметить что отображение сломалось.
Положение скрола находится в начальном положении но первый элемент виден не полностью.
Эта проблема решается добавлением min-width: max-content;
в .flex-container
О свойствах min-width можно почитать здесь. Стоит заметить что IE не поддерживает max-content
.
.flex-container { display: flex; justify-content: center; min-width: max-content; }
В примере ниже можно посмотреть проблему и ее решение.
Вертикальное выравнивание контента по центру блока.
Теперь давайте разберем пример с вертикальным выравниванием по центру блока со скролом.
Предположим у нас есть блок со скролом внутри которого нам нужно отцентрировать flexbox блок с элементами
<div> <div> <div>Element</div> <div>Element</div> <div>Element</div> <div>Element</div> <div>Element</div> <div>Element</div> <div>Element</div> <div>Element</div> <div>Element</div> <div>Element</div> </div> </div>
.scroll { display: flex; width: 400px; height: 100px; border: 1px solid #d1d1d1; overflow-y: scroll; } .flex-container { display: flex; flex-direction: column; align-items: center; justify-content: center; width: 100%; } .flex-item { margin: 0 0 10px; }
Результат такой же как и в предыдущем примере.
Но в инспекторе Google Chrome можно увидеть что высота flexbox контейнера равна родительскому блоку.
И если немного проскролить то можно увидеть что контент не обтекает содержимое. Но пока не включено вертикальное выравнивание контент отображается нормально.
Теперь включим выравнивание контента по центру. Если элементов мало то все отображается нормально.
А если при выравнивании flexbox контейнера в нем будет много элементов, которые занимают больше пространства и мы проинспектируем элемент то можно увидеть что первые элементы уходят за пределы видимости родительского контейнера.
Теперь давайте добавим flexbox контейнеру margin: auto;
и посмотрим на результат.
Готово, теперь контейнер растянулся по содержимому.
В примере ниже можно наглядно посмотреть решение проблемы.
Про выравнивание margin’ами можно почитать здесь.
Спасибо за внимание, надеюсь эта статья была полезной.
Post Views: 623
Метки: CSS, Flexbox
CSS Абсолютное положение центра
«Абсолютное положение центра означает центрирование любого текста, любого изображения, любого блока или любой группы объектов по вертикали и горизонтали. В CSS мы можем использовать свойство абсолютной позиции для центрирования объектов и группы объектов. Мы также можем использовать абсолютное положение для центрирования объекта только в вертикальном или горизонтальном направлении, а также в вертикальном и горизонтальном направлениях. В этом уроке мы продемонстрируем примеры, чтобы объяснить, как использовать свойство абсолютной позиции в CSS для центрирования объектов по вертикали, горизонтали и тому и другому. Мы рассмотрим эту концепцию в этом уроке».
Все эти примеры мы будем делать в коде Visual Studio. Мы должны создать файл HTML в коде нашей визуальной студии и начать писать на нем код. После выполнения кода, приведенного на изображении, вы должны сохранить этот файл с расширением «.html», так как это файл «HTML».
Упомяните тип документа «html», так как мы знаем, что это код HTML. Затем откройте «» и «
». Мета определена ниже: «charset = UTF-8», что позволяет получить доступ к различным символам. Мы также связываем этот текущий файл с файлом CSS, в котором мы применяем некоторые стили и используем свойство абсолютной позиции. Для описания ассоциации здесь используется «rel»; тип — «text/css» и «href», в котором мы передаем имя файла. Мы связываем «centerStyle.css» с этим текущим файлом. Теперь, после закрытия «», мы собираемся использовать «». У нас есть заголовок в теле и класс «div» с именем «элемент». Наконец, мы должны последовательно закрыть все теги. Сначала закройте теги «div», «body», а затем «html». Код CSSВот файл CSS. Когда вы создаете этот файл, вы используете расширение «.css», так как это наш файл CSS. Следует помнить, что вы сохранили этот файл с тем же именем, которое вы упомянули в своем HTML-файле. Теперь мы собираемся стилизовать этот класс элементов, используя различные свойства. Место «.» и напишите «элемент», так как это имя класса «div». Мы настраиваем «высоту» и «ширину» на «100 пикселей» и «200 пикселей» соответственно. Поместите «оранжевый» в качестве цвета фона. И белый для цвета шрифта. Теперь воспользуемся свойством «абсолютная позиция». Установите «положение» как «абсолютное». «Слева» это «0», а «справа» установлено как «0». Здесь верхнее и нижнее поля равны «0» и левому; правые поля — «авто». Это левое и правое автоматические поля используются, поэтому для определения ширины объекта используется автоматическое поле.
Вывод отображается в браузере. Нажмите «ALT + B» в файле HTML, чтобы отобразить вывод. Мы также вставляем вывод приведенного выше кода HTML и CSS ниже.
Вывод
Пример № 2: Абсолютное положение по центру по вертикалиВ этом примере мы используем тот же файл HTML, который мы создали в предыдущем примере. Просто измените заголовок с «абсолютное положение по центру по горизонтали» на «абсолютное положение по центру по вертикали».
Здесь мы устанавливаем цвет фона на «фиолетовый». Когда нам нужно установить абсолютную позицию по вертикали по центру, мы устанавливаем позицию «абсолютно» и здесь упоминаем «верх: 0» и «низ: 0». Мы также устанавливаем поля для этого «авто» для «сверху» и «снизу». Значение «0» устанавливается для «левого» и «правого». Вы также можете проверить вывод этого примера, который мы вставили ниже.
Вывод
В этом выводе прямоугольник размещается вертикально по центру с использованием свойства абсолютного положения. На этом изображении пространство между текстом и полем показывает, что оно расположено в центре в вертикальном положении.
Пример #3: Абсолютное положение центра как по горизонтали, так и по вертикалиВ нашем третьем примере мы установим объект в абсолютно центральном положении. Здесь объект центрируется по вертикали, а также по горизонтали. Давайте попробуем этот третий пример.
Здесь с самого начала код такой же, как мы обсуждали в нашем предыдущем примере. Мы просто немного изменили код тега «
». Мы создаем класс «div», используя «контейнер» в качестве имени класса. Прежде чем закрыть этот тег «div», мы создаем еще один «класс div», и на этот раз с именем «данные». Создайте заголовок, используя тег «», а также напишите абзац внутри тегов «
». Затем используйте закрывающие теги для обоих тегов «В коде CSS сначала откройте скобки для абзаца, который написан внутри класса контейнера. «Высота» этого контейнера — «60 пикселей», а «ширина» — тоже «60 пикселей». Мы применяем отступ здесь как «10px», поэтому между содержимым и границей будет создано пространство «10px». Здесь положение текста является «относительным». Мы хотим нарисовать границу вокруг контейнера или коробки, поэтому мы используем для этого свойство «border». Мы устанавливаем ширину «границы» как «3px», тип границы — «сплошная», а цвет этой границы — «зеленый». Итак, когда мы отобразим это в браузере, граница будет зеленого цвета, сплошная, а также шириной «3 пикселя». Мы используем «розовый» в качестве цвета фона. И выберите «черный» для шрифта. Таким образом, шрифт или текст будут отображаться в «черном» цвете. Теперь здесь мы используем свойство «абсолютное положение центра», и оно установит объект и направление в центр экрана.
Вывод
Пример № 4Здесь мы вставляем код HTML ниже для этого примера. Мы используем приведенный выше код и вносим в него небольшие изменения. Мы просто удаляем класс данных абзаца и div в этом примере и создаем другой файл CSS для этого примера.
Код CSS«Высота» контейнера в этом примере равна «70 пикселей», а «ширина» — «300 пикселей». Используйте «положение» как «абсолютное». Теперь мы рисуем границу, в которой мы устанавливаем ее «ширину» равной «4px», граница будет отображаться «сплошная», так как тип этой границы выбран как «сплошная». Цвет «черный». Затем установите цвет внутреннего фона на «белый». Цвет текста, который мы используем здесь, — «черный». Теперь мы размещаем свойство абсолютной позиции. Наше верхнее поле составляет «50%», а также то же самое для «левого» поля. Он устанавливает объект «50%» сверху, а также слева. Мы собираемся использовать последнее свойство, и это свойство «преобразования». Он трансформирует объект назад, на половину его ширины, а также высоты. Он будет действовать относительно тела объекта. Он перевернет объект «50%» на половину его ширины и «50%» на половину его высоты.
Вывод
Заключение
В этом уроке мы рассмотрели концепцию центра абсолютного положения в CSS. Мы объяснили, как центрировать объект по вертикали и горизонтали в отдельных примерах, а затем предоставили два других примера, в которых мы центрировали объект по вертикали и по горизонтали одновременно. В этом уроке мы обсудили четыре примера. Мы выполнили все примеры, а также вставили выходные скриншоты. Вы легко изучите этот центр абсолютного положения в CSS после тщательного изучения этого урока, и я надеюсь, что он будет очень полезен для вас, когда вы попробуете его самостоятельно.
Как центрировать кнопку в CSS
следующий → ← предыдущая CSS в основном используется для придания наилучшего стиля веб-странице HTML. Используя CSS, мы можем указать расположение элементов на странице. Существуют различные способы выравнивания кнопки по центру веб-страницы. Мы можем выровнять кнопки как по горизонтали, так и по вертикали. Мы можем центрировать кнопку, используя следующие методы:
Давайте разберем приведенные выше методы, используя некоторые иллюстрации. ПримерВ этом примере мы используем свойство text-align и устанавливаем его значение равным center . Его можно поместить либо в тег body, либо в родительский тег div элемента. Здесь мы размещаем text-align: center; в родительском теге div элемента кнопки. <голова> <мета-кодировка="UTF-8"> Выход ПримерВ этом примере мы используем display: grid; свойство и маржа : авто; недвижимость. Здесь мы размещаем display: grid; в родительском теге div элемента кнопки. Кнопка будет размещена в центре горизонтального и вертикального положения. <голова> В этом примере мы используем display: grid; и margin: auto; свойства тело> Протестируйте сейчасВыход ПримерЕще один пример размещения кнопки в центре. |