วิธีวางตำแหน่งข้อความบนรูปภาพใน 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

คำตอบ:


174

เกี่ยวกับสิ่งนี้: 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>


14
คุณสามารถหลีกเลี่ยงดัชนี z
FooBar

8
@danielad: มันใช้งานได้ดีจนกว่าคุณจะแก้ไขคำตอบ ฉันได้ย้อนการแก้ไขของคุณแล้ว
xbonez

ฮ่า ๆ - ขอบคุณฉันแค่เตือนให้คุณแก้ไขสิ่งต่างๆ - มันใช้งานไม่ได้เมื่อวานนี้ - เคารพข้อความ hello world
Daniel Adenew

คุณจะได้ข้อความตรงกลางภาพได้อย่างไร? เหลือ 200 ล่าง 200?
Mason H. Hatfield

4
น่าเศร้าที่สิ่งนี้กลายเป็นตัวเลือกที่ไม่ดีจริงๆหากคุณต้องการให้ไซต์ของคุณปฏิบัติตามแนวทางปฏิบัติที่ทันสมัยและตอบสนองได้ดีในขณะที่คุณกำลังกำหนดขนาดของคอนเทนเนอร์ (คำตอบคือตั้งแต่ปี 2012 ดังนั้นจึงเข้าใจได้ว่าล้าสมัย) พบทางออกที่ดีกว่าได้ที่นี่: stackoverflow.com/questions/43333495/text-over-image-responsive
Sk446

30

นี่เป็นอีกวิธีหนึ่งในการทำงานกับขนาดที่ตอบสนอง มันจะทำให้ข้อความของคุณอยู่กึ่งกลางและรักษาตำแหน่งไว้ในพาเรนต์ หากคุณไม่ต้องการให้อยู่กึ่งกลางมันง่ายกว่านั้นเพียงใช้absoluteพารามิเตอร์ display: inline-blockเก็บไว้ในใจภาชนะหลักคือการใช้ มีวิธีอื่น ๆ อีกมากมายในการดำเนินการนี้ขึ้นอยู่กับสิ่งที่คุณกำลังทำอยู่

อ้างอิงจากCentering the Unknown

ตัวอย่างรหัสการทำงานที่นี่

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.pngเป็นภาพพื้นหลังtextหรือh2คลาส css สิ่งนี้จะให้ผลตามที่คุณเขียนบนรูปภาพ


2
จะเกิดอะไรขึ้นถ้ารูปภาพต้องเป็นส่วนความหมายของเอกสาร?
animuson

@animuson: ฉันไม่คิดว่าจะเป็นอย่างนี้ : \
Harry Joy

ฉันใช้ html2pdf เพื่อสร้าง pdf จากมันและถ้าฉันใช้ภาพพื้นหลังฉันจะไม่ได้อะไรเลย
Wern Ancheta

8
@KyokaSuigetsu: จากนั้นคุณควรเปลี่ยนชื่อคำถามเพื่อให้มีว่าคุณกำลังใช้ html2pdf
Harry Joy

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 Grid องค์ประกอบกริดที่เว้นระยะเท่า ๆ กันและคลาสที่ใช้ใน HTML ด้านบนโปรดดู - ตาราง: คอลัมน์เว้นระยะเท่า ๆ กัน หวังว่ามันจะช่วยคุณได้ ... :)


4

ตามที่ Harry Joy ชี้ให้ตั้งค่ารูปภาพเป็นพื้นหลังของ div จากนั้นหากคุณมีข้อความเพียงบรรทัดเดียวคุณสามารถกำหนดความสูงบรรทัดของข้อความให้เท่ากับความสูงของ div และสิ่งนี้จะวางข้อความของคุณใน ศูนย์กลางของ div

หากคุณมีมากกว่าหนึ่งบรรทัดคุณจะต้องตั้งค่าการแสดงผลให้เป็นเซลล์ตารางและจัดแนวตั้งให้อยู่ตรงกลาง


ฉันใช้ html2pdf เพื่อสร้าง pdf จากไฟล์. ฉันไม่เห็นภาพใด ๆ ถ้าฉันใช้ภาพพื้นหลัง โปรดดูการแก้ไขของฉัน
Wern Ancheta

ฉันขอโทษฉันไม่รู้ว่า html2pdf คืออะไร
Yevgeny Simkin

1

ในปี 2560 สิ่งนี้ตอบสนองและใช้ได้ผลกับฉันมากขึ้น ใช้สำหรับใส่ข้อความด้านในหรือด้านบนเช่นป้าย แทนที่จะเป็นหมายเลข 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;
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.