简体   繁体   中英

Center text over Image (and make responsive)?

In col-2, I am trying to center the "WHAT" text over the image.

<div class="row">
  <div class="col-2">
     <div class="stackParent">
           <img class="stack-Img" src="img/base.png">
           <div class="stack-Txt">
              <div class="fourWsText stack-Txt-child">WHAT</div>
           </div>
     </div>
  </div>
  <div class="col-10">
    ...Variable length content...
  </div>
</div>

As we resize the browser, the row height will change so that everything in col-10 fits. I am using object-fit:contain to keep the image proportions correct. I need the "stack-Txt" div to resize with the image so that the text will stay centered over the image

Or maybe you know of a better way to achieve this?

Current Idea: Put WHAT in another child div, make flex, center text with justify-content/align-items & JS addEventListener to window resize, get the img div and set nextSibling size equal to this.

These were the css classes at some point... but the only important thing is that the img doesn't overflow the col-2 or the height (which is variable based on the length of col-10)

.stackParent {
  position: relative;
  object-fit: contain;
  max-width: inherit;
  height: 20vh;
}

.stack-Txt {
  position: absolute;
  text-align: center;
  width: 100%;
  max-height: 15vh;
  min-height: 15vh;
  z-index: 4;
}

.stack-Txt-child {
}

.stack-Img {
  position: absolute;
  object-fit: contain;
  max-width: inherit;
  min-height: 15vh;
  max-height: 15vh;
  top: 0%;
  left: 0%;
  z-index: 3;
}

*Note: I also have media queries to resize text, but this shouldn't make a difference.

If you are using Bootstrap 5 you can just use the built-in classes to achieve so.

  • Apply .position-relative to the main div parent
  • Apply .img-fluid to <img /> to make image responsive
  • Apply .position-absolute , .top-50 , .start-50 , translate-middle to stack-Txt to center it vertically and horizontally over the image.

 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> <div class="row"> <div class="col-2"> <div class="stackParent position-relative"> <img class="stack-Img img-fluid" src="https://source.unsplash.com/random"> <div class="stack-Txt position-absolute top-50 start-50 translate-middle"> <div class="fourWsText stack-Txt-child text-white">WHAT</div> </div> </div> </div> <div class="col-10">...Variable length content... </div> </div>

If you don't, just edit your CSS as follow:

 .stackParent { position: relative } /* make image responsive */.stack-Img { max-width: 100%; height: auto; }.stack-Txt { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); color: white; }
 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> <div class="row"> <div class="col-2"> <div class="stackParent"> <img class="stack-Img" src="https://source.unsplash.com/random"> <div class="stack-Txt"> <div class="fourWsText stack-Txt-child">WHAT</div> </div> </div> </div> <div class="col-10">...Variable length content... </div> </div>

The text "what" is in center over the image in any screen resolution.

.stackParent{
display: flex;
width: 100%;
height: 100%;
align-items: center;
justify-content: center;
}
.stack-Img{
position: absolute;
margin: 0;
min-height: 15vh;
max-height: 15vh;
}
.stack-Txt{
z-index: 99;
}
<div class="row">
  <div class="col-2">
     <div class="stackParent">
           <img class="stack-Img" src="img/base.png">
           <div class="stack-Txt">
              <div class="fourWsText stack-Txt-child">WHAT</div>
           </div>
     </div>
  </div>
  <div class="col-10">
    ...Variable length content...
  </div>
</div>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM