Размещение текста над изображением с помощью HTML и CSS

0

У меня есть div, содержащий текст заголовка и изображение.

С помощью приведенного ниже кода заголовок отображается чуть выше изображения.

Код HTML:

<div class="thumbnail">
  <div class="text">
  <center>Heading</center>
  </div>
  <div class="image">
  <img src="sample.png">
  </div>
</div>

Я хотел бы выровнять заголовок так, чтобы он отображался в центре (по вертикали и по горизонтали) изображения.

Как я могу достичь этого с помощью HTML и CSS?

  • 3
    center элемент является устаревшим , и вы не должны его использовать.
  • 0
    Вы можете найти ответ здесь: stackoverflow.com/questions/8708945/…
Показать ещё 3 комментария
Теги:

4 ответа

0
Лучший ответ

Ваша разметка в основном правильная, за исключением использования элемента center и вам не нужно обертывать элемент img в div.

Вот пример разметки:

 <div class="thumbnail"> <h1>Heading</h1> <img src="sample.png"> </div>

И его соответствующий CSS:

.thumbnail {
  position:relative;
}
.thumbnail h1 {
  text-align:center;
  position:absolute;top:50%;left:0;width:100%;
  margin-top:-20px; /*make the negative top margin = half your h1 element height */
}

Вы всегда можете использовать элемент, отличный от h1, чтобы удерживать свой заголовок. Это зависит только от ваших предпочтений.

1

Вы можете удалить тег изображения и сделать изображение фоном контейнера div.

HTML

<div class="text">
    Heading
</div>

CSS

.text {
    background-image: url('sample.jpg');
    text-align: center;
}

EDIT: Я не хочу продавать его в качестве своего идеального ответа, но я понял, что пропустил вертикальное выравнивание, и поскольку подобные решения уже были представлены здесь в комментариях и ответах, позвольте мне просто предоставить вам хороший источник информации ниже, Дело в том, что вы можете использовать vertical-align:middle если вы использовали span или другой встроенный элемент, но с div, вам нужно использовать другие трюки, такие как position:absolute и минус поля.

Источник: http://phrogz.net/css/vertical-align/index.html

  • 0
    Я не могу использовать это. Потому что изображение всегда меняется. Есть много таких миниатюр ... (сделано с использованием PHP)
  • 0
    как я уже сказал, есть другие варианты, проверьте мою ссылку или ответы, которые дали другие ...
Показать ещё 4 комментария
0

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

То, что я хотел бы сделать, - это абсолютное положение заголовка, а затем использовать display: table-cell для вертикального выравнивания.

Обратите внимание: чтобы иметь возможность использовать это решение, вы должны указать высоту заголовка.

HTML

<div class="thumbnail">
  <div class="text">
      <h1>Heading</h1>
  </div>
  <div class="image">
      <img src="http://placehold.it/350x250" />
  </div>
</div>

CSS

  .thumbnail{
    position: relative; 
    display: inline-block;
}
.text{
    position:absolute; 
    top: 0px; 
    left: 0px; 
    width: 350px;
}
.text h1{
    height: 250px; 
    display: table-cell; 
    vertical-align: middle; 
    text-align: center;  
    width: 350px; 
    color: #fff;
}

JSfiddle здесь

0

Следующие могут помочь вам.

HTML:

<div class="thumbnail">
    <div class="text">
         Heading
    </div>
</div>

CSS:

.text {
    background-image: url('http://cs616623.vk.me/v616623331/7991/vPKjXbo-c7o.jpg');
    width: 320px;
    height: 240px;
    line-height: 240px;
    vertical-align: middle;
    text-align: center;
    font-size: 48px;
}

Учтите, что при таком подходе вам нужно будет вручную задать height и width вашего text элемента. Кроме того, height должна быть дублирована на line-height чтобы вертикальное выравнивание работало правильно.

Вы можете проверить и изменить код в соответствующем JSFiddle или просто проверить полноэкранный результат.

  • 0
    Я не могу поместить изображение в CSS. Потому что URL-адрес изображения меняется для разных миниатюр
  • 0
    А ну понятно! Пожалуйста, рассмотрите возможность добавления этих деталей к вашему вопросу, чтобы сделать его более конкретным. Таким образом, вы получите ответы в более короткой манере :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню