2016-03-01 7 views
12

erwartete ich brauchte Flexbox zu verwenden, um meine Navigation zum Zentrum und somit kam ich mit dem Follow-up:rechtfertigen Inhalt: Raum zwischen versagenden Elemente auszurichten, wie

.navbar-brand > img { 
 
    width: 100px; 
 
} 
 
.navbar-default { 
 
    background-color: #fff; 
 
    border-color: #fff; 
 
    -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, .3); 
 
    box-shadow: 0 0 3px rgba(0, 0, 0, .3); 
 
} 
 
.navbar-default .navbar-nav > li > a { 
 
    color: #464646; 
 
    text-transform: uppercase; 
 
} 
 
.navbar-default .navbar-nav > li > a:hover, 
 
.navbar-default .navbar-nav > li > a:focus, 
 
.navbar-default .navbar-nav > li > a:active { 
 
    color: #727272; 
 
} 
 
.navbar-default .navbar-nav > li:not(.active) > a:before { 
 
    content: ''; 
 
    position: absolute; 
 
    bottom: 0; 
 
    left: 30%; 
 
    right: 30%; 
 
    height: 1px; 
 
    background: #ed1c24; 
 
    opacity: 0; 
 
    -webkit-transform: translateY(10px); 
 
    -ms-transform: translateY(10px); 
 
    -o-transform: translateY(10px); 
 
    transform: translateY(10px); 
 
    -webkit-transition: all .3s; 
 
    -o-transition: all .3s; 
 
    transition: all .3s; 
 
} 
 
.navbar-default .navbar-nav > li > a:hover:before { 
 
    opacity: 1; 
 
    -webkit-transform: none; 
 
    -ms-transform: none; 
 
    -o-transform: none; 
 
    transform: none; 
 
} 
 
.navbar-default .navbar-nav > li:first-child > a { 
 
    font-weight: 700; 
 
} 
 
.navbar-default .navbar-nav > li.active > a { 
 
    background: #ed1c24; 
 
    color: #fff; 
 
    padding-top: 25px; 
 
    padding-bottom: 25px; 
 
    position: relative; 
 
    -webkit-transition: all .3s; 
 
    -o-transition: all .3s; 
 
    transition: all .3s; 
 
} 
 
.navbar-default .navbar-nav > li.active > a:hover, 
 
.navbar-default .navbar-nav > li.active > a:focus, 
 
.navbar-default .navbar-nav > li.active > a:active { 
 
    background: #e0222a; 
 
    color: #fff; 
 
} 
 
.navbar-default .navbar-nav > li.active:hover > a:after { 
 
    bottom: 0; 
 
} 
 
.navbar-default .navbar-nav > li.active > a:after { 
 
    font-family: FontAwesome; 
 
    content: '\f078'; 
 
    position: absolute; 
 
    bottom: 5px; 
 
    font-size: 0.6em; 
 
    /*opacity: 0.8;*/ 
 
    left: 50%; 
 
    -webkit-transform: translateX(-50%); 
 
    -ms-transform: translateX(-50%); 
 
    -o-transform: translateX(-50%); 
 
    transform: translateX(-50%); 
 
    -webkit-transition: all .3s; 
 
    -o-transition: all .3s; 
 
    transition: all .3s; 
 
} 
 
/* use flexbox to center align nav elements above 992px */ 
 

 
@media (max-width: 992px) { 
 
    .navbar-default .navbar-nav > li > a { 
 
    text-align: center; 
 
    } 
 
    .navbar-collapse { 
 
    max-height: 350px; 
 
    overflow-y: hidden; 
 
    } 
 
} 
 
@media (min-width: 992px) { 
 
    .navbar-default { 
 
    display: flex; 
 
    align-items: center; 
 
    justify-content: space-between; 
 
    } 
 
    .navbar-default { 
 
    min-height: 100px; 
 
    } 
 
    .navbar-default .navbar-right { 
 
    display: flex; 
 
    align-items: center; 
 
    } 
 
    .navbar-default > .container { 
 
    display: flex; 
 
    align-items: center; 
 
    justify-content: space-between; 
 
    } 
 
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" /> 
 
<nav role="navigation" class="navbar navbar-default navbar-fixed-top"> 
 
    <div class="container"> 
 
    <!-- Brand and toggle get grouped for better mobile display --> 
 
    <div class="navbar-header"> 
 
     <button type="button" data-target="#navbarCollapse" data-toggle="collapse" class="navbar-toggle"> 
 
     <span class="sr-only">Toggle navigation</span> 
 
     <span class="icon-bar"></span> 
 
     <span class="icon-bar"></span> 
 
     <span class="icon-bar"></span> 
 
     </button> 
 
     <a href="index.html" class="navbar-brand"> 
 
     <img src="https://upload.wikimedia.org/wikipedia/commons/4/48/EBay_logo.png" alt="Logo"> 
 
     </a> 
 
    </div> 
 
    <!-- Collection of nav links and other content for toggling --> 
 
    <div id="navbarCollapse" class="collapse navbar-collapse"> 
 
     <ul class="nav navbar-nav navbar-right"> 
 
     <li class="active"><a href="index.html">Home</a> 
 
     </li> 
 
     <li><a href="consulting.html">CONSULTING</a> 
 
     </li> 
 
     <li><a href="devices.html">Medical Devices</a> 
 
     </li> 
 
     <li><a href="">Servises</a> 
 
     </li> 
 
     <li><a href="">News</a> 
 
     </li> 
 
     <li><a href="">Contact Us</a> 
 
     </li> 
 
     </ul> 
 
    </div> 
 
    </div> 
 
</nav>

FIDDLE HERE

Wie Sie aus dem HTML sehen können, hat die .container zwei untergeordnete Elemente.

Ich habe folgende CSS auf das .container Element angewendet:

.navbar-default > .container{ 
     display: flex; 
     align-items:center; 
     justify-content:space-between; 
    } 

Das Problem ist space-between nicht die beiden untergeordneten Elemente des Behälters an den linken und rechten Rand des Behälters machen.

Das Verhalten, das ich will, ist, dass die beiden Kindelemente am linken und rechten Rand sein sollen, dies kann mit Floats erreicht werden, I. E., ich schweben ein Kind nach links und eins nach rechts.

Auch wenn Sie gelten flex-start und flex-end die Elemente an den Rand gezogen werden, aber mit flex-start und flex-end, werden beiden Elemente zu einer Seite gezogen werden. Daher muss ich space-between verwenden.

Kann mir jemand sagen, warum ist space-between nicht? Dieser Fehler verursacht auf meiner gesamten Website ein großes Alignment-Problem, bitte sagen Sie mir, was ich falsch mache.

+0

Ich denke 'Inhalt:" „;' wird es nicht 'Raum-between' bewirken arbeiten. Versuche die Lösung zu finden. Dann lass es dich wissen. Bis zu dem Versuch, sich selbst oder eine andere zu finden, kann eine Lösung gefunden werden. – ketan

+0

@ketan Überprüfen Sie das letzte Beispiel hier http://www.sketchingwithcss.com/samplchapter/cheatsheet.html, ich verwende diese Lösung für jetzt .. aber wirklich, Raum-zwischen sollte funktionieren! Ich weiß nicht, warum es nicht ist! –

Antwort

22

Das Problem ist ein Konflikt mit dem Bootstrap-Stylesheet, das Pseudo-Elemente in Ihrem Flex-Container platziert. Dies führt dazu, dass space-between mehrere Flex-Elemente im Gegensatz zu nur zwei Elementen berechnet.

Hier ist Ihr flex Container:

Das Logo und nav-Menü mit justify-content: space-between ausgerichtet sind, sind aber nicht an gegenüberliegenden Rändern positioniert. Die Ausrichtung sieht eher wie space-around aus.

enter image description here


Hier Bootstrap des ::before und ::after Pseudo-Elemente (oder pseudo-flex Artikel):

Wie in Firefox documentation bemerkt:

In- fließen ::after und ::before pseudo-Elemente sind Elemente flex.

enter image description here


Lassen Sie uns einige Inhalte in den pseudos setzen:

wie ein schwarzes Licht in einem Motelzimmer scheint, sehen Sie eine Menge Sachen wünschen Ihnen war nicht Dort.

enter image description here


Entfernen (oder überschreiben) die Pseudo-Elemente und Ihr Problem ist weg:

enter image description here


Mehr Details über flex Container und pseudo- Elemente:

-1
<style> #logo{ 
position:absolute; 
float:left; 
left:10px; 
} 
</syle> 
<img id="logo" src="https://upload.wikimedia.org/wikipedia/commons/4/48/EBay_logo.png" alt="Logo"> 

enter link description here

1

Da flex positioniert Elemente nur Elemente direkt auf das Kind reagieren nur. Wickeln Sie alles unter die Klasse .container mit einem div und geben Sie div das position: flex und das justify-content: space-between Attribut.

Beispiel:

<nav> 
<div class="container"> 
    <div class="wrapper"> 
     ... 
    <div> 
</div> 
</nav> 

<style> 
.wrapper { 
    position: flex; 
    justify-content: space-between; 
} 
</style> 
Verwandte Themen