2017-02-13 3 views
0

Ich versuche derzeit, ein Gitter-Layout mit HTML/CSS nur aus verschiedenen Gründen zu erstellen (ich kenne Bootstrap usw. aber das ist keine Option in diesem Kontext & und ich kann Markup-Elemente nicht hinzufügen).CSS nur Gitter Layout

Ich habe den folgenden Code (div-Container mit jedem Mal, wenn ein Titel, der eine ul mit li hat):

<div> 
    <h3>title here</h3> 
    <ul> 
    <li>list-item</li> 
    <li>list-item</li> 
    <li>list-item</li> 
    </ul> 
    <h3>title 2 here</h3> 
    <ul> 
    <li>list-item</li> 
    <li>list-item</li> 
    </ul> 
    <h3>title 3 here</h3> 
    <ul> 
    <li>list-item</li> 
    </ul> 
</div> 

Nun möchte Ich mag Lage sein, ein Raster-Layout zu erstellen. Bedeutung z.B. Jeder Titel ist 33% breit, so dass ich 3 nebeneinander haben kann.

Problem ist, dass es ein ul zwischen jedem Mal gibt. Also gibt es eine mögliche Floating-Lösung, so dass ich als Ergebnis ein Grid-Layout haben kann.

TITLE - TITLE - TITLE 
    ul   ul   ul 

-

h3 { 
    width: 33%; 
    float: left; 
    display: inline-block; 
} 

ul{ 
    float: left; 
    width: 33%; 
    display: inline-block; 
} 

und all dies ohne einen Rahmen.

Vielen Dank im Voraus

+0

Wenn Sie feste Größen einstellen können, ist es möglich (ich werde es versuchen), wenn nicht, dann muss es einen Wrapper um jede Gruppe geben ... oder Sie benötigen ein Skript, das wird etwas schwierig zu finden sein. – LGSon

+0

Feste Größen sollten OK sein, ich kann sie immer noch mit CSS-only-Ansatz bearbeiten, indem ich mediaqueries benutze – Kemagezien

+0

Die Anzahl der Gruppen muss auch bekannt sein, ist das möglich? – LGSon

Antwort

1

Hier ist ein Beispiel unter Verwendung des vorhandenen Markup

Sie sie von oben nach unten fließen beachten, nicht links nach rechts.

div { 
 
    display: flex; 
 
    flex-direction: column; 
 
    flex-wrap: wrap; 
 
    height: 220px;    /* 30px + 80px times 2 row */ 
 
} 
 
div > * { 
 
    width: 33.33%; 
 
    box-sizing: border-box; 
 
} 
 

 
h3 { 
 
    margin: 0; 
 
    height: 30px; 
 
} 
 
ul { 
 
    margin: 0; 
 
    height: 80px; 
 
}
<div> 
 
    <h3>title here</h3> 
 
    <ul> 
 
    <li>list-item</li> 
 
    <li>list-item</li> 
 
    <li>list-item</li> 
 
    </ul> 
 
    <h3>title 2 here</h3> 
 
    <ul> 
 
    <li>list-item</li> 
 
    <li>list-item</li> 
 
    </ul> 
 
    <h3>title 3 here</h3> 
 
    <ul> 
 
    <li>list-item</li> 
 
    </ul> 
 
    <h3>title 2 here</h3> 
 
    <ul> 
 
    <li>list-item</li> 
 
    <li>list-item</li> 
 
    </ul> 
 
    <h3>title 3 here</h3> 
 
    <ul> 
 
    <li>list-item</li> 
 
    </ul> 
 
</div>


Aktualisiert basierend auf einem Kommentar

Es gibt eine Möglichkeit, eine von links nach rechts zu bauen, visuell zu tun, unter Verwendung der order Eigenschaft

div { 
 
    display: flex; 
 
    flex-direction: column; 
 
    flex-wrap: wrap; 
 
    height: 220px;    /* 30px + 80px times 2 row */ 
 
} 
 
div > * { 
 
    width: 33.33%; 
 
    box-sizing: border-box; 
 
} 
 
h3 { 
 
    margin: 0; 
 
    height: 30px; 
 
} 
 
ul { 
 
    margin: 0; 
 
    height: 80px; 
 
} 
 
div :nth-child(3), 
 
div :nth-child(4) { 
 
    order: 2; 
 
} 
 
div :nth-child(5), 
 
div :nth-child(6) { 
 
    order: 4; 
 
} 
 
div :nth-child(7), 
 
div :nth-child(8) { 
 
    order: 1; 
 
} 
 
div :nth-child(9), 
 
div :nth-child(10) { 
 
    order: 3; 
 
}
<div> 
 
    <h3>title 1 here</h3> 
 
    <ul> 
 
    <li>1 list-item</li> 
 
    <li>1 list-item</li> 
 
    <li>1 list-item</li> 
 
    </ul> 
 
    <h3>title 2 here</h3> 
 
    <ul> 
 
    <li>2 list-item</li> 
 
    <li>2 list-item</li> 
 
    </ul> 
 
    <h3>title 3 here</h3> 
 
    <ul> 
 
    <li>3 list-item</li> 
 
    </ul> 
 
    <h3>title 4 here</h3> 
 
    <ul> 
 
    <li>4 list-item</li> 
 
    <li>4 list-item</li> 
 
    </ul> 
 
    <h3>title 5 here</h3> 
 
    <ul> 
 
    <li>5 list-item</li> 
 
    </ul> 
 
</div>

+0

Danke, arbeiten wie ein Charme! – Kemagezien

+0

Jede Chance, dass sie nicht von oben nach unten gebaut wird, sondern links-rechts gebaut wird. – Kemagezien

+0

@Kemagezien Werde heute später nachschauen ...Lassen Sie es wissen – LGSon

0

Sie meinen so etwas? https://jsfiddle.net/jw22Lqgo/

h3 { 
display: inline-block; 
} 

ul{ 
display: block; 
} 

.col { 
width: 32%; 
border: 1px solid red; 
display: inline-block; 
} 

.container { 
width: 960px; 
} 
+0

Ich habe Breite: 32% und nicht 33%, weil wenn Sie den Rand hinzufügen, nimmt es etwas mehr Platz und es passt nicht die ganze Breite Container. – DevMoutarde

+0

Dies ist in der Tat, was ich versuche zu erreichen, aber aber ich bin nicht in der Lage, einen 'col' um jeden Satz von h3 und ul hinzuzufügen. – Kemagezien

+0

Ooh, Sie können keine Markups hinzufügen? dang, ich versuche dann eine andere Lösung zu finden. Aber ich fürchte, Sie können diese extra .col nicht loswerden, wenn Sie planen, diese zu trennen ... – DevMoutarde