CSS: Nutze ich hier display flex or ein Grid System?
Mal angenommen ihr programmiert das Design nach. Wie geht ihr vor?
Ich dachte daran, es mit display flex zu machen. Die beiden Divs in der Mitte sind flex-direction: row; und die äußeren sind flex-direction: column;
Mag auch sein, dass das hier Schwachsinn ist und man alles per display: grid; steuert.
Wie würdet ihr es machen?
4 Antworten
Guten Abend,
Ich persönlich arbeite relativ gerne mit Flexbox.
Daher würde ich wie folgt vorgehen:
- Einen Hauptcontainer erstellen
- im Hauptcontainer 3 weitere Container in der Reihe nebeneinander anordnen (der linke Container enthält die linke Card, der mittlere die beiden mittleren sowie der rechte die rechte Card)
Der Hauptcontainer ist für die vertikale Zentrierung der Cards verantwortlich, daher gilt unter Zuhilfenahme des Flexbox-Systems:
#main-container {
display: flex;
align-items: center;
}
Ich habe es nicht ausprobiert, aber damit sollte es funktionieren.
LG
Das klingt wunderbar, so werde ich's machen.
Großen Dank! :)
HTML (Grundgerüst):
<section>
<header>
<h2>section title</h2>
<p>some text...</p>
</header>
<div class="d-flex flex-ai-c">
<div class="column">
<article class="card">...</article>
</div>
<div class="column">
<article class="card">...</article>
<article class="card">...</article>
</div>
<div class="column">
<article class="card">...</article>
</div>
</div>
</section>
HTML (Card):
<article class="card card--modifier">
<div class="box">
<h3 class="card__title">title</h3>
<p>some text...</p>
</div>
</article>
CSS:
:root {
--clr-supervisor: hsl(175, 35%, 95%);
--clr-team-builder: hsl(350, 70%, 95%);
--clr-karma: hsl( 38, 70%, 95%);
--clr-calculator: hsl(205, 65%, 95%);
}
*, *::before, *::after {
box-sizing: inherit;
padding: 0;
margin: 0;
}
html {
font-size: 100%;
box-sizing: border-box;
}
body {
min-height: 100vh;
line-height: 1.5;
}
/* helper classes */
.d-flex {
display: flex;
gap: var(--gap, 1rem);
}
.flex-ai-c {
align-items: center;
}
/* cards */
.card {
width: 320px;
height: 230px;
position: relative;
overflow: hidden;
background-color: var(--bg-card, #fff);
box-shadow: 0 8px 15px hsl(205 5% 90% / 1);
border-radius: 10px;
transform: translateY(0rem);
transition: all 280ms ease;
}
.card:not(:last-child) {
margin-bottom: var(--gap, 1rem);
}
.card:hover {
transform: translateY(-0.25rem);
box-shadow: 0 15px 15px hsl(205 5% 87% / 1);
}
.card::before {
content: "";
width: 100%;
height: 5px;
position: absolute;
top: 0;
background-color: var(--card-top-border, transparent);
}
.card--supervisor::before {
--card-top-border: var(--clr-supervisor);
}
.card--team-builder::before {
--card-top-border: var(--clr-team-builder);
}
.card--supervisor::karma {
--card-top-border: var(--clr-karma);
}
.card--calculator::before {
--card-top-border: var(--clr-calculator);
}
.box {
margin: 1.2rem 1.45rem;
}
LG medmonk
Da gibt es kein das oder das. Man kann und sollte beides nutzen. CSS Grid ist besonders gut fürs grobe Layout wie Header, Sidebars, Main und Footer. Flexbox hat dann bei allen enthaltenen Elementen seine Stärken und wird meist für die Inhalte und UI-Elemente verwendet.
Mal angenommen ihr programmiert das Design nach. Wie geht ihr vor?
so:
<!DOCTYPE html>
<title>flex box</title>
<style>
body {
background:#eee
}
main {
display:flex;
flex-wrap:wrap;
justify-content:center;
align-items:center;
}
section {
width:33.3%;
}
article {
background:white;
padding:1em;
margin:1em
}
</style>
<main>
<section>
<article>
<h2>Supervisor</h2>
<p> ... Text ...</p>
</article>
</section>
<section>
<article>
<h2>Team Builder</h2>
<p> ... Text ...</p>
</article>
<article>
<h2>Karma</h2>
<p> ... Text ...</p>
</article>
</section>
<section>
<article>
<h2>Calculator</h2>
<p> ... Text ...</p>
</article>
</section>
</main>
Alex