2012-03-12 23 views
17

Ho una lista di collegamenti legati a una casella abbastanza stretta; abbastanza stretto per alcuni collegamenti da avvolgere.CSS override line-height su word wrap

line-height è impostato su 30px, che va bene per i collegamenti non-wrapped; tuttavia, per un collegamento il cui testo è abbastanza lungo da forzare un ritorno a capo, viene applicato anche l'altezza di una riga di 30 pixel, così da apparire come se ci fossero 2 collegamenti e non solo una continuazione del testo del collegamento.

Mi piacerebbe in qualche modo (senza js o sul middleware calcolare la lunghezza della stringa) per ottenere il testo del collegamento spostato con un'altezza di riga pari a 10px o così per dare un'impressione visiva di continuazione e non separazione.

risposta

34

Line-height dovrebbe impostare la spaziatura tra le righe (in particolare, quando si avvolgono). Quello che stai probabilmente cercando è margin sull'oggetto li. Se imposti il ​​valore line-height sul valore inferiore desiderato quando le linee si avvolgono e si imposta margin sul valore desiderato tra gli elementi, è consigliabile procedere.

vedere se questo fa ciò che si vuole:

li { 
    padding: 10px 0 0 0; 
    margin: 30px 0; 
    line-height: 10px; 
} 
+2

Bello, lo inviterò. – thepriebe

+2

Dovrebbe ottenere più rappresentante per soluzioni edge case come questa, ma può solo contrassegnare la risposta 1X. Ho dovuto indebolire per essere corretto, ma questa è "la" via da seguire. È interessante notare che l'altezza della linea sembra essere completamente ignorata quando il margine è il valore maggiore. – virtualeyes

+4

Grazie per aver accettato! La 'line-height' più piccola viene ignorata perché' margin' e 'line-height' stanno" comprimendo "i valori. Il valore 'line-height' mette essenzialmente un margine verticale su ogni riga. Quando due oggetti con margine verticale sono adiacenti, il più piccolo dei due margini viene "collassato" a zero, lasciando solo il valore più grande. Ci dispiace, ma non ho un link alle specifiche per questo. – TLS

6

lo farei this way

li { 
    list-style-position: inside; 
    margin: 20px; 
} 

ul { 
    width: 200px; 
    border: solid 1px; 
} 

Oppure si potrebbe impostare la "prima linea" elemento pseudo come in this example

li { 
    padding: 10px 0 0 0; 
    margin: 10px; 
    line-height: 30px; 
} 
li:first-line { 
    margin: 10px; 
    line-height: 10px; 
} 
ul { 
    width: 200px; 
} 
+0

fresco, ma niente da fare, non può ottenere predefinita avvolto line-height è cambiato. Idealmente, il testo avvolto dovrebbe apparire proprio sotto con una spaziatura di 5px. Continuerò a giocherellare ... – virtualeyes

+0

Certo. Se vuoi pubblicare il tuo codice, sarò lieto di aiutarti. – thepriebe

+0

+ 1'd ya per l'opzione di prima linea, il mio css fu è abbastanza debole, quindi le pepite come questa sono belle da trovare ;-) – virtualeyes