2013-09-06 22 views
5

ho appena visto http://csswizardry.com/2013/02/introducing-csswizardry-grids/ e la demo (http://csswizardry.com/csswizardry-grids/). Penso che questo sia un buon approccio per risolvere le griglie in CSS. Quindi ho controllato il codice sorgente per vedere, come è stato fatto e ho visto una piccola cosa, che non riesco davvero a capire come è stata fatta.Grid System e spaziatura inline-block

Questo sistema a griglia non sta utilizzando i float ma gli elementi di blocco in linea, che è una buona cosa. Ma ogni volta che utilizzo blocchi in linea per colonne/griglie di larghezza percentuale ecc. Ho questa spaziatura dei blocchi in linea. So che ci sono diversi modi (per lo più solo modifiche nel codice HTML) per eliminare questa spaziatura: http://css-tricks.com/fighting-the-space-between-inline-block-elements/

Ma nel sistema di rete ti ho mostrato che non c'è nessuna di quelle correzioni (per quanto posso vedere) e ancora non vi è alcuna spaziatura tra i blocchi in linea se si controlla il codice sorgente. Giusto per mostrarvi il problema che ho per lo più: ecco un breve violino: http://jsfiddle.net/nN8mV/

HTML

<p>Floating columns (width 33.3%)</p> 
<div class="grid cf"> 
    <div class="grid__item">Test</div> 
    <div class="grid__item">Test</div> 
    <div class="grid__item">Test</div> 
</div> 
<p>Inline Block columns (width 33.3%)</p> 
<div class="grid grid--inlineblock"> 
    <div class="grid__item">Test</div> 
    <div class="grid__item">Test</div> 
    <div class="grid__item">Test</div> 
</div> 

CSS

.grid { 
    margin-bottom: 20px; 
} 
    .grid__item { 
     float: left; 
     width: 33.3%; 
     background: red; 
    } 
    .grid--inlineblock .grid__item { 
     float: none; 
     display: inline-block; 
    } 

Probabilmente sapete che, ma la larghezza 33,3% non funziona , a causa di questa spaziatura. I sistemi di grid non sembrano avere questo problema, sebbene stia usando anche "display: inline-block". Quindi la mia domanda: in che modo CSS Wizardy ha risolto questo problema? Non riesco a capirlo e cambiare HTML (vedi il link Trucchi CSS sopra) in realtà non funziona molto spesso, a causa del contenuto generato da CMS o altro, in cui non puoi adattare il tuo HTML.

Grazie in anticipo per il vostro aiuto.

risposta

4

Demo da Csswizardry vi siete collegati utilizza commento HTML mod:

<div class="grid__item"></div><!-- 
--><div class="grid__item"></div> 

controllare la loro fonte demo.

aggiornato anche il tuo jsfiddle

+0

Oh mio male, supervisionato totalmente i commenti all'interno della fonte. Ero troppo concentrato sul CSS, invece :) Grazie, questo risponde alla mia domanda. – Daniel

1

Se non è possibile modificare il codice HTML, dovrete dare il contenitore font-size: 0 e ripristinare la font-size nelle colonne o dare le colonne margini negativi (può essere fastidioso).

Maggiori dettagli: http://css-tricks.com/fighting-the-space-between-inline-block-elements/

+0

Hai ragione, ma questo metodo ha molti svantaggi (Safari 5 + motori di ricerca + vecchio Android). Per quanto ne so, non c'è ancora una buona correzione CSS, quindi per ora dovremo attenerci ai commenti HTML ... – Daniel

+0

Sì, lo so. Stavo solo indicando il css "hack" perché il poster citava che non poteva cambiare l'HTML. –

0

Si potrebbe fare la seguente:

.grid--inlineblock { 
    word-spacing: -4px; 
} 

E sulla voce di bambino resettare il word-spacing

.grid--inlineblock .grid__item { 
    float: none; 
    display: inline-block; 
    word-spacing: normal; 
} 

È possibile checkout this violino.

Non sono sicuro se questa è la tecnica migliore ma sembra funzionare piuttosto bene.

+0

Grazie, ma purtroppo dipende sempre dal tipo di carattere che stai utilizzando. Per quanto ne so non c'è ancora un hack affidabile. È necessario rimuovere lo spazio bianco nel codice HTML per ora. Ma funziona abbastanza bene. – Daniel

+0

Ah sì, il mio male, ma immagino che sia un problema finché qualcuno non trova qualcosa di meglio se non ti piace usare i commenti. –

+0

Qualcuno deve trovare una soluzione prima che Flexbox abbia un supporto decente. Dopodiché probabilmente non avremo bisogno di inline-block/float per i sistemi a griglia :) – Daniel

0

Flexbox risolve questo problema al giorno d'oggi.

Si potrebbe fare la seguente invece:

.grid--inlineblock .grid__item { 
     display: flex; 
} 

E che dovrebbe risolvere i problemi di spaziatura.