2016-03-01 10 views
12

avevo bisogno di usare FlexBox per centrare la mia navigazione e, quindi, mi si avvicinò con il seguente:giustificare-content: spazio tra i non riuscendo per allineare gli elementi come previsto

.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

Come si può vedere dall'HTML, lo .container ha due elementi figlio.

Ho il seguente CSS applicato all'elemento .container:

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

Il problema è space-between non rendere i due elementi figlio del contenitore di essere ai bordi sinistro e destro del contenitore.

Il comportamento che voglio è che i due elementi figlio si trovino sul lato sinistro e destro, questo può essere ottenuto usando i float, I.E., faccio galleggiare un bambino a sinistra e uno a destra.

anche se si applica flex-start e flex-end gli elementi sarà tirato a bordo, ma, con flex-start e flex-end, entrambi gli elementi saranno tirati da una parte. Quindi ho bisogno di usare space-between.

Qualcuno può dirmi perché il space-between non funziona? Questo bug sta causando un enorme problema di allineamento su tutto il mio sito, per favore qualcuno mi dica cosa sto sbagliando.

+0

penso 'contenuto:" ";' effettuerà esso non funziona 'spazio-between'. Prova a trovare la soluzione. Una volta ottenuto, informalo. Fino a quello provi a trovare te stesso o qualche altro può avere soluzione. – ketan

+0

@ketan controlla l'ultimo esempio qui http://www.sketchingwithcss.com/samplechapter/cheatsheet.html, sto usando quella soluzione per ora .. ma in realtà, lo spazio tra dovrebbe funzionare! non so perché non sia! –

risposta

22

Il problema è un conflitto con il foglio di stile Bootstrap, che inserisce pseudo-elementi nel contenitore flessibile. Ciò causa che space-between calcola più elementi flex anziché solo due.

Ecco il vostro contenitore flex:

Il logo e il menu di navigazione sono allineati con justify-content: space-between, ma non sono posizionati ai bordi opposti. L'allineamento assomiglia più a space-around.

enter image description here


Ecco Bootstrap di ::before e ::after pseudo-elementi (o gli elementi pseudo-flex):

Come osservato in Firefox documentation:

In- flusso Gli pseudo-elementi ::after e ::before sono elementi flessibili.

enter image description here


Mettiamola alcuni contenuti nelle pseudos:

Come brilla una luce nera in una stanza di un motel, si vede un sacco di roba che si desidera non è stato Là.

enter image description here


Rimuovi (o esclusione) gli pseudo-elementi e il problema è andato:

enter image description here


Maggiori informazioni su contenitori Flex e pseudo- elementi:

-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

Dal momento di flessione posizionato articoli appena rispondono al solo gli elementi direttamente figlio. Avvolgere tutto con la classe .container con un div e assegnare a tale div il position: flex e l'attributo justify-content: space-between.

Esempio:

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

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