Reputation: 463
I'm a flexbox beginner. I'm trying to implement a flexbox with different parameters into an already existing flexbox. This is what I got so far. This is what I'm trying to do :
html,
body {
background-color: #ffeead;
margin: 10px;
}
.container>div:nth-child(even) {
background-color: red;
}
.container>div:nth-child(odd) {
background-color: blue;
}
.container {
max-width: 500px;
margin: auto;
border: 5px solid #ffcc5c;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.element {
box-sizing: border-box;
border: 1px solid #edeeee;
width: calc(50% - 5px);
margin: 5px 0px;
height: 200px;
box-shadow: 0 0 5px 0 #edeeee;
border-radius: 5px 5px 5px 5px;
}
.ads {}
.ads_element {
width: calc(25% - 5px);
height: 100px;
background-color: green;
}
<div class="container">
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
<div class="ads">
<div class="ads_element"></div>
<div class="ads_element"></div>
<div class="ads_element"></div>
<div class="ads_element"></div>
</div>
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
</div>
Upvotes: 2
Views: 75
Reputation: 550
This is what you want to do:
HTML
<div class="container">
<div class="element_row">
<div class="element"></div>
<div class="element"></div>
</div>
<div class="element_row">
<div class="element"></div>
<div class="element"></div>
</div>
<div class="ads">
<div class="ads_element"></div>
<div class="ads_element"></div>
<div class="ads_element"></div>
<div class="ads_element"></div>
</div>
<div class="element_row">
<div class="element"></div>
<div class="element"></div>
</div>
<div class="element_row">
<div class="element"></div>
<div class="element"></div>
</div>
</div>
CSS
html, body
{
background-color: #ffeead;
margin: 10px;
}
.container > .element_row > div:nth-child(even)
{
background-color: red;
}
.container > .element_row > div:nth-child(odd)
{
background-color: blue;
}
.container
{
max-width: 500px;
margin: auto;
border: 5px solid #ffcc5c;
display: flex;
flex-flow: column;
}
.element_row{
display:flex;
flex-flow:row;
justify-content: space-between;
}
.element
{
width: 49%;
box-sizing: border-box;
border: 1px solid #edeeee;
margin: 5px 0px;
height: 200px;
box-shadow: 0 0 5px 0 #edeeee;
border-radius: 5px 5px 5px 5px;
}
.ads
{
display: flex;
flex-flow:row;
justify-content: space-evenly;
}
.ads_element
{
width: 22%;
height: 200px;
border: 3px solid red;
}
Upvotes: 1
Reputation: 42370
You can do this without nesting the flexboxes - just adjust the width
and margin
of the ads_element
- see demo below:
html,
body {
background-color: #ffeead;
margin: 10px;
}
.container>div:nth-child(even) {
background-color: red;
}
.container>div:nth-child(odd) {
background-color: blue;
}
.container {
max-width: 500px;
margin: auto;
border: 5px solid #ffcc5c;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.element {
box-sizing: border-box;
border: 1px solid #edeeee;
width: calc(50% - 5px);
margin: 5px 0px;
height: 200px;
box-shadow: 0 0 5px 0 #edeeee;
border-radius: 5px 5px 5px 5px;
}
.ads_element {
width: calc(25% - 15px); /* CHANGED */
height: 100px;
background-color: transparent !important; /* CHANGED */
/* ADDED BELOW */
border: 2px solid red;
margin: 5px;
}
<div class="container">
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
<!-- <div class="ads"> -->
<div class="ads_element"></div>
<div class="ads_element"></div>
<div class="ads_element"></div>
<div class="ads_element"></div>
<!-- </div> -->
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
</div>
If you don't want to change your markup, you can just make the ads
a flexbox too - see demo below:
html,
body {
background-color: #ffeead;
margin: 10px;
}
.container>div:nth-child(even) {
background-color: red;
}
.container>div:nth-child(odd) {
background-color: blue;
}
.container {
max-width: 500px;
margin: auto;
border: 5px solid #ffcc5c;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.element {
box-sizing: border-box;
border: 1px solid #edeeee;
width: calc(50% - 5px);
margin: 5px 0px;
height: 200px;
box-shadow: 0 0 5px 0 #edeeee;
border-radius: 5px 5px 5px 5px;
}
.ads { /* ADDED */
display: flex;
width: 100%;
background: transparent !important;
}
.ads_element {
width: calc(25% - 5px);
height: 100px;
/* background-color: green; */
/* ADDED BELOW */
border: 2px solid red;
margin: 5px;
}
<div class="container">
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
<div class="ads">
<div class="ads_element"></div>
<div class="ads_element"></div>
<div class="ads_element"></div>
<div class="ads_element"></div>
</div>
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
</div>
Upvotes: 2
Reputation: 5544
Changes css of .ads
and .ads_element
below using display:flex and width:100% and background-color overwrite
html, body
{
background-color: #ffeead;
margin: 10px;
}
.container > div:nth-child(even)
{
background-color: red;
}
.container > div:nth-child(odd)
{
background-color: blue;
}
.container
{
max-width: 500px;
margin: auto;
border: 5px solid #ffcc5c;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.element
{
box-sizing: border-box;
border: 1px solid #edeeee;
width: calc(50% - 5px);
margin: 5px 0px;
height: 200px;
box-shadow: 0 0 5px 0 #edeeee;
border-radius: 5px 5px 5px 5px;
}
.container > div:nth-child(odd).ads
{
width: 100%;
display: flex;
background-color: transparent;
}
.ads_element
{
width: calc(25% - 5px);
height: 200px;
border:3px solid red;
background-color: transparent;
margin: 0px 5px;
}
<div class="container">
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
<div class="ads">
<div class="ads_element"></div>
<div class="ads_element"></div>
<div class="ads_element"></div>
<div class="ads_element"></div>
</div>
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
</div>
Upvotes: 1
Reputation: 2832
I filled in the css properties of ads class
.ads
{
height: 100px;
width: 100%;
display: flex;
align-items: center;
}
Check the working fiddle here https://jsfiddle.net/L5egv0ah/1/
Upvotes: 1
Reputation: 415
you need set the width and height of ads
, otherwise this tag and all inside it will have 0 width and 0 height by default
.ads
{
width: 100%;
height: 100%;
display: flex;
}
.ads_element
{
width: calc(25% - 5px);
height: 100px;
background-color:green;
margin: 10px;
}
append it in your code for see the result
Upvotes: 1