html — Выравнивание по центру картинки
Вопрос задан
Изменён 6 лет 2 месяца назад
Просмотрен 184 раза
Есть блок.
.photo{ border:1px solid #e3e3e3; text-align:center; width:530px; height:458px; } .photo img{ max-width:500px; max-height:400px; }
<div> <a href="/<?=$gallery[0]->img?>" data-lightbox="roadtrip" title="my caption"> <img src="/<?=$gallery[0]->img?>" alt="<?=$product->title?>"> </a> </div>
Но картинка прижимается к верху. Как сделать так что бы она выравнивалась по центру? Как например в таблице
<td valign="middle"> Фото </td>
- html
- css
. photo { border: 1px solid #e3e3e3; text-align: center; width: 530px; height: 458px; } .photo:after { content: ''; height: 100%; display: inline-block; vertical-align: middle; } .photo img { max-width: 500px; max-height: 400px; background: #ccc; display: inline-block; vertical-align: middle; }
<div> <a href="/<?=$gallery[0]->img?>" data-lightbox="roadtrip" title="my caption"> <img src="/<?=$gallery[0]->img?>" alt="<?=$product->title?>"> </a> </div>
Попробуйте так:
.photo { border: 1px solid #e3e3e3; display: table-cell; height: 458px; position: relative; text-align: center; vertical-align: middle; width: 530px; } .photo img{ max-width:500px; max-height:400px; }
.photo { position: relative; left: 50%; float: left; } .photo img { position: relative; right: 50%; }
Ещё проще и понятней использовать flexbox
для выравнивания.
1й вариант
.photo { display: flex; /* Горизонтальное выравнивание по центру */ align-items: center; /* Вертикальное выравнивание по центру */ justify-content: center; }
2й вариант
.photo { display: flex; } .photo > a { /* выравнивание и по горизонтали, и по вертикали */ /* если надо только по вертикали то задайте margin: auto 0; */ margin: auto; }
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Абсолютное позиционирование в CSS: понять раз и навсегда
Вы все еще не понимаете как работает абсолютное позиционирование в CSS и теряете элементы на экране? Давайте разбираться в этой магии.
Введение в позиционирование
Когда вы устанавливаете
position: absolute
, на первый план выходит не сам элемент, а его родительский контейнер, ведь относительно него и осуществляется позиционирование в CSS. Сложность в том, что это не всегда непосредственный родитель элемента.Рассмотрим код с четырьмя дивами, вложенными друг в друга по принципу матрешки.
<body> <div> <div> <div> <div></div> </div> </div> </div> </body>
Блоки box-1
, box-2
и box-3
для красоты отцентрированы с помощью свойств margin: auto и свойств flex CSS. Блок box-4
остается в своей дефолтной позиции в потоке документа.
body { display: flex; } .box-1, .box-2, .box-3 { display: flex; margin: auto; }
Все 4 элемента имеют позиционирование по умолчанию. На данный момент верстка выглядит следующим образом:
.box-4 без позиционированияОтносительно чего позиционируем?
Чтобы спозиционировать себя, элемент должен знать две вещи:
- какой родитель станет точкой отсчета;
- величину смещения относительно точки отсчета (сверху, снизу, справа или слева).
Если определить position: absolute
для box-4
, этот элемент покинет нормальный поток документа. Но сейчас он остается на своем месте, так как координаты смещения не заданы. Если в CSS ширина элемента не определена, она будет равна ширине его содержимого (плюс паддинги и рамка).
Теперь добавим свойства top: 0
и left: 0
. Элемент должен определить, какой родительский контейнер станет точкой отсчета для этих координат. Ей становится ближайший элемент с нестатической позицией (чаще всего position: relative
). box-4
начинает поочередно опрашивать своих предков. Ни box-3
, ни box-2
, ни box-1
не подходят, так как имеют позиционирование в CSS по умолчанию (unset
).
Если позиционированный предок не нашелся, элемент размещается относительно тела документа (body
):
Если установить position: relative
для элемента box-1
, точкой отсчета станет он:
Абсолютно позиционированный элемент располагается относительно ближайшего позиционированного предка.
Как только точка отсчета нашлась, все, что выше нее в DOM-дереве, перестает иметь значение.
Если установить position: relative
также для box-2
, то box-4
будет позиционироваться относительно него, ведь этот предок ближе.
Аналогично и для контейнера box-3
:
А вот и наглядный красивый CSS-пример поиска позиционированного предка:
Перевод статьи How to understand CSS Position Absolute once and for all.
Еще больше полезных статей по CSS:
- 7 простых способов писать по-настоящему ужасный CSS
- Адаптивные изображения: 5 трюков CSS для экономии времени
- 15 интересных CSS и JavaScript библиотек на апрель 2018
- Тест: насколько хорошо вы знаете CSS
Невозможно выровнять изображение по середине — HTML и CSS — Форумы SitePoint
система
1
У меня есть простой HTML-файл, который я создал. Я пытаюсь выровнять изображение по центру. Я думаю, что сделал это так же, как говорит W3C, но это не работает. Когда я просматриваю страницу, выравнивание по правому краю работает, но среднее и левое выравниваются по левому краю. Я не понимаю, почему.
<голова>Мой сайт голова> <тело>В настоящее время веб-сайт находится в разработке. Пожалуйста, зайдите позже!
Авторское право © 2009 г.mywebsite.org
тело>
Все права защищены.
Не знаю, что я делаю не так.
система
2
Ну, я посмотрел в своем учебнике для класса, и я нашел способ обойти это.
<голова>Мой сайт голова> <тело> <дел> png" alt="логотип" />
В настоящее время веб-сайт находится в разработке. Пожалуйста, зайдите позже!
Авторское право © 2009 г.mywebsite.org
Все права защищены.
Это правильный путь или я ошибаюсь? Это исправление только что пришло мне в голову, но я не уверен, что оно правильное.
Алекс Доусон
3
Проблема в том, что вы используете «float: middle;», нет такого значения float, как middle, что и вызывает проблему. Использование align: center в div будет работать так, как вы хотите (если сомневаетесь, попробуйте), но с выравниванием на месте в div вы также можете удалить те, что находятся в его дочерних элементах (выравнивания в p и которые плавают в img).
Надя_П
4
Вместо этого попробуйте следующее. Все стили были вынесены из html и помещены в заголовок документа: (я добавил комментарии к стилям, чтобы вы могли видеть, какие правила стилизуют те или иные элементы на странице).
<голова>Мой сайт <тип стиля="текст/CSS"> /* верхний div, содержащий изображение */ #верхнийконтейнер { ширина: 100%; выравнивание текста: по центру; } /* div для хранения нижней информации — назвал его нижним колонтитулом */ #нижний колонтитул { ширина: 100%; } /* оформляет абзацы в нижнем колонтитуле — также выравнивает текст по центру */ #нижний колонтитул р { размер шрифта: 12px; /* меняем размер шрифта по мере необходимости */ выравнивание текста: по центру; } стиль>голова> <тело> <дел> png" alt="логотип" />