2017-09-04 5 views
1

Ich habe ein Problem mit Bootstrap 4 Spalten Höhe und vertikale Ausrichtung. Hier ist ein JSFiddle mit dem Problem.Bootstrap 4 Spalten vertikal zentrieren und die gleiche Höhe beibehalten

Ich muss ein Layout mit Elementen erstellen, in Desktop sind sie alle in der gleichen Zeile, auf Mobilgeräten erhalten wir zwei Zeilen. All das ist mit Grenzen angetroffen.

Das Problem ist, dass ich es nicht schaffen kann, die Höhe der Spalten zu halten, wenn ich ihren Inhalt vertikal zentrieren möchte. Ohne hinzugefügte Klassen haben die Spalten die gleiche Höhe, aber der Inhalt ist nach oben zentriert. Nach Suchen fand ich die align-items-center, die meine Spalten zentrieren, aber die Höhe bleibt nicht. Das bricht mein Border-Layout.

Ich habe auch versucht, die my-auto, align-self-center Klassen hinzuzufügen, aber ohne Erfolg.

.why-choose-warranty { 
 
    width: 100%; 
 
    height: 100%; 
 
    background-color: #f5f3ef; 
 
    color: #11155e; 
 
    padding: 1rem; 
 
} 
 

 
.why-choose-warranty .row { 
 
    padding: 1rem; 
 
} 
 

 
.why-choose-warranty .row div { 
 
    justify-content: center; 
 
} 
 

 

 
/* Small screens (mobiles) */ 
 

 
@media screen and (max-width: 992px) { 
 
    .why-choose-warranty .row { 
 
    background-color: white; 
 
    border-radius: .5rem; 
 
    } 
 
    .why-choose-warranty img { 
 
    max-width: 40%; 
 
    max-height: 40%; 
 
    } 
 
    .why-choose-warranty .row div:nth-child(1), 
 
    .why-choose-warranty .row div:nth-child(2) { 
 
    border-right: 1px solid #d7d5d1; 
 
    border-bottom: 1px solid #d7d5d1; 
 
    } 
 
    .why-choose-warranty .row div:nth-child(3) { 
 
    border-bottom: 1px solid #d7d5d1; 
 
    } 
 
    .why-choose-warranty .row div:nth-child(4), 
 
    .why-choose-warranty .row div:nth-child(5) { 
 
    border-right: 1px solid #d7d5d1; 
 
    } 
 
} 
 

 

 
/* Big screens (desktops) */ 
 

 
@media screen and (min-width: 992px) { 
 
    .why-choose-warranty img { 
 
    max-width: 60%; 
 
    max-height: 60%; 
 
    } 
 
    .why-choose-warranty .row div { 
 
    border-right: 1px solid #d7d5d1; 
 
    } 
 
    .why-choose-warranty .row div:last-child { 
 
    border-right: 0; 
 
    } 
 
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" rel="stylesheet" /> 
 

 
<div class="why-choose-warranty"> 
 
    <div class="row col-12 col-lg-10 m-auto align-items-center"> 
 
    <div class="col-4 col-lg-2"> 
 
     <p class="text-center font-weight-bold">Test</p> 
 
    </div> 
 
    <div class="col-4 col-lg-2"> 
 
     <p class="text-center font-weight-bold">Test<br /><br />Test TEST</p> 
 
    </div> 
 
    <div class="col-4 col-lg-2"> 
 
     <p class="text-center font-weight-bold">TEST TEST</p> 
 
    </div> 
 
    <div class="col-4 col-lg-2"> 
 
     <p class="text-center font-weight-bold">TEST</p> 
 
    </div> 
 
    <div class="col-4 col-lg-2"> 
 
     <p class="text-center font-weight-bold">TEST <br /><br /><br /><br /><br />TEST</p> 
 
    </div> 
 
    <div class="col-4 col-lg-2"> 
 
     <p class="text-center font-weight-bold">TEST</p> 
 
    </div> 
 
    </div> 
 
</div>

Hat dachte jemand dieses Problem aus? Oder kann mir helfen, es herauszufinden?

Vielen Dank im Voraus Jungs

+0

Versuchen Sie es mit Klassen wie col-md- # (für tablet) und col-sm- # (fo r mobil). Das sollte funktionieren. Referenz: https://v4-alpha.getbootstrap.com/layout/grid/#column-resets – WebGuy

+0

col-sm ist in meinem Fall durch col ersetzt, und col-md von col-lg.Es ist also keine Lösung –

Antwort

1

Sie können dies tun:

  1. entfernen align-items-center Klasse von Ihrem Reihe Element

  2. hinzufügen align-items-center und d-flex Klassen für jede Ihrer .why-choose-warranty .row div oder dies dem Stil hinzufügen:

    display: flex; 
    align-items: center; 
    

Siehe Demo unter:

.why-choose-warranty { 
 
    width: 100%; 
 
    height: 100%; 
 
    background-color: #f5f3ef; 
 
    color: #11155e; 
 
    padding: 1rem; 
 
} 
 

 
.why-choose-warranty .row { 
 
    padding: 1rem; 
 
} 
 

 
.why-choose-warranty .row div { 
 
    display: flex; 
 
    align-items: center; 
 
    justify-content: center; 
 
} 
 

 

 
/* Small screens (mobiles) */ 
 

 
@media screen and (max-width: 992px) { 
 
    .why-choose-warranty .row { 
 
    background-color: white; 
 
    border-radius: .5rem; 
 
    } 
 
    .why-choose-warranty img { 
 
    max-width: 40%; 
 
    max-height: 40%; 
 
    } 
 
    .why-choose-warranty .row div:nth-child(1), 
 
    .why-choose-warranty .row div:nth-child(2) { 
 
    border-right: 1px solid #d7d5d1; 
 
    border-bottom: 1px solid #d7d5d1; 
 
    } 
 
    .why-choose-warranty .row div:nth-child(3) { 
 
    border-bottom: 1px solid #d7d5d1; 
 
    } 
 
    .why-choose-warranty .row div:nth-child(4), 
 
    .why-choose-warranty .row div:nth-child(5) { 
 
    border-right: 1px solid #d7d5d1; 
 
    } 
 
} 
 

 

 
/* Big screens (desktops) */ 
 

 
@media screen and (min-width: 992px) { 
 
    .why-choose-warranty img { 
 
    max-width: 60%; 
 
    max-height: 60%; 
 
    } 
 
    .why-choose-warranty .row div { 
 
    border-right: 1px solid #d7d5d1; 
 
    } 
 
    .why-choose-warranty .row div:last-child { 
 
    border-right: 0; 
 
    } 
 
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" rel="stylesheet" /> 
 

 
<div class="why-choose-warranty"> 
 
    <div class="row col-12 col-lg-10 m-auto"> 
 
    <div class="col-4 col-lg-2"> 
 
     <p class="text-center font-weight-bold">Test</p> 
 
    </div> 
 
    <div class="col-4 col-lg-2"> 
 
     <p class="text-center font-weight-bold">Test<br /><br />Test TEST</p> 
 
    </div> 
 
    <div class="col-4 col-lg-2"> 
 
     <p class="text-center font-weight-bold">TEST TEST</p> 
 
    </div> 
 
    <div class="col-4 col-lg-2"> 
 
     <p class="text-center font-weight-bold">TEST</p> 
 
    </div> 
 
    <div class="col-4 col-lg-2"> 
 
     <p class="text-center font-weight-bold">TEST <br /><br /><br /><br /><br />TEST</p> 
 
    </div> 
 
    <div class="col-4 col-lg-2"> 
 
     <p class="text-center font-weight-bold">TEST</p> 
 
    </div> 
 
    </div> 
 
</div>

+1

Ihre Antwort löst mein Problem oder bringt mich zumindest in die richtige Richtung. Hinzufügen der CSS-Anzeige: flex; align-items: center; 'zentrieren Sie das Element vertikal, während Sie die gleiche Höhe beibehalten. Ich hatte ein weiteres kleines Problem, dass ich zwei Elemente in der Div habe und ich möchte, dass sie übereinander liegen. Also musste ich ein extra Div mit der Klasse d-inline-block hinzufügen. Danke :) –

+0

Sie sind willkommen :) – kukkuz

1

Sie d-flex hinzufügen und align-items-center auf

  • <div class="row col-12 col-lg-10 m-auto d-flex">

entfernen und hinzufügen d-flex align-items-center zu Ihrem

  • <div class="col-4 col-lg-2 d-flex align-items-center">

Updated fiddle

.why-choose-warranty{ 
 
    width: 100%; 
 
    height: 100%; 
 
    background-color: #f5f3ef; 
 
    color: #11155e; 
 
    padding: 1rem; 
 
} 
 
.why-choose-warranty .row{ 
 
    padding: 1rem; 
 
} 
 
.why-choose-warranty .row div{ 
 
    justify-content: center; 
 
} 
 

 
/* Small screens (mobiles) */ 
 
@media screen and (max-width: 992px){ 
 
    .why-choose-warranty .row{ 
 
    background-color: white; 
 
    border-radius: .5rem; 
 
    } 
 
    .why-choose-warranty img{ 
 
    max-width: 40%; 
 
    max-height: 40%; 
 
    } 
 
    .why-choose-warranty .row div:nth-child(1), .why-choose-warranty .row div:nth-child(2){ 
 
    border-right: 1px solid #d7d5d1; 
 
    border-bottom: 1px solid #d7d5d1; 
 
    } 
 
    .why-choose-warranty .row div:nth-child(3){ 
 
    border-bottom: 1px solid #d7d5d1; 
 
    } 
 
    .why-choose-warranty .row div:nth-child(4), .why-choose-warranty .row div:nth-child(5){ 
 
    border-right: 1px solid #d7d5d1; 
 
    } 
 
} 
 

 
/* Big screens (desktops) */ 
 
@media screen and (min-width: 992px){ 
 
    .why-choose-warranty img{ 
 
    max-width: 60%; 
 
    max-height: 60%; 
 
    } 
 
    .why-choose-warranty .row div{ 
 
    border-right: 1px solid #d7d5d1; 
 
    } 
 
    .why-choose-warranty .row div:last-child{ 
 
    border-right: 0; 
 
    } 
 
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" rel="stylesheet"/> 
 

 
<div class="why-choose-warranty"> 
 
    <div class="row col-12 col-lg-10 m-auto d-flex"> 
 
    <div class="col-4 col-lg-2 d-flex align-items-center"> 
 
     <p class="text-center font-weight-bold">Test</p> 
 
    </div> 
 
    <div class="col-4 col-lg-2 d-flex align-items-center"> 
 
     <p class="text-center font-weight-bold">Test 
 
     <br /> 
 
     <br />Test TEST</p> 
 
    </div> 
 
    <div class="col-4 col-lg-2 d-flex align-items-center"> 
 
     <p class="text-center font-weight-bold">TEST TEST</p> 
 
    </div> 
 
    <div class="col-4 col-lg-2 d-flex align-items-center"> 
 
     <p class="text-center font-weight-bold">TEST</p> 
 
    </div> 
 
    <div class="col-4 col-lg-2 d-flex align-items-center"> 
 
     <p class="text-center font-weight-bold">TEST 
 
     <br /> 
 
     <br /> 
 
     <br /> 
 
     <br /> 
 
     <br />TEST</p> 
 
    </div> 
 
    <div class="col-4 col-lg-2 d-flex align-items-center"> 
 
     <p class="text-center font-weight-bold">TEST</p> 
 
    </div> 
 
    </div> 
 
</div>

+0

Das löst das Problem auch dank dir :) –

+0

@MartinStievenart Danke. Beachten Sie, wie in der anderen Antwort, um Ihre eigenen Flex-Regeln zu erstellen, ist nicht der Weg zu gehen, sondern die eingebauten Klassen, die ich hier gezeigt habe, oder sonst ist der ganze Punkt mit einem Framework verloren. Darüber hinaus wird die Leistung, die mehr als nötig heruntergeladen werden muss, weniger leistungsfähig und wartungsintensiver. – LGSon

+0

Ja, ich habe die eingebauten Klassen verwendet, die Bootstrap zur Verfügung stellen. Ich versuche, sie so oft wie möglich zu benutzen, wenn ich sie kenne, was nicht einfach wird, denn es gibt einige für alles :) –

Verwandte Themen