Как выровнять заголовок по верхнему краю изображения (проблема с высотой строки)

У меня макет из 2 столбцов, где в левом столбце - заголовок, в правом столбце - изображение. Я хочу, чтобы заголовок и изображение были выровнены вверху следующим образом:

Как выровнять заголовок по верхнему краю изображения (проблема с высотой строки)

Теперь добился этого установкой h1 { line-height: 1em; }. Однако я также хочу, чтобы он работал, если высота строки больше, и если заголовок охватывает больше строк, как в этом примере кода:

body {
max-width: 400px;
}

div {
  float: left;
  width: 50%;
}

h1 {
  margin: 0;
  padding: 0;
  line-height: 2em;
}

img {
  width: 100%;
}
<div>
  <h1>Hello world!
  <br>Foo Bar Baz</h1>
</div>
<div>
  <img src = "https://media1.tenor.com/images/1c765c0d5963c84864bece62355713e0/tenor.gif?itemid=8240085">
</div>

Я не хочу работать с отрицательными полями, потому что левый столбец будет заполнен контентом CMS позже. Я не могу контролировать, какой элемент (h1-h6, p и т. д.) Будет там отображаться и какая высота строки у этого элемента.

Как именно вы хотите выровнять изображение 2? Против правого края? Вертикально? По горизонтали?

Mikaal Anwar 31.05.2018 01:40

Заголовок и изображение должны быть выровнены по вертикали.

Beppe 31.05.2018 01:42

Прошу прощения за недоразумение, я имел в виду, что хочу, чтобы заголовок и изображение выровнялись вверху (см. Мой обновленный вопрос)

Beppe 31.05.2018 02:03

@Beppe line-height слишком высок ... в чем идея? Вы пробовали перенести line-height: 2em;h1) на правила div?

Roko C. Buljan 31.05.2018 02:05

Кто бы ни проголосовал против ответов, пожалуйста, проголосуйте за. Вопрос был сформулирован неправильно (полностью), что привело к неправильным ответам. Ответы (по крайней мере, мои) потом будут удалены. Tnx.

wazz 31.05.2018 02:07

Да, это не их вина.

Beppe 31.05.2018 02:11

@wazz, ну, вы сказали, что это making the answers wrong, поэтому, если они ошибаются, их следует исправить или удалить, лично я только что видел вопрос, и ответы не имеют ничего общего с вопросом

Temani Afif 31.05.2018 02:16

Умм, это то, что я только что сказал.

wazz 31.05.2018 05:33
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
8
69
2

Ответы 2

Это идеальное время для использования макета flexbox в CSS.

С flexbox очень легко выровнять контент без необходимости устанавливать какую-либо конкретную высоту - так как вы можете позволить элементам быть той же высоты, что и их братья и сестры.

Я создал быструю демонстрацию с некоторыми незначительными изменениями в вашем коде, я считаю, что это дает результат, на который вы надеетесь:

body {
max-width: 400px;
}

h1 {
  margin: 0;
  padding: 0;
  line-height: 2em;
}

img {
  width: 50%;
}
.flex-container {
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
<div class = "flex-container">
  <h1>Hello world!
  <br>Foo Bar Baz</h1>
  <img src = "https://media1.tenor.com/images/1c765c0d5963c84864bece62355713e0/tenor.gif?itemid=8240085">
</div>
<hr>
<div class = "flex-container">
  <h2>Hello world!
  <br>Foo Bar Baz Longer example with h2</h2>
  <img src = "https://media1.tenor.com/images/1c765c0d5963c84864bece62355713e0/tenor.gif?itemid=8240085">
</div>

Для получения дополнительной информации о flexbox посетите: https://css-tricks.com/snippets/css/a-guide-to-flexbox/

Спасибо за ваш ответ! Думаю, я недостаточно четко сформулировал свой вопрос: заголовок и изображение должны быть выровнены вверху (см. Мой обновленный вопрос). К сожалению, Flexbox здесь не помогает, так как даже с align-items: flex-start они не кажутся выровненными из-за высоты строки.

Beppe 31.05.2018 02:03

Вы всегда можете воспользоваться старым добрым свойством vertical-align. Однако это всегда было непростой задачей. В вашем случае, например, мне пришлось сделать оба div'а display свойством inline-block, поскольку вам нужно, чтобы элементы были встроенными, чтобы вы могли их выровнять по вертикали. Также мне пришлось поместить закрывающий тег одного div рядом с открытием следующего, потому что при их отображении inline отобразит новую строку в коде как пробел и, таким образом, заставит второй div перейти на новую строку.

body {
max-width: 400px;
}

div {
  width: 50%;
  display:inline-block;
  vertical-align:middle;
}

h1 {
  margin: 0;
  padding: 0;
  line-height: 2em;
}

img {
  width: 100%;
}
    <div >
      <h1>Hello world!
      <br>Foo Bar Baz</h1>
    </div><div class = "leDiv">
      <img src = "https://media1.tenor.com/images/1c765c0d5963c84864bece62355713e0/tenor.gif?itemid=8240085">
    </div>

Другие вопросы по теме