Reputation: 124
I want to create a layout like in this using flexbox. I have put my code in the snippet. I want Flex Item 1 to occupy 60% of the flex container width and Flex Item 2 to occupy 40% of the width and Flex Item 3 and 4 to occupy 40% and 60% of the width. I tried using flex-grow on the flex items and it didn't work.
.flex-container1 {
display: flex;
flex-wrap: wrap;
width: 60%;
margin: auto;
background-color: #222;
}
.flex-container1>.flex-item {
flex: 0 0 48%;
}
.flex-item {
margin: 1%;
background-color: #FFFF00;
height: 100px;
}
<div class="container-fluid">
<div class="flex-container1">
<div class="flex-item flex-item1"> <img id="blog-banner" src=""> Flex Item 1 </div>
<div class="flex-item flex-item2"> <img id="blog-banner" src=""> Flex Item 2 </div>
<div class="flex-item flex-item3"> <img id="blog-banner" src=""> Flex Item 3 </div>
<div class="flex-item flex-item4"> <img id="blog-banner" src=""> Flex Item 4 </div>
</div>
</div>
Upvotes: 1
Views: 6206
Reputation: 124
I switched to grid instead of flexbox as it is easier to create what I want using grid. I used the code from an answer here but now I can't seem to find the answer for some reason and I don't remember who posted it and I also wanted an explanation about what grid-template-columns: repeat(3, 1fr);
, grid-column: 1 / span 2;
and grid-column: 2 / span 2;
actually do. I also wanted to know how I can decrease the height of my grid container.
.grid-container1 {
display: grid;
width: 60%;
margin: auto;
grid-template-columns: repeat(3, 1fr);
grid-gap: 6px;
margin: 5% auto;
background-color: #FFFF00;
}
.grid-item {
background-color: #FF0000;
color: #fff;
}
.grid-item-1 {
grid-column: 1 / span 2;
}
.grid-item-4 {
grid-column: 2 / span 2;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>The Aasha Initiative</title>
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/bootstrap.css">
<link rel="stylesheet" href="css/fontawesome.css">
</head>
<body>
<div class="grid-container1">
<div class="grid-item grid-item-1"><img src="">Grid Item-1</div>
<div class="grid-item grid-item-2"><img src="">Grid Item-2</div>
<div class="grid-item grid-item-3"><img src="">Grid Item-3</div>
<div class="grid-item grid-item-4"><img src="">Grid Item-4</div>
</div>
</div>
</body>
</html>
Upvotes: 0
Reputation: 2155
for layout like this I will suggest you to use grid
instead.
.container {
margin: 0 auto;
max-width: 960px;
width: 100%;
}
.grid-container {
display: grid;
grid-template-columns: 2fr 1fr 2fr;
grid-template-rows: 1fr 1fr;
gap: 10px;
}
.grid-item {
padding: 10px;
display: flex;
justify-content: center;
align-items: center;
background-color: lime;
}
.grid-item:nth-child(4n-3) {
grid-column-start: 1;
grid-column-end: 3;
}
.grid-item:nth-child(4n-2) {
grid-column-start: 3;
grid-column-end: 4;
}
.grid-item:nth-child(4n-1) {
grid-column-start: 1;
grid-column-end: 2;
}
.grid-item:nth-child(4n) {
grid-column-start: 2;
grid-column-end: 4;
}
<div class="container">
<div class="grid-container">
<div class="grid-item"> Grid Item 1 </div>
<div class="grid-item"> Grid Item 2 </div>
<div class="grid-item"> Grid Item 3 </div>
<div class="grid-item"> Grid Item 4 </div>
<div class="grid-item"> Grid Item 5 </div>
<div class="grid-item"> Grid Item 6 </div>
<div class="grid-item"> Grid Item 7 </div>
<div class="grid-item"> Grid Item 8 </div>
</div>
</div>
Upvotes: 0
Reputation: 14891
You could use flex-basis
on this
flex-basis
CSS property sets the initial main size of a flex item
Just to notice, because you use 1% for margin, so both left and right of an item will already take of 2%, so 40% will turn out to be 38%, while 60% will turn out to be 58%
But as a suggestion, in my opinion, use grid
on this will be less painful
.flex-container1 {
display: flex;
flex-wrap: wrap;
width: 60%;
margin: auto;
background-color: #222;
}
.flex-item {
margin: 1%;
background-color: #FFFF00;
height: 100px;
}
.flex-item1, .flex-item4 {
flex-basis: 38%;
}
.flex-item2, .flex-item3 {
flex-basis: 58%;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
</head>
<body>
<div class="container-fluid">
<div class="flex-container1">
<div class="flex-item flex-item1"> <img id="blog-banner" src=""> Flex Item 1 </div>
<div class="flex-item flex-item2"> <img id="blog-banner" src=""> Flex Item 2 </div>
<div class="flex-item flex-item3"> <img id="blog-banner" src=""> Flex Item 3 </div>
<div class="flex-item flex-item4"> <img id="blog-banner" src=""> Flex Item 4 </div>
</div>
</div>
</body>
</html>
Upvotes: 1