2012-03-14 17 views
20

Ho una lista come questa:come forzare lo scorrimento orizzontale in un elenco HTML usando CSS?

<div> 
    <ul> 
    <li>one</li> 
    <li>two</li> 
    <li>three</li> 
    <li>four</li> 
    </ul> 
</div> 

e il seguente CSS:

ul { 
    width: 160px; 
    height: 100px; 
    overflow: auto; 
    } 
li { 
    width: 80px; 
    display: inline-block; 
    float: left 
    } 

sto cercando di forzare le voci per visualizzare da sinistra a destra, che è

one - two - three - four 

Il mio problema:
Fare così mi dà due file con due articoli ciascuno.

Domanda:
C'è un modo per forzare CSS le voci di elenco a tutti in una sola riga in modo da poter utilizzare lo scorrimento orizzontale? In questo momento se imposto l'overflow : auto Sto ottenendo solo barre di scorrimento verticali, che non voglio.

non voglio impostare questo sul div confezione. Sono solo curioso di sapere se esiste una soluzione CSS che posso utilizzare solo nella lista.

Grazie per l'aiuto!

risposta

52

Non è possibile scorrere realmente il contenuto flottato. Una volta che è flottato, non viene calcolato in base alla larghezza o all'altezza del contenitore genitore per impostazione predefinita. In realtà, lo <ul> si sta semplicemente espandendo alla sua larghezza impostata e quindi non sta facendo altro.

La rimozione di float: left li renderà scorrevoli. L'unico problema che avrai allora è che c'è uno "spazio" extra tra ogni blocco in linea. Puoi rimuoverlo rimuovendo le interruzioni di riga tra ogni elemento dell'elenco. Non è la cosa più carina. Normalmente userei uno font-size: 0 e quindi reimpostare la dimensione del carattere nella voce di elenco.

È inoltre necessario assicurarsi che gli elementi non si sovrappongano a una nuova riga quando colpiscono la larghezza dell'elemento.

Esempi jsFiddle:

+0

Wow, sono impressionato! – frequent

+0

Fantastico! Grazie! –

+0

Cool one thanks a lot :) –

2

Non hai vincolato l'altezza dello <ul>, quindi il browser è libero di avvolgere gli elementi "extra" sulla propria linea. Avrai bisogno di un height: 1em o di qualsiasi altra cosa per assicurarti che lo <ul> non possa diventare più alto, costringendo tutto a scorrere orizzontalmente.

+0

suona bene. Provando. – frequent

+0

no. Non funziona Le voci dell'elenco non sembrano interessare e se sto impostando l'overflow: auto, ottengo solo lo scorrimento verticale. – frequent

1

Puoi farlo con css + javascript, ad es. (Http://www.smoothdivscroll.com/v1-2.htm). Non pensare che ci sia un solforismo solo CSS (che funzionerà su browser).

1

Usa overflow-x: scroll; sul div.

Fiddle con esso here.

28

Ecco un violino di lavoro: http://jsfiddle.net/qnYb5/

Rilevante CSS:

ul{ 
    list-style-type:none; 
    white-space:nowrap; 
    overflow-x:auto; 
} 

li{ 
    display:inline; 
} 
+5

L'altezza non fa in realtà nulla correlato alla barra di scorrimento. In effetti, sta solo tagliando il contenuto. http://jsfiddle.net/nPmLe/1/ - Questa risposta è solo disinformazione nascosta dietro altre proprietà che stanno effettivamente facendo il lavoro. L'altezza non ha bisogno di vincoli di sorta. – animuson

+0

Aggiornato, grazie per l'informazione! – MetalFrog