Comment puis-je créer le div supérieur de la longueur horizontale complète du conteneur principal, tout en conservant les deux div suivants, .left
et .right
en flex pour chacun autre?
<html> <body> <div class="main"> <div class="top"> <h1>top</h1> </div> <div class="left"> <h1>left</h1> </div> <div class="right"> <h1>right</h1> </div> </div> </body> </html>
.main { border: 1px solid red; display: inline-flex; } .main div.top { border: 1px solid orange; width: auto; display: inline-block; } .main div.left { border: 1px solid blue; } .main div.right { border: 1px solid green; }
6 Réponses :
Vous pouvez utiliser deux div
pour créer des sections supplémentaires.
<html> <body> <div class="main"> <div class="main__section1"> <div class="top"> <h1>top</h1> </div> </div> <div class="main__section2"> <div class="left"> <h1>left</h1> </div> <div class="right"> <h1>right</h1> </div> </div> </div> </body> </html>
.main { border: 1px solid red; display: flex; flex-direction:column; } .main div.top { border: 1px solid orange; width:auto; } .main div.left { border: 1px solid blue; flex:1 } .main div.right { border: 1px solid green; flex:1 } .main__section2 { display:flex }
Vous pouvez essayer quelque chose comme ceci:
Je viens d'ajouter 2 div
s supplémentaires si ce n'est pas un problème?
<html> <body> <div id="MainDiv"> <div class="main"> <div class="top"> <h1>top</h1> </div> <div id="lower"> <div class="left"> <h1>left</h1> </div> <div class="right"> <h1>right</h1> </div> </div> </div> </div> </body> </html>
#MainDiv { width: 200px; border: 1px solid red; } .main { width: auto; display: flex; flex-direction: column; } #lower { display: flex; flex-direction: row; } .left, .right { width: 100px; border: 1px solid black; }
Une autre façon de faire cela est d'utiliser la grille:
<div class="main"> <div class="top"> <h1>top</h1> </div> <div class="left"> <h1>left</h1> </div> <div class="right"> <h1>right</h1> </div> </div>
.main { border: 1px solid red; display: grid; grid-template-columns: 1fr 1fr; grid-gap: 4px; padding: 4px; } .main .top { border: 1px solid orange; grid-column: 1/3; } .main .left { border: 1px solid blue; } .main .right { border: 1px solid green; }
.main { display: grid; grid-template-columns: 1fr 1fr; } .main .top { grid-column: 1/3; }
Utilisez display: flex;
et flex-wrap: wrap
sur le conteneur parent, 100% de largeur sur le premier enfant et flex-grow: 1 sur les autres enfants, ou utilisez également des largeurs en pourcentage sur les deuxième et troisième DIV.
<html>
<body>
<div class="main">
<div class="top"> <h1>top</h1>
</div>
<div class="left"> <h1>left</h1>
</div>
<div class="right"> <h1>right</h1>
</div>
</div>
</body>
</html>
* {
box-sizing: border-box;
}
.main {
border: 1px solid red;
display: flex;
flex-wrap: wrap;
}
.main div.top {
border: 1px solid orange;
width:100%;
}
.main div.left {
border: 1px solid blue;
width: 40%;
}
.main div.right {
border: 1px solid green;
width: 60%;
}
.main { border: 1px solid red; display: grid; grid-template-columns: 1fr 1fr; } .main div .top { border: 1px solid orange; width:100%; grid-column: 1 / 2; grid-row: 1; } .main div.left { border: 1px solid blue; grid-column: 2; grid-row: 2; } .main div.right { border: 1px solid green; width: 100%; grid-column: 1; grid-row: 2; }
N'importe quelle largeur de .gauche et .right
<div class="main"> <div class="top"> <h1>top</h1> </div> <div class="left"> <h1>left 11111111</h1> </div> <div class="right"> <h1>right</h1> </div> </div>
.main { border: 1px solid red; display: flex; flex-wrap: wrap; } .main div.top { border: 1px solid orange; width: auto; display: inline-block; flex: 1 1 100%; } .main div.left { border: 1px solid blue; flex: 1 1 auto; } .main div.right { border: 1px solid green; flex: 1 1 auto; }
Êtes-vous prêt à ajouter plus
div code> pour y parvenir? Ou vous voulez ce comportement tout en maintenant le même nombre d'éléments
@UtsavPatel Je suis ouvert à l'ajout de nouvelles div.