如何使用 CSS 将文本定位在图像上

问题描述 投票:0回答:8

如何在 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>

enter image description here

当我使用背景图像时,我没有从 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');
?>
html css
8个回答
195
投票

这样的事情怎么样:http://jsfiddle.net/EgLKV/3/

通过使用

position:absolute
z-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>


33
投票

这是处理响应尺寸的另一种方法。它将使您的文本居中并保持其在其父项中的位置。如果你不希望它居中那么它更容易,只需使用

absolute
参数。请记住主容器使用
display: inline-block
。还有很多其他方法可以做到这一点,这取决于你在做什么。

基于以未知为中心

在这里工作代码笔示例

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;
}

8
投票

为什么不将

sample.png
设置为
text
h2
css 类的背景图片?当您在图像上书写时,这将生效。


8
投票

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

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 Grid 布局、均匀分布的网格元素和上述 HTML 中使用的类,请参考 - Grid: Evenly Spaced Columns。希望它能帮助你... :)


4
投票

正如 Harry Joy 指出的那样,将图像设置为 div 的背景,然后,如果您只有一行文本,则可以将文本的行高设置为与 div 高度相同,这会将您的文本放在div.

的中心

如果您有不止一行,您需要将显示设置为表格单元格并将垂直对齐方式设置为中间。


3
投票

截至 2017 年,这对我来说反应更快并且更有效。 这是为了将文本放在里面 vs 上面,就像徽章一样。 我有一个变量来从数据库中提取数据,而不是数字 8。

此代码以 Kailas 上面的回答开头

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

.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;
}
<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>


0
投票

做同样的小而短的方法:

.image {
  position: relative;
  margin-bottom: 20px;
  width: 100%;
  height: 300px;
  color: white;
  background: url('https://via.placeholder.com/600') no-repeat;
  background-size: 250px 250px;
}
<div class="image">
  <p>
    <h3>Heading 3</h3>
    <h5>Heading 5</h5>
  </p>
</div>


0
投票

快速解决方案:在容器元素上设置

position: relative;
,并在该容器元素中的子元素上设置
position: absolute;
,必要的
top
left
bottom
right
-调整参数:

.top-left {
    position: absolute;
    top: 2px;
    left: 2px;
}

.bottom-right {
    position: absolute;
    bottom: 2px;
    right: 2px;
}

.container {
    position: relative;
    text-align: center;
    color: white;
    float:left;color: white;
    text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
}
    <div class="container" style="">
    
        <img src="https://www.wikipedia.org/portal/wikipedia.org/assets/img/[email protected]" width="100">
        <div class="top-left">Wikipedia</div>
        <div class="bottom-right">Everyone's Encyclopedia</div>
    
    </div>

使用以下 CSS 将它直接居中...

  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
© www.soinside.com 2019 - 2024. All rights reserved.