mstf dmr
mstf dmr

Reputation: 37

Bootstrap Responsive Cards

I am trying to learn flexbox. I want to design responsive card with Bootstrap. Of the 4 cards shown in the picture, 2 should appear on the bottom and the other two on the top, but on phones they should all be on the bottom. I tried something but didn't work. What should i do?

enter image description here

Thanks.

.card{
    display: flex;
    flex-wrap: wrap;
}



@media (max-width: 500px) {
   .card{
    flex-direction: row;
  }
}
<!DOCTYPE html>
<html>
<head>
  <title>A</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
  <link rel="stylesheet" type="text/css" href="style.css">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>



<div class="container" style="margin-top: 50px;">
    <div class="card-deck">
        <div class="card mb-4">
            <img class="card-img-top img-fluid" src="https://via.placeholder.com/500x280" alt="Card image cap">
            <div class="card-body">
                <h4 class="card-title">1 Card title</h4>
                <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
                <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
            </div>
        </div>
        <div class="card mb-4">
            <img class="card-img-top img-fluid" src="https://via.placeholder.com/500x280" alt="Card image cap">
            <div class="card-body">
                <h4 class="card-title">2 Card title</h4>
                <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
                <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
            </div>
        </div>
        <div class="w-100 d-none d-sm-block d-md-none"><!-- wrap every 2 on sm--></div>


        <div class="card mb-4">
            <img class="card-img-top img-fluid" src="https://via.placeholder.com/500x280" alt="Card image cap">
            <div class="card-body">
                <h4 class="card-title">3 Card title</h4>
                <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
                <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
            </div>
        </div>

        <div class="w-100 d-none d-md-block d-lg-none"><!-- wrap every 3 on md--></div>
        <div class="card mb-4">
            <img class="card-img-top img-fluid" src="https://via.placeholder.com/500x280" alt="Card image cap">
            <div class="card-body">
                <h4 class="card-title">4 Card title</h4>
                <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
                <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
            </div>
        </div>
        

    </div>
</div>








<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-+YQ4JLhjyBLPDQt//I+STsc9iw4uQqACwlvpslubQzn4u2UU2UFM80nGisd026JF" crossorigin="anonymous"></script>
</body>
</html>

Upvotes: 3

Views: 3869

Answers (4)

mmerle
mmerle

Reputation: 595

With Boostrap 5 in order to use responsive cards, you can use row-cols-md-2. You can change row-cols-md-2 to row-cols-md-4 for instance if you need 4 cards in a row on big screens.

<!doctype html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <title>Boostrap responsive cards</title>
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>

</head>

<body>
<div class="row row-cols-1 row-cols-md-2 g-4">

                <div class="col">
                     <div class="card h-100">
                        <div class="card-body">
                            <h5 class="card-title">Card 1</h5>
                            <p class="card-text">Text 1</p>
                        </div>
                    </div>
                </div>

                <div class="col">
                    <div class="card h-100">
                        <div class="card-body">
                            <h5 class="card-title">Card 2</h5>
                            <p class="card-text">Text 2</p>
                        </div>
                        <ul class="list-group list-group-flush">
                            <li class="list-group-item">Exemple of list item</li>
                            <li class="list-group-item">Another one</li>
                        </ul>
                        <div class="card-footer">
                            <small class="text-muted">A footer</small>
                        </div>
                    </div>
                </div>

                <div class="col">
                    <div class="card h-100">
                        <div class="card-body">
                            <h5 class="card-title">Card 3</h5>
                            <p class="card-text">Text 3</p>
                        </div>
                    </div>

                </div>
                <div class="col">
                    <div class="card h-100">
                        <div class="card-body">
                            <h5 class="card-title">Card 4</h5>
                            <p class="card-text">Text 4</p>
                        </div>
                    </div>
                </div>
</div>

Upvotes: 0

Arun Guru
Arun Guru

Reputation: 1

**Try This**

<div class="card" style="width: 18rem;">
    <div class="card-body">
    <h5 class="card-title">Card title</h5>
    <h6 class="card-subtitle mb-2 text-muted">Card subtitle</h6>
     <p class="card-text">Some quick example text to build on the card title and 
       make up the bulk of the card's content.</p>
      <a href="#" class="card-link">Card link</a>
      <a href="#" class="card-link">Another link</a>
     </div>
</div>

Upvotes: -1

Amini
Amini

Reputation: 1792

  1. Use col to make the cards responsive and don't forget to add .d-flex .flex-wrap to the container.
  2. col-12 col-md-6 col-lg-3 are the layout you can use for it. col-12 is mobile first

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">

<section class='container d-flex flex-wrap border p-2'>
  <article class='card col-12 col-md-6 col-lg-3'>
    <img src="https://picsum.photos/200/200">
    <section class='card-title'>Lorem Ipsum</section>
  </article>
  <article class='card col-12 col-md-6 col-lg-3'>
    <img src="https://picsum.photos/200/200">
    <section class='card-title'>Lorem Ipsum</section>
  </article>
  <article class='card col-12 col-md-6 col-lg-3'>
    <img src="https://picsum.photos/200/200">
    <section class='card-title'>Lorem Ipsum</section>
  </article>
  <article class='card col-12 col-md-6 col-lg-3'>
    <img src="https://picsum.photos/200/200">
    <section class='card-title'>Lorem Ipsum</section>
  </article>
</section>

Upvotes: 2

Ahmad Akel Omar
Ahmad Akel Omar

Reputation: 347

you should use Grid System to split screen as you want

and your code after implement this approach : 2 image in each row

<div class="container">
  <div class="row">
    <div class="col">
           <div class="card mb-4">
            <img class="card-img-top img-fluid" src="https://via.placeholder.com/500x280" alt="Card image cap">
            <div class="card-body">
                <h4 class="card-title">1 Card title</h4>
                <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
                <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
            </div>
        </div>
    </div>
    <div class="col">
            <div class="card mb-4">
            <img class="card-img-top img-fluid" src="https://via.placeholder.com/500x280" alt="Card image cap">
            <div class="card-body">
                <h4 class="card-title">2 Card title</h4>
                <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
                <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
            </div>
        </div>
        <div class="w-100 d-none d-sm-block d-md-none"><!-- wrap every 2 on sm--></div>

    </div>
    <div class="w-100"></div>
    <div class="col">
            <div class="card mb-4">
            <img class="card-img-top img-fluid" src="https://via.placeholder.com/500x280" alt="Card image cap">
            <div class="card-body">
                <h4 class="card-title">3 Card title</h4>
                <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
                <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
            </div>
        </div>
    </div>
    <div class="col">
     <div class="w-100 d-none d-md-block d-lg-none"><!-- wrap every 3 on md--></div>
        <div class="card mb-4">
            <img class="card-img-top img-fluid" src="https://via.placeholder.com/500x280" alt="Card image cap">
            <div class="card-body">
                <h4 class="card-title">4 Card title</h4>
                <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
                <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
            </div>
        </div>
    </div>
  </div>
</div>

Upvotes: 0

Related Questions