Вещи, связанные с центрированием в CSS , это, пожалуй, олицетворение того, на что чаще всего жалуются пользователи. Это на самом деле должно быть так сложно? — иронично интересуются они.
Я думаю, что проблема заключается не в том, что центрирование трудно осуществить, а в том, что, в зависимости от ситуации, существует так много различных способов сделать это, что их трудно охватить все.
Поэтому давайте создадим дерево решений и, надеюсь, теперь этот вопрос станет для вас проще. Мне нужно отцентрировать элементы.
Горизонтально
Это элементы inline или inline-* (например, текст или ссылки)?
Вы можете отцентрировать элементы inline горизонтально, в родительском элементе block-level с помощью:
.center-children < text-align: center;
Этот текст отцентрирован.
body < background: #f06d06; >header, nav < text-align: center; background: white; margin: 20px 0; padding: 10px; >nav a
Это будет работать для inline , inline-block , inline-table , inline-flex и т.д.
Это элемент уровня блока?
Вы можете отцентрировать элемент block-level , придав ему margin-left и margin-right или auto ( при этом также нужно задать width , в противном случае это будет полная ширина, и центрирование не потребуется ). Это часто делается в подобных сокращениях:
.center-me
body < background: #f06d06; >main < background: white; margin: 20px 0; padding: 10px; >.center
Это будет работать независимо от ширины элемента block-level или родительского элемента. Обратите внимание, что вы не можете использовать привязку к центру float . Хотя, существует способ .
У вас есть более чем один элемент block-level?
Если у вас есть два или более элемента block-level , которые должны быть отцентрированы горизонтально в ряд, скорее всего вам лучше применить для них разные типы display . Вот примеры, как сделать из них inline-block и flexbox :
Я элемент блочного типа, у меня есть другие элементы того же уровня, и все мы отцентрированы в ряд.
Я элемент блочного типа, у меня есть другие элементы того же уровня, и все мы отцентрированы в ряд. Я содержу больше контента, чем другие элементы моего уровня.
Я элемент блочного типа, у меня есть другие элементы того же уровня, и все мы отцентрированы в ряд.
Я элемент блочного типа, у меня есть другие элементы того же уровня, и все мы отцентрированы в ряд.
Я элемент блочного типа, у меня есть другие элементы того же уровня, и все мы отцентрированы в ряд. Я содержу больше контента, чем другие элементы моего уровня.
Я элемент блочного типа, у меня есть другие элементы того же уровня, и все мы отцентрированы в ряд.
body < background: #f06d06; font-size: 80%; >main < background: white; margin: 20px 0; padding: 10px; >main div < background: black; color: white; padding: 15px; max-width: 125px; margin: 5px; >.inline-block-center < text-align: center; >.inline-block-center div < display: inline-block; text-align: left; >.flex-center
Если только вы не хотите расположить несколько элементов block-level друг над другом. В этом случае по-прежнему прекрасно работает техника автоматического отступа:
Я элемент блочного типа, у меня есть другие элементы того же уровня, и все мы отцентрированы в ряд.
Я элемент блочного типа, у меня есть другие элементы того же уровня, и все мы отцентрированы в ряд. Я содержу больше контента, чем другие элементы моего уровня.
Я элемент блочного типа, у меня есть другие элементы того же уровня, и все мы отцентрированы в ряд.
Это элементы inline или inline-* ( например, текст или ссылки )?
Это одиночная строка?
Иногда линейные / текстовые элементы могут центрироваться по вертикали, просто потому, что отступ снизу и сверху равны:
.link
Мы Отцентрированные Фрагменты Текста
body < background: #f06d06; font-size: 80%; >main < background: white; margin: 20px 0; padding: 50px; >main a
Если отступ по некоторым причинам для вас это не вариант, и вы хотите отцентрировать текст, который не будет оборачивать, существует прием, аналогичный тому, что мы делали с line-height :
.center-text-trick
Я отцентрированная строка.
body < background: #f06d06; font-size: 80%; >main < background: white; margin: 20px 0; padding: 40px; >main div
Это несколько строк?
Аналогично отступ сверху и снизу может задать эффект центрирования для нескольких строк текста. Но иногда это не будет работать, если элемент текста представляет собой ячейку таблицы или для него с помощью CSS задано такое поведение. В этом случае применяется свойство vertical-align , в отличие от общих случаев выравнивания элементов:
Мы - отцентрированные по вертикали несколько строк текст в ячейке таблицы.
Мы - отцентрированные по вертикали несколько строк текста в созданной через CSS структуре таблицы.
Если выравнивание в формате таблицы неприменимо для вас, возможно, вы могли бы использовать flexbox ? Один дочерний элемент flex может легко быть отцентрирован внутри родительского элемента flex :
.flex-center-vertically
Мы - отцентрированные по вертикали несколько строк текста в контейнере flexbox.
Имейте в виду, что это актуально только для тех случаев, когда контейнер имеет фиксированную высоту ( в пикселях, процентах и т.д. ), поэтому для контейнера здесь задана высота.
Если оба этих метода неприменимы, вы могли бы использовать технику " призрачного элемента ", в которой внутри контейнера по всей высоте размещается псевдо-элемент и текст вертикально выравнивается с помощью этого элемента:
Довольно часто вы можете не знать высоту в макете веб-страницы по многим причинам: если ширина изменяется, текст адаптивный и может изменять высоту. Высота текста может меняться в зависимости от различных применяемых к нему стилей.
Элементы с фиксированным соотношением сторон, например, изображения, могут изменять свою высоту при изменении ширины. И т.д.
Но если вы знаете высоту, вы можете выровнять элемент по центру следующим образом:
.parent < position: relative; >.child < position: absolute; top: 50%; height: 100px; margin-top: -50px; /* при вычислении отступа и границы не используется box-sizing: border-box; */ >
Как отцентрировать объект css
Преобразования CSS основаны на размере элементов, поэтому, если вы не знаете, насколько высокий или широкий ваш элемент, вы можете установить его на 50% сверху и слева от относительного контейнера и перевести его на 50% слева и вверх центрировать его вертикально и горизонтально.
Имейте в виду, что с помощью этой методики элемент может заканчиваться визуализацией на нецелой границе пикселя, что делает его размытым. См. Этот ответ в SO для обходного пути.
HTML
CSS
СОВМЕСТИМОСТЬ КРЕСТОВЫХ БРАУЗЕРОВ
Ниже приведено общее объявление преобразования для предыдущего примера:
Для получения дополнительной информации см. CanIuse .
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Элемент позиционируется в соответствии с первым нестатическим родителем ( position: relative , absolute или fixed ). Узнайте больше в этой скрипке и этой теме документации .
Для центрирования по горизонтали используйте left: 50% и transform: translateX(-50%) . То же самое касается центрирования по вертикали: центр с top: 50% и transform: translateY(-50%) .
Использование нестатических элементов ширины / высоты с помощью этого метода центрирования может привести к появлению срезающего элемента. Это чаще всего происходит с элементами, содержащими текст, и может быть исправлено путем добавления: margin-right: -50%; и margin-bottom: -50%; , Просмотрите эту скрипку для получения дополнительной информации.
Использование Flexbox
HTML:
CSS:
HTML:
CSS:
См Динамическая горизонтального и вертикального центровку под Flexbox документации для получения более подробной информации о Flexbox и какие стили означают.
Поддержка браузера
Flexbox поддерживается всеми основными браузерами, за исключением версий IE до 10 .
Некоторые недавние версии браузера, такие как Safari 8 и IE10, требуют префиксов поставщиков .
Для быстрого создания префиксов существует инструмент Autoprefixer , сторонний инструмент.
Для старых браузеров (например, IE 8 и 9) доступен Polyfill .
Для более подробного просмотра поддержки браузера Flexbox см. Этот ответ .
Использование позиции: абсолютная
Работа в старых браузерах (IE> = 8)
Автоматические поля, в сочетании со значениями нуля для left и right или top и bottom смещений, будут центрировать абсолютно позиционированные элементы внутри своего родителя.
HTML
CSS
Элементы, которые не имеют своей собственной неявной ширины и высоты, как изображения, будут нуждаться в этих значениях.
Техника элемента призрак (взлома Михала Чернова)
Этот метод работает, даже когда размеры контейнера неизвестны.
Настройте элемент «призрак» внутри центрированного контейнера, который будет на 100% высотой, затем используйте vertical-align: middle как для элемента, так и для центрированного элемента.
CSS
HTML
Использование выравнивания текста
Наиболее распространенным и простым типом центрирования является текст строк в элементе. CSS имеет правило text-align: center для этой цели:
HTML
CSS
Это не работает для центрирования целых элементов блока . text-align управляет только выравниванием встроенного контента, такого как текст в его родительском блочном элементе.
Подробнее о text-align в разделе « Типография ».
Центрирование по отношению к другому элементу
Мы увидим, как центрировать контент в зависимости от высоты близкого элемента.
Совместимость: IE8 +, все другие современные браузеры.
HTML
CSS
Основными пунктами являются .thumb , .details и .position-container container:
В .position-container должен display: table .
.details должны иметь реальную ширину width: . и display: table-cell , vertical-align: middle .
.thumb должна иметь width: 100% если вы хотите, чтобы она заняла все оставшееся пространство, и на нее будет влиять ширина .details .
Изображение (если у вас есть изображение) внутри .thumb должно иметь width: 100% , но это не обязательно, если у вас есть правильные пропорции.
Вертикальное выравнивание с тремя строками кода
Используйте эти 3 строки для вертикального выравнивания практически всего. Просто убедитесь, что div / image, к которому вы применяете код, имеет родителя с высотой.
CSS
HTML
Вертикально выравнивать изображение внутри div
HTML
CSS
Горизонтальное и вертикальное центрирование с использованием таблицы
Можно легко центрировать дочерний элемент, используя свойство отображения table .
HTML
CSS
Используя calc ()
Функция calc () является частью нового синтаксиса в CSS3, в котором вы можете вычислить (математически), какой размер / позиция занимает ваш элемент, используя различные значения, такие как пиксели, проценты и т. Д. Примечание: — всякий раз, когда вы используете эту функцию , всегда занимайтесь пространством между двумя значениями calc(100% — 80px) .
CSS
HTML
Вертикально выровнять элементы динамической высоты
Применение css интуитивно не дает желаемых результатов, потому что
vertical-align:middle не применяется к элементам уровня блока
margin-top:auto и margin-bottom:auto используемые значения будут вычисляться как ноль
margin-top:-50% процентных значений на основе процентов вычисляются относительно ширины содержащего блока
Для самой широкой поддержки браузера используется обходной путь со вспомогательными элементами:
HTML
CSS
работает с динамическими элементами высоты
уважает поток контента
поддерживается устаревшими браузерами
Использование высоты линии
Вы также можете использовать line-height чтобы центрировать вертикально одну строку текста внутри контейнера:
CSS
Это довольно уродливо, но может быть полезно внутри элемента . Свойство line-height работает только тогда, когда текст, который будет центрирован, охватывает одну строку. Если текст переносится на несколько строк, результирующий вывод не будет центрирован.
Центрирование вертикально и горизонтально, не беспокоясь о высоте или ширине
Следующая методика позволяет добавить ваш контент в элемент HTML и центрировать его как по горизонтали, так и по вертикали, не беспокоясь о его высоте или ширине .
Внешний контейнер
должен иметь display: table;
Внутренний контейнер
должен иметь display: table-cell;
должен иметь vertical-align: middle;
должен иметь text-align: center;
Поле содержимого
должен иметь display: inline-block;
следует перенастроить горизонтальное выравнивание текста, например. text-align: left; или text-align: right; , если вы хотите, чтобы текст был центрирован
демонстрация
HTML
CSS
Центрирование с фиксированным размером
Если размер вашего контента фиксирован, вы можете использовать абсолютное позиционирование до 50% с margin который уменьшает половину ширины и высоты вашего контента:
HTML
CSS
Горизонтальное центрирование с фиксированной шириной
Вы можете центрировать элемент горизонтально, даже если вы не знаете высоту содержимого:
HTML
CSS
Вертикальное центрирование с фиксированной высотой
Вы можете центрировать элемент по вертикали, если знаете высоту элемента:
HTML
CSS
Использование margin: 0 auto;
Объекты могут быть центрированы с использованием margin: 0 auto; если они являются блочными элементами и имеют определенную ширину.
Как отцентрировать объект css
Центрирование изображения с помощью JavaScript + CSS
Рассмотрим специфичный способ центрирования изображения в блоке с использованием javascript + css. Он может показаться большим костылем, однако он работает во всех браузерах, включая IE6. О том, что нужно сделать. Имеется некий блок div, заранее определенных размеров (в нашем примере квадрат со сторонами по 220 пикс), в этом блоке должно отображаться отцентрированное изображение. Стоит обратить внимание на то, что размер исходного изображения может быть в пределах размера блока, либо меньше. С лева показана иллюстрация блока с указанием размеров. В примере воспользуемся изображением размерами меньше блока, и выставим его по центру. В качестве данных у нас есть размеры блока (220 x 220px). Размеры картинки мы будем определять посредством javascript, после её загрузки. Суть алгоритма проста: вычисляем разницу между размерами блока и изображения, затем определяем количество пикселей для отступа с лева и сверху.
boxWidth (ширина) и boxHeight (высота) — этим переменным необходимо задать значение размера блока, в котором показывается изображение, в данном примере они равны 220 пикселям. После того как код javascript отработает, изображение получит отступы посредством margin-top и margin-left. В итоге отступ сверху — 49 пикселей, с лева – 30 пикселей. Как получилось отцентрировать картинку в блоке можно увидеть в иллюстрации с лева. Заключение. Данный метод центрирования изображения в блоке довольно необычный, и не сложный по своей сути, он может подойти для позиционирования изображений, в каких либо галереях, каталоге товаров и т.п. Разумеется, существует множество различных иных способов центрирования изображения, использовать его или нет решать вам. Пример
Похожие публикации:
Как поставить две картинки рядом в css
Как поставить текст снизу css
Как при наведении на картинку заменить ее на другую картинку css
Как прижать кнопку к низу блока css
Как отцентрировать текст?
Мне нужно отцентрировать текст таким образом Вроде бы ничего сложного, но у меня текст по непонятным причинам перемещается на вторую строку. Текст был помещен в блок, которому были заданы высота и ширина. Затем он был отцентрирован внутри блока ( text-align: center ) и внутри родителя ( margin: 0 auto ).
FROM GRAPEFRUIT TO LEMONS TO ORANGES, CITRUS DOES YOU GOOD!
June 14, 2015
24
health
5 Tips To Supercharge Your Motivation
June 14, 2015
24
Beauty
To Keep Makeup Looking Fresh Take A Powder
June 14, 2015
24
codepen В чем может быть ошибка?
Как в CSS выровнять текст по центру?
Используйте стилевое свойство text-align со значением center, добавляя его к абзацу (селектору P) или к определенному слою (пример 1). Результат примера показан на рис. 1. В данном примере текст внутри слоя с именем text выравнивается по центру веб-страницы.
Как выровнять текст в CSS?
left — выравнивание по левому краю;
right — по правому краю;
center — по центру;
justify — по ширине.
Как в CSS отцентрировать текст по блоку?
Для горизонтального центрирования: text-align: center – центрирует инлайн-элементы в блоке. margin: 0 auto – центрирует блок внутри родителя.
Как выровнять текст по вертикали в CSS?
padding или margin.
line-height = height.
Вертикальное выравнивание иконок и смайликов
display: table-cell; и vertical-align: middle;
vertical-align и :before.
position: absolute; (или position: fixed;) и картинки
Как выровнять текст по ширине CSS?
Для выравнивания текста в блоке, например абзаце, применяется стилевое свойство text-align. Его значение justify и устанавливает выравнивание текста по ширине, т. е. сразу по левому и правому краю текстового блока (пример 1).
Как переместить текст вниз в CSS?
Если вы хотите переместить текст вниз, используйте padding-top. line-height может работать в зависимости от вашей ситуации. Проблема с высотой строки может быть, если у вас есть фоновый цвет, а затем он также будет расширяться.
Как отцентрировать текст HTML?
Использование тегов
Центрировать этот текст! center>
Центрировать этот текст! p>
Как центрировать объект в CSS?
Сделайте контейнер относительно позиционированным (position: relative), что превратит его в контейнер для абсолютно позиционированных элементов.
Сам элемент сделайте абсолютно позиционированным (position: absolute).
Поместите элемент посередине контейнера с помощью 'top: 50%'.
Как центрировать div?
Для центрирования по горизонтали Вам необходимо задать ширину, а также значение auto для левого и правого отступа (тут мы используем сокращенную запись CSS). Этот способ работает с блочными элементами (div, p, h1, прочее. ).
Как выровнять текст или блок div по вертикали CSS?
Для вертикального выравнивания текста лучше использовать вертикальные отступы или свойство line-height . Для абсолютно позиционированных элементов с известной высотой (например, иконок) идеально подойдет способ с отрицательным свойством margin-top .
Как центрировать текст по вертикали?
Данный метод работает, когда вы хотите центрировать вертикально одну строчку текста. Все что нужно сделать - это задать высоту строки больше, чем размер шрифта. По умолчанию свободное пространство будет распределено равномерно сверху и снизу текста. И строка будет отцентрирована вертикально.
Как сделать вертикальную прокрутку CSS?
Принудительная установка прокрутки в блоке CSS
Можно также принудительно создать прокрутку по высоте и ширине. Для этого каждой оси: overflow-y: scroll; (вертикаль) overflow-x: scroll; (горизонталь) укажем параметр scroll, принудительная прокрутка.