Aligning text next to an image within a container

Viewed 104

What I'm trying to recreate

New to CSS+HTML and trying to practice my 'skills' which I have developed so far.

I've spent so many hours trying to get the text to align but it just will not.

Here's what i've had achieved so far

That in itself took ages just to figure out how to align the four cards like that. I still cannot figure out how to align this text though.

Here is my HTML:

<body>
<div class="burger-layout">
    <div class="burger-item">
        <h2>HFC Classic</h2>
        <span class="burger-description">RSPCA Approved chicken, cooked in extra virgin olive oil with dill pickles,
            cos lettuce & egg mayo.</span>
        <ul>
            <li class="kj">2800Kj</li>
            <li class="price">$14.50</li>
            <li class="Details">More Details</li>
        </ul>
        <img src="hfc.png" alt="" class="burgerimg">

    </div>

    <div class="burger-item">
        <h2>HFC Hot</h2>

        <span class="burger-description">RSPCA Approved chicken, cooked
            in extra virgin olive oil with our Hawthorn
            Hot Sauce, jalapeƱos, slaw, shredded carrot, Spanish onion & egg mayo.</span>
        <ul class="burgerfooter">
            <li class="kj">2910Kj</li>
            <li class="price">$15.90</li>
            <li class="Details">More Details</li>
        </ul>
        <img src="hot.png" alt="" class="burgerimg">

    </div>

    <div class="burger-item">
        <h2>HFC Smokey</h2>
        <span class="burger-description">RSPCA Approved chicken, cooked in extra virgin olive oil with chipotle
            mayo, dill pickles, slaw & Spanish onion.</span>
        <ul>
            <li class="kj">2700Kj</li>
            <li class="price">$15.50</li>
            <li class="Details">More Details</li>
        </ul>
        <img src="smokey.png" alt="" class="burgerimg">

    </div>

    <div class="burger-item">
        <h2>HFC Blat</h2>
        <span class="burger-description">RSPCA Approved chicken, cooked in extra virgin olive oil with crispy bacon,
            avocado, cos lettuce, tomato & herbed mayo.</span>
        <ul>
            <li class="kj">2600Kj</li>
            <li class="price">$15.90</li>
            <li class="Details">More Details</li>
        </ul>
        <img src="blat.png" alt="" class="burgerimg">

    </div>



</div>

Here is my CSS so far: (note: I know the indentation is off here, its correct in my IDE)

body {
display: flex; 
justify-content: center;
align-items: center;
min-width: 10vh;

}

.burger-layout{
display: grid;
grid-template-columns: 1fr 1fr;
column-gap: 10px;
row-gap: 10px;
}
.burger-item {
border: 1px grey solid;
border-radius: 10px;
max-width: 537px;
max-height: 210px;




}

.burgerimg {
display: flex;
display: inline-block;
max-width: 100px;
max-height: 100px;
padding: 10px 10px;


}

.burger-description {

 }
2 Answers

Wrap image and info into two different containers and use flex.

As you want to slice the layout into 2 parts. Let say left and right.

Left is the one that contains an image and as we need to give width and height and also some padding that's why you need to wrap it into a container. You can do this without wrapping it and then you've to use margin to give some space between the outer container and image.

Similarly Right is the one that contains information. And you want to slice the container into 2 parts.

Flexbox works only in one direction either horizontally or vertically. All direct children of flexbox containers are flex-items. According to flex-direction, flex-items are placed accordingly. In you case image and other info should be side-by-side, so I wrap both in different container. If you don't wrap the all text container into one then they all come side by side or top to bottom as per your direction.

body {
  display: flex;
  justify-content: center;
  align-items: center;
  min-width: 10vh;
}

.burger-layout {
  display: grid;
  grid-template-columns: 1fr 1fr;
  column-gap: 10px;
  row-gap: 10px;
}

.burger-item {
  display: flex;
  border: 1px grey solid;
  border-radius: 10px;
  max-width: 537px;
  max-height: 210px;
}

.image-container {
  padding: 1rem;
}

img.burgerimg {
  height: 100%;
}

.info-container {
  height: 100%;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}

.info-container ul {
  display: flex;
  list-style-type: none;
  padding: 0;
  gap: .5rem;
}

.Details {
  color: red;
  font-weight: 600;
}
<div class="burger-layout">
  <div class="burger-item">
    <div class="image-container">
      <img src="https://picsum.photos/200" alt="" class="burgerimg">
    </div>
    <div class="info-container">
      <div>
        <h2>HFC Classic</h2>
        <span class="burger-description">RSPCA Approved chicken, cooked in extra virgin olive oil with dill pickles,
              cos lettuce & egg mayo.</span>
      </div>
      <ul>
        <li class="kj">2800Kj</li>
        <li class="price">$14.50</li>
        <li class="Details">More Details</li>
      </ul>
    </div>
  </div>
  <div class="burger-item">
    <div class="image-container">
      <img src="https://picsum.photos/200" alt="" class="burgerimg">
    </div>
    <div class="info-container">
      <div>
        <h2>HFC Classic</h2>
        <span class="burger-description">RSPCA Approved chicken, cooked in extra virgin olive oil with dill pickles,
              cos lettuce & egg mayo.</span>
      </div>
      <ul>
        <li class="kj">2800Kj</li>
        <li class="price">$14.50</li>
        <li class="Details">More Details</li>
      </ul>
    </div>
  </div>
  <div class="burger-item">
    <div class="image-container">
      <img src="https://picsum.photos/200" alt="" class="burgerimg">
    </div>
    <div class="info-container">
      <div>
        <h2>HFC Classic</h2>
        <span class="burger-description">RSPCA Approved chicken, cooked in extra virgin olive oil with dill pickles,
              cos lettuce & egg mayo.</span>
      </div>
      <ul>
        <li class="kj">2800Kj</li>
        <li class="price">$14.50</li>
        <li class="Details">More Details</li>
      </ul>
    </div>
  </div>
  <div class="burger-item">
    <div class="image-container">
      <img src="https://picsum.photos/200" alt="" class="burgerimg">
    </div>
    <div class="info-container">
      <div>
        <h2>HFC Classic</h2>
        <span class="burger-description">RSPCA Approved chicken, cooked in extra virgin olive oil with dill pickles,
              cos lettuce & egg mayo.</span>
      </div>
      <ul>
        <li class="kj">2800Kj</li>
        <li class="price">$14.50</li>
        <li class="Details">More Details</li>
      </ul>
    </div>
  </div>
  <div class="burger-item">
    <div class="image-container">
      <img src="https://picsum.photos/200" alt="" class="burgerimg">
    </div>
    <div class="info-container">
      <div>
        <h2>HFC Classic</h2>
        <span class="burger-description">RSPCA Approved chicken, cooked in extra virgin olive oil with dill pickles,
              cos lettuce & egg mayo.</span>
      </div>
      <ul>
        <li class="kj">2800Kj</li>
        <li class="price">$14.50</li>
        <li class="Details">More Details</li>
      </ul>
    </div>
  </div>
  <div class="burger-item">
    <div class="image-container">
      <img src="https://picsum.photos/200" alt="" class="burgerimg">
    </div>
    <div class="info-container">
      <div>
        <h2>HFC Classic</h2>
        <span class="burger-description">RSPCA Approved chicken, cooked in extra virgin olive oil with dill pickles,
        cos lettuce & egg mayo.</span>
      </div>
      <ul>
        <li class="kj">2800Kj</li>
        <li class="price">$14.50</li>
        <li class="Details">More Details</li>
      </ul>
    </div>
  </div>
</div>

You need to wrap all your content except img in separate div and you need to add flex to your ".burger-item " , and you need to change some styles for your ".burgerimg "

But i suggest you change something , and experiment on your own

Working code :

   <div class="burger-layout">
    <div class="burger-item">
            <div class="wraper">   <!-- new div that wraps all except img -->
        <h2>HFC Classic</h2>
        <span class="burger-description">RSPCA Approved chicken, cooked in extra virgin olive oil with dill pickles,
            cos lettuce & egg mayo.</span>
        <ul>
            <li class="kj">2800Kj</li>
            <li class="price">$14.50</li>
            <li class="Details">More Details</li>
        </ul>
    </div>  <!-- end of ned div -->

        <img src="./tommaso-teloni-o9E5dEiOw_o-unsplash.jpg" alt=""    class="burgerimg">
    </div>


  body {
display: flex; 
justify-content: center;
align-items: center;
min-width: 10vh;

}

.burger-layout{
display: grid;
grid-template-columns: 1fr 1fr;
column-gap: 10px;
row-gap: 10px;
}

.burger-item {
border: 1px grey solid;
border-radius: 10px;
max-width: 537px;
max-height: 210px;

flex-direction: row-reverse;   /* new */  

display: flex;  /* new */   
align-items: center;  /* new */
justify-content: space-around;  /* new */

}


.burgerimg {
display: flex;
display: inline-block;
max-width: 300px;  /* new */
max-height: 300px; /* new */
padding: 10px 10px;

width: 40%;  /* new */
height: 100%;  /* new */ 

}
Related