如何在CSS中的图像上放置文本


123

如何在CSS中将文本居中放置在图像上?

<div class="image">
    <img src="sample.png"/>
    <div class="text">
       <h2>Some text</h2>
    </div>
</div>

我想做类似下面的事情,但是我遇到了困难,这是我目前的CSS

<style>
.image {
   position: relative;
}

h2 {
   position: absolute;
   top: 200px;
   left: 0;
   width: 100%;
   margin: 0 auto;
   width: 300px;
   height: 50px;
}
</style>

在此处输入图片说明

当我使用背景图像时,我没有从html2pdf获得任何输出:

<style>
#image_container{
    width: 1000px;
    height: 700px;
    background-image:url('switch.png');
}
</style>
<a href="prints.php">Print</a>
<?php ob_start(); ?>
<div id="image_container"></div>
<?php 
$_SESSION['sess'] = ob_get_contents(); 
ob_flush();
?>

这是prints.php:

<?php require_once('html2pdf/html2pdf.class.php'); ?>
<?php
$html2pdf = new HTML2PDF('L', 'A4', 'en');
$html2pdf->writeHTML($_SESSION['sess']);
$html2pdf->Output('random.pdf');
?>

是否可以使用背景图像?
Webwoman

Answers:


174

像这样的东西怎么样:http : //jsfiddle.net/EgLKV/3/

通过使用position:absolutez-index将文本放置在图像上来完成此操作。

#container {
  height: 400px;
  width: 400px;
  position: relative;
}
#image {
  position: absolute;
  left: 0;
  top: 0;
}
#text {
  z-index: 100;
  position: absolute;
  color: white;
  font-size: 24px;
  font-weight: bold;
  left: 150px;
  top: 350px;
}
<div id="container">
  <img id="image" src="http://www.noao.edu/image_gallery/images/d4/androa.jpg" />
  <p id="text">
    Hello World!
  </p>
</div>


14
您可以避免使用z-index
FooBar 2014年

8
@danielad:在您编辑答案之前,一切都很好。我已回滚您的修改。
xbonez '16

哈哈-谢谢我,我只是提醒您要解决问题-昨天不起作用-问候您好世界文字
Daniel Adenew

您怎么能在图像中间得到文本?左200,下200?
Mason H. Hatfield

4
可悲的是,如果您希望网站在固定容器大小时遵循现代的响应式实践,那么这最终将是一个非常糟糕的选择(答案是从2012年开始的,因此可以理解已经过时了)。可以在这里找到更好的解决方案:stackoverflow.com/questions/43333495/text-over-image-sensitive
Sk446

30

这是使用响应大小的另一种方法。它将使您的文本居中并保持其在父级中的位置。如果您不希望它居中,那么它甚至更简单,只需使用absolute参数即可。请记住,主容器正在使用display: inline-block。有许多其他方法可以执行此操作,具体取决于您的工作。

基于未知中心

这里的工作codepen示例

的HTML

<div class="containerBox">
    <div class="text-box">
        <h4>Your Text is responsive and centered</h4>
    </div>
    <img class="img-responsive" src="http://placehold.it/900x100"/>
</div>

的CSS

.containerBox {
    position: relative;
    display: inline-block;
}
.text-box {
    position: absolute;    
    height: 100%;
    text-align: center;    
    width: 100%;
}
.text-box:before {
   content: '';
   display: inline-block;
   height: 100%;
   vertical-align: middle;
}
h4 {
   display: inline-block;
   font-size: 20px; /*or whatever you want*/
   color: #FFF;   
}
img {
  display: block;
  max-width: 100%;
  height: auto;
}

6
该解决方案非常适合那些您无法指定设置的高度或宽度的情况。
Yazmin

8

为什么不将其设置sample.pngtexth2CSS类的背景图像?这将在您覆盖图像时生效。


2
如果图像需要是文档的语义部分怎么办?
animuson

@animuson:我认为这里不是这种情况。:\
哈里·乔伊

我正在使用html2pdf从中生成pdf,如果使用background-image,我什么也收不到。
Wern Ancheta'1

8
@KyokaSuigetsu:那么您应该更改问题标题以包含您正在使用html2pdf。
哈里·乔伊2012年

6

对于响应式设计,最好使用具有相对布局的容器和内容(放置在容器中)具有固定布局的容器。

CSS样式:

/*Centering element in a base container*/

.contianer-relative{ 
  position: relative;
 }

.content-center-text-absolute{ 
  position: absolute; 
  text-align: center;
  width: 100%;
  height: 0%;
  margin: auto;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  z-index: 51;
}

HTML代码:

<!-- Have used ionic classes -->
<div class="row">
    <div class="col remove-padding contianer-relative"><!-- container with position relative -->
        <div class="item item-image clear-border" ><a href="#"><img ng-src="img/engg-manl.png" alt="ENGINEERING MANUAL" title="ENGINEERING MANUAL" ></a></div> <!-- Image intended to work as a background -->
        <h4 class="content-center-text-absolute white-text"><strong>ENGINEERING <br> MANUALS</strong></h4><!-- content div with position fixed -->
    </div>
    <div class="col remove-padding contianer-relative"><!-- container with position relative -->
        <div class="item item-image clear-border"><a href="#"><img ng-src="img/contract-directory.png" alt="CONTRACTOR DIRECTORY" title="CONTRACTOR DIRECTORY"></a></div><!-- Image intended to work as a background -->
        <h4 class="content-center-text-absolute white-text"><strong>CONTRACTOR <br> DIRECTORY</strong></h4><!-- content div with position fixed -->
    </div>       
</div>

有关IONIC网格布局,等距网格元素以及以上HTML中使用的类,请参阅Grid:等距。希望它可以帮助您... :)


4

正如哈里·乔伊(Harry Joy)指出的那样,将图像设置为div的背景,然后,如果只有一行文本,则可以将文本的行高设置为与div高度相同,这会将您的文本放置在div中心。

如果您有多行,则需要将显示设置为表格单元,并将垂直对齐设置为中间。


我正在使用html2pdf从这些文件创建pdf。如果使用背景图像,则看不到任何图像。请看我的编辑。
Wern Ancheta'1

抱歉,我不知道html2pdf是什么。
叶夫根尼·辛金

1

截至2017年,这对我来说反应更快并且为我工作。这是为了将文本放入内部或上方,例如徽章。而不是数字8,我有一个变量可以从数据库中提取数据。

这段代码从Kailas的答案开始

https://jsfiddle.net/jim54729/memmu2wb/3/

我的HTML

<div class="containerBox">
  <img class="img-responsive"    src="https://s20.postimg.org/huun8e6fh/Gold_Ring.png">
  <div class='text-box'>
   <p class='dataNumber'> 8 </p>
  </div>
</div>

和我的CSS:

.containerBox {
  position: relative;
  display: inline-block;
}

.text-box {
  position: absolute;
  height: 30%;
  text-align: center;
  width: 100%;
  margin: auto;
  top: 0;
  bottom: 0;
  right: 0;
  left: 0;
  font-size: 30px;
}

.img-responsive {
  display: block;
  max-width: 100%;
  height: 120px;
  margin: auto;
  padding: auto;
}

.dataNumber {
  margin-top: auto;
}

-1

一种简短的方法

的HTML

<div class="image">
     <p>
        <h3>Heading 3</h3>
        <h5>Heading 5</h5>
     </p>
</div>

的CSS

.image {
        position: relative;
        margin-bottom: 20px;
        width: 100%;
        height: 300px;
        color: white;
        background: url('../../Images/myImg.jpg') no-repeat;
        background-size: 250px 250px;
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.