Mam*_*thé 5 html css css3 flexbox
我正在尝试通过遵守此规则在每行中创建一个包含不同元素的flexbox:
这是我的代码
.blocWrapper {
border: 1px solid red;
display: flex;
justify-content: center;
align-items: center;
}
.blocWrapper .blocContainer {
display: flex;
justify-content: center;
align-items: center;
flex-wrap: wrap;
border: 1px solid black;
width: 65%;
padding-top: 45px;
}
.blocWrapper .blocContainer .bloc {
width: 300px;
height: 180px;
box-shadow: 0 0 3px rgba(0, 0, 0, .2);
margin: auto;
text-align: center;
font-family: raleway;
word-break: break-word;
display: flex;
align-items: center;
flex-direction: colomn;
}
.blocWrapper .blocContainer .blocTitre {
font-size: 20px;
font-weight: 700;
color: blue;
margin: 24px;
}Run Code Online (Sandbox Code Playgroud)
<div class="blocWrapper">
<article class="blocContainer">
<div class=" bloc">
<div class="blocTitre">bloc droit</div>
<div id="blocContenu"> contenu droit </div>
<div id="blocLien"> lien</div>
</div>
<div class=" bloc">
<div class="blocTitre">bloc simulateur</div>
<div id="blocContenu"> contenu simulateur </div>
<div id="blocLien"> lien</div>
</div>
<div class=" bloc">
<div class="blocTitre">bloc activite professionnelle</div>
<div id="blocContenu"> contenu activite professionnelle </div>
<div id="blocLien"> lien</div>
</div>
<div class=" bloc">
<div class="blocTitre">bloc activite professionnelle</div>
<div id="blocContenu"> contenu activite professionnelle </div>
<div id="blocLien"> lien</div>
</div>
<div class=" bloc">
<div class="blocTitre">bloc activite professionnelle</div>
<div id="blocContenu"> contenu activite professionnelle </div>
<div id="blocLien"> lien</div>
</div>
</article>
</div>Run Code Online (Sandbox Code Playgroud)
由于Flexbox没有一个可以设置项目包装方式的属性,因此我在这里使用一个伪元素来实现相同的目的。
.blocWrapper .blocContainer::before {
content: '';
width: 100%;
order: 1;
}
Run Code Online (Sandbox Code Playgroud)
它所做的只是简单地占用整个宽度,并将迫使前后的任何元素单独排成一行。有了order我们,我们将其定位在最后。
然后用一个聪明的nth-child/ nth-last-child规则,我们可以计算项目的数量,如果为4,则除第一个2之外的所有项目都使用,在order: 2,之后进行定位::before,并在只有4的情况下将它们按2比2排列。
.blocWrapper .blocContainer .bloc:nth-child(2):nth-last-child(3) ~ .bloc {
order: 2;
}
Run Code Online (Sandbox Code Playgroud)
这样的工作是,nth-child(2)将选择第二项,如果它也将是末尾的第三项,则我们知道只有4,因此该规则开始执行,并将最后的2移动到伪指令之后。
堆栈片段
.blocWrapper .blocContainer::before {
content: '';
width: 100%;
order: 1;
}
Run Code Online (Sandbox Code Playgroud)
.blocWrapper .blocContainer .bloc:nth-child(2):nth-last-child(3) ~ .bloc {
order: 2;
}
Run Code Online (Sandbox Code Playgroud)
当大于4时,第一行将有3个(如果有足够的可用空间,我将使用最小宽度的额外规则确保此演示具有此属性)
堆栈片段
.blocWrapper {
display: flex;
}
.blocWrapper .blocContainer {
display: flex;
flex-wrap: wrap;
border: 1px solid black;
width: 65%;
padding-top: 45px;
}
.blocWrapper .blocContainer .bloc {
width: 300px;
height: 180px;
box-shadow: 0 0 3px rgba(0, 0, 0, .2);
margin: auto;
text-align: center;
font-family: raleway;
word-break: break-word;
display: flex;
flex-direction: column; /* fixed misspelled value */
}
.blocWrapper .blocContainer .blocTitre {
font-size: 20px;
font-weight: 700;
color: blue;
margin: 24px;
}
/* added rules */
.blocWrapper .blocContainer::before {
content: '';
width: 100%;
order: 1;
}
.blocWrapper .blocContainer .bloc:nth-child(2):nth-last-child(3) ~ .bloc {
order: 2;
}
/* for demo purpose, so 3 items will always fit */
.blocWrapper .blocContainer {
min-width: 900px;
}Run Code Online (Sandbox Code Playgroud)
<div class="blocWrapper">
<article class="blocContainer">
<div class=" bloc">
<div class="blocTitre">bloc droit</div>
<div id="blocContenu"> contenu droit </div>
<div id="blocLien"> lien</div>
</div>
<div class=" bloc">
<div class="blocTitre">bloc simulateur</div>
<div id="blocContenu"> contenu simulateur </div>
<div id="blocLien"> lien</div>
</div>
<div class=" bloc">
<div class="blocTitre">bloc activite professionnelle</div>
<div id="blocContenu"> contenu activite professionnelle </div>
<div id="blocLien"> lien</div>
</div>
<div class=" bloc">
<div class="blocTitre">bloc activite professionnelle</div>
<div id="blocContenu"> contenu activite professionnelle </div>
<div id="blocLien"> lien</div>
</div>
</article>
</div>Run Code Online (Sandbox Code Playgroud)
要组合这样的CSS选择器可能非常强大,并且可以扩展为对项目进行计数,例如在最后一行,如下所示:
或像这样: