2012-10-03 13 views
58

Desidero impostare un elemento span da visualizzare sotto un altro elemento utilizzando la proprietà display. Ho provato ad applicare inline-block ma senza successo, e ho pensato di poter usare block se in qualche modo riuscissi a evitare di dare all'elemento una larghezza del 100% (non voglio che l'elemento si "allunghi"). Questo può essere fatto, o se no, quali sono le buone prassi per risolvere questo tipo di problema?Blocco di visualizzazione senza larghezza 100%

Esempio: un elenco di notizie dove voglio impostare un "leggi tutto" link alla fine di ogni post (nota: <a> invece di <span>)

<li> 
<span class="date">11/15/2012</span> 
<span class="title">Lorem ipsum dolor</span> 
<a class="read-more">Read more</a> 
</li> 


Aggiornamento: risolto. In CSS, applicare

li { 
    clear: both; 
} 
li a { 
    display: block; 
    float: left; 
    clear: both; 
} 
+1

Hai qualche markup (HTML o CSS) per mostrare a noi? È difficile lavorare sul problema senza nulla su cui lavorare davvero. Anche una demo su [jsfiddle] (http://jsfiddle.net) sarebbe buona. –

+0

Pensavo che non avessi bisogno di codice di esempio poiché si trattava solo di posizionare un elemento span. Vedi post aggiornato. –

+0

Si può seriamente ridurre tutto quel markup semplicemente usando solo una riga di codice come ho detto di seguito. – ha404

risposta

50

Se io sto capendo la tua domanda correttamente, il seguente CSS galleggerà vostro un sotto le campate e tenerlo da avere una larghezza di 100%:

a { 
    display: block; 
    float: left; 
    clear: left; 
} 
+0

Ho provato ad applicarlo ma dal momento che gli elementi span (titolo e data, nell'esempio) non hanno il float il link viene posizionato prima dell'ultima span. Indovina una soluzione sarebbe quella di rendere tutti gli elementi figlio nel li float. –

+0

Funziona se applico un clearfix per il genitore li. Andrà con questa soluzione, grazie PJ. –

+0

Nessun problema, felice di aiutare! –

6

vorrei mantenere ogni riga al proprio div, quindi ...

<div class="row"> 
    <div class="cell">Content</div> 
</div> 
<div class="row"> 
    <div class="cell">Content</div> 
</div> 

E poi per il CSS:

.cell{display:inline-block} 

E 'difficile per darvi una soluzione senza vedere il tuo codice originale.

+1

Grazie, ma preferirei non mischiare alcun elemento div. –

+1

Bella soluzione! Dovrei avere altri upvotes ... – Levit

1

Non puoi semplicemente impostare l'intervallo di display: block e impostare un width sull'elemento li contenente?

+0

Il li deve avere larghezza automatica a causa del titolo e delle date. –

4

Ancora una risposta che potrebbe essere un po 'troppo tardi (ma per coloro che trovano comunque questa pagina per la risposta).

Invece di display:block; uso display:inline-block;

1

Prova questo:

li a { 
    width: 0px; 
    white-space:nowrap; 
} 
100

Usa display: table.

Questa risposta deve contenere almeno 30 caratteri; Ho inserito 20, quindi eccone altri.

+0

funziona bene grazie alla soluzione Genius –

+7

. 'margine: 0 auto;' se ne hai bisogno centrato. – Mafia

+1

Penso che tu sia fantastico. – billynoah

5

è possibile utilizzare:

width: max-content;

Nota: il supporto è limitato, check here per una ripartizione completa dei browser che supportano

Problemi correlati