Shinji-san Shinji-san - 5 months ago 16
HTML Question

Positioning text in flexbox under pictures

I'm experiencing an issue with my text where I don't see it at all, or it doesn't act as though I would think it would in a flexbox. I have three images in the flexbox right now, but I would like to place small 'captions' under each of them(not in the p element, the purple, but I would like to place it on the white, which is right under the purple box(the p element). I thought that by adding a child element, that element would at least line up vertically with the element above it but I guess I'm wrong. Can anyone help? Another piece of info is that really my images are 250 pixels, but I wanted to accommodate for a snippet so I made it 50 pixels, but that's probably irrelevant.



#footer {
display: flex;
height: 130px;
width: 100%;
background-color: #862d59;
clear: both;
}

#footer, #wrapper:after{
height: 130px;
}

.wrap {
margin: 0 auto;
width: 100%;
display: flex;
align-items: center;
flex-wrap: nowrap;
}

.sub {
padding: 12px;
width: 32%;
height: 100px;
color: white;
border-right: solid white 1px;
}

.sub:last-child {
border: 0px;
}

html {
height: 100%;
}

body {
height: 100%;
margin:0;
font-family: courier;
font-size: 22px;
color: white;
}

#wrapper {
position: relative;
margin-left: auto;
margin-right: auto;
width: 85%;
min-height: 100%;
margin-top: -130px;
}

#inner {
position:absolute;
display:flex;
flex-wrap: wrap;
height: 600px;
top:50%;
align-items: center;
justify-content: space-between;
margin-top: -300px;
align-content: center;
width: 100%;
}

#inner p {
background-color: #26004d;
padding: 60px;
border-radius: 9px;
}

#inner img {
border-radius: 8px;
}

<div id="wrapper">
<div id="inner">
<p><img src="cat1.jpeg" alt="Picture of a cat" width="50" height="50"></p>
<p><img src="dog1.jpg" alt="Picture of a cat" width="50" height="50"></p>
<p><img src="park.jpg" alt="Picture of a cat" width="50" height="50"></p>
</div>
</div>
<div id="footer">
<div class="wrap">
<div class="sub"></div>
<div class="sub"></div>
<div class="sub"></div>
</div>
</div>




Answer

Without additional info / image, here's the solution I was able to come up with. If you want to keep each image / caption grouped together, wrap them in another parent div. Then just add the caption below that, which is a block element and should flow below the image, as intended. Snippet below.

#footer {
  display: flex;
  height: 130px;
  width: 100%;
  background-color: #862d59;
  clear: both;
}

#footer, #wrapper:after{
  height: 130px;
}

.wrap {
  margin: 0 auto;
  width: 100%;
  display: flex;
  align-items: center;
  flex-wrap: nowrap;
}

.sub {
  padding: 12px;
  width: 32%;
  height: 100px;
  color: white;
  border-right: solid white 1px;
}

.sub:last-child {
  border: 0px;
}

html {
  height: 100%;
}

body {
  height: 100%;
  margin:0;
  font-family: courier;
  font-size: 22px;
  color: white;
}

#wrapper {
  position: relative;
  margin-left: auto;
  margin-right: auto;
  width: 85%;
  min-height: 100%;
}

#inner {
  position:absolute;
  display:flex;
  flex-wrap: wrap;
  height: 600px;
  top:50%;
  align-items: center;
  justify-content: space-between;
  margin-top: -300px;
  align-content: center;
  width: 100%;
}

#inner p {
  background-color: #26004d;
  padding: 60px;
  border-radius: 9px;
}

#inner p.caption {
  color: #000;
  background-color: transparent;
  border-radius: 0;
}

#inner img {
  display: block;
  border-radius: 8px;
}
<div id="wrapper">
  <div id="inner">
    <div class="image-wrapper">
      <p>
        <img src="http://placehold.it/100x100" alt="Picture of a cat">
      </p>
      <p class="caption">Caption</p>
    </div>
    <div class="image-wrapper">
      <p>
        <img src="http://placehold.it/100x100" alt="Picture of a cat">
      </p>
      <p class="caption">Caption</p>
    </div>
    <div class="image-wrapper">
      <p>
        <img src="http://placehold.it/100x100" alt="Picture of a cat">
      </p>
      <p class="caption">Caption</p>
    </div>
  </div>
</div>
<div id="footer">
  <div class="wrap">
    <div class="sub"></div>
    <div class="sub"></div>
    <div class="sub"></div>
  </div>
</div>

Let me know if you have any questions, or if this doesn't satisfy your description.

Comments