Fazer um item flexível agir como um bloco de visualização [duplicado]
demonstração do excerto de códigos:
#container {
display: flex;
}
#menu {
display: flex;
}
#menu p {
margin: 0;
padding: 8px;
padding-bottom: 0;
}
.otherDivs {
height: 700px;
width: 10%;
background-color: grey;
margin-right: 5px;
}
<div id="container">
<div id="menu">
<p>Btn</p>
<p>Btn</p>
<p>Btn</p>
</div>
<div class="otherDivs"></div>
<div class="otherDivs"></div>
<div class="otherDivs"></div>
</div>
13
Author: Temani Afif, 2017-12-15
4 answers
Você deve adicionar um flex-basis: 100%
a #menu
, e permitir que os itens cinzentos para ir para uma nova linha, aplicando flex-wrap: wrap;
para #container
:
#container {
display: flex;
flex-wrap: wrap;
}
#menu {
display: flex;
flex-basis: 100%;
}
#menu p {
margin: 0;
padding: 8px;
padding-bottom: 0;
}
.otherDivs {
height: 700px;
width: 10%;
background-color: grey;
margin-right: 5px;
}
<div id="container">
<div id="menu">
<p>Btn</p>
<p>Btn</p>
<p>Btn</p>
</div>
<div class="otherDivs"></div>
<div class="otherDivs"></div>
<div class="otherDivs"></div>
</div>
18
Author: Itay Ganor, 2017-12-15 22:28:23
Se o objectivo é fazer com que um item flex ocupe uma linha inteira, então configure-o para flex-basis: 100%
, e ACTIVE wrap
no contentor. Isto faz com que o item de largura completa force itens subsequentes para a próxima linha.
#container {
display: flex;
flex-wrap: wrap; /* NEW */
}
#menu {
flex: 0 0 100%; /* NEW */
display: flex;
}
#menu p {
margin: 0;
padding: 8px;
padding-bottom: 0;
}
.otherDivs {
height: 700px;
width: 10%;
background-color: grey;
margin-right: 5px;
}
<div id="container">
<div id="menu">
<p>Btn</p>
<p>Btn</p>
<p>Btn</p>
</div>
<div class="otherDivs"></div>
<div class="otherDivs"></div>
<div class="otherDivs"></div>
</div>
2
Author: Michael Benjamin, 2017-12-15 22:28:56
Você pode adicionar uma grande margem-direita e usar a rolha de voo no recipiente (como uma alternativa à solução comum usando width:100%
ou flex:0 0 100%
).
Com esta solução você também pode especificar uma largura e outro elemento irá sempre para a próxima linha (como fazemos com um elemento de bloco).
#container
{
display: flex;
flex-wrap:wrap;
}
#menu
{
display: flex;
margin-right:100%;
/* To illustrate the add of width*/
width:200px;
border:1px solid;
/* */
}
#menu p
{
margin: 0;
padding: 8px;
padding-bottom: 0;
}
.otherDivs
{
height: 700px;
width: 10%;
background-color: grey;
margin-right: 5px;
}
<div id="container">
<div id="menu">
<p>Btn</p>
<p>Btn</p>
<p>Btn</p>
</div>
<div class="otherDivs"></div>
<div class="otherDivs"></div>
<div class="otherDivs"></div>
</div>
2
Author: Temani Afif, 2017-12-15 23:51:06
Sugiro adicionar uma classe como"break-here"
#container
{
display: flex;
flex-wrap: wrap;
}
#menu
{
display: flex;
flex-grow: 1;
}
#menu p
{
margin: 0;
padding: 8px;
padding-bottom: 0;
}
.otherDivs
{
width: 100%;
height: 700px;
width: 10%;
background-color: grey;
margin-right: 5px;
}
.break-here {
flex-basis: 100%;
}
<div id="container">
<div id="menu">
<p>Btn</p>
<p>Btn</p>
<p>Btn</p>
</div>
<span class="break-here"></span>
<div class="otherDivs"></div>
<div class="otherDivs"></div>
<div class="otherDivs"></div>
</div>
0
Author: ChiefAlu, 2017-12-15 22:42:59