Blocco di visualizzazione senza larghezza del 100%


95

Voglio impostare un elemento span in modo che appaia sotto un altro elemento utilizzando la proprietà display. Ho provato ad applicare il blocco in linea ma senza successo, e ho pensato che avrei potuto usare il blocco se in qualche modo riuscissi a evitare di dare all'elemento una larghezza del 100% (non voglio che l'elemento si "allunghi"). Può essere fatto o, in caso contrario, qual è la buona prassi per risolvere questo tipo di problema?

Esempio: un elenco di notizie in cui desidero impostare un link "leggi altro" 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, applica

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

1
Hai qualche markup (HTML o CSS) da mostrarci? È difficile lavorare sul problema senza nulla su cui lavorare effettivamente. Anche una demo su jsfiddle sarebbe buona.
— Tom Oakley

Pensavo di non aver bisogno di alcun codice di esempio poiché si tratta solo di posizionare un elemento span. Vedi post aggiornato.
— Staffan Estberg

Puoi seriamente ridurre tutto quel markup usando solo una riga di codice come ho menzionato di seguito.
— ha404

Risposte:


73

Se sto comprendendo correttamente la tua domanda, il seguente CSS farà fluttuare il tuo a sotto gli intervalli e gli impedirà di avere una larghezza del 100%:

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

Ho provato ad applicarlo ma poiché gli elementi span (titolo e data, nell'esempio) non hanno float, il collegamento viene posizionato prima dell'ultimo span. Immagino che una soluzione sarebbe quella di rendere tutti gli elementi figlio nel li float.
— Staffan Estberg

Funziona se applico un clearfix per il genitore. Vado con questa soluzione, grazie PJ.
— Staffan Estberg

157

Usa display: table.

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


13
Soluzione geniale. margin: 0 auto;se ne hai bisogno centrato.
— Mafia

4
Penso che tu sia fantastico.
— billynoah

1
display: table;funziona, ma non accetta alcun riempimento.
— donquixote

@ ha404 hai ragione, l'imbottitura funziona! jsfiddle.net/wgj7xvLe/4 almeno nel mio browser (Chromium).
— donquixote

3
@donquixote dovrebbe accettare la spaziatura interna fintanto che usi border-collapse: separate. ho appena avuto quel problema.
— Brad

30

Puoi usare:

width: max-content;

Nota: il supporto è limitato, controlla qui per un'analisi completa dei browser supportati


Non ne avevo mai sentito parlare! Interessante.
— Ryan

Era buono da Chrome 46 e FF 66. Dovrebbe essere accettata la risposta. inline-blocket al stavano rompendo il mio layout.
— i336_

1
@ i336_ Ad oggi non è ancora supportato dal browser Edge.
— ChrisW

Edge o Chromium Edge? (Per essere chiari; il primo sarà in fase di transizione per un bel po '...)
— i336_

Secondo caniuse.com è supportato in Edge a partire da Edge 79 rilasciato il 14 gennaio 2020. In totale ha una valutazione di supporto del 92%. caniuse.com/?search=max-content Questo è un bel benvenuto per me. Quando ne ho sentito parlare per la prima volta quasi 2 anni fa, non aveva un supporto abbastanza ampio da poterlo utilizzare in produzione, ma ora sì.
— Xandor,

7

Terrò 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}

È difficile darti una soluzione senza vedere il tuo codice originale.


1
Grazie, ma preferirei non mischiare alcun elemento div.
— Staffan Estberg

5

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

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


2

Prova questo:

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

1

Ho avuto questo problema, l'ho risolto in questo modo:

.parent {
  white-space: nowrap;
  display: table;
}

.child {
  display: block;
}

lo "spazio bianco: nowrap" fa in modo che i figli del bambino (se ne ha) non vadano a capo su una nuova riga se non c'è abbastanza spazio.

senza "spazio bianco: nowrap":

inserisci qui la descrizione dell'immagine

con "white-space: nowrap":

inserisci qui la descrizione dell'immagine


modifica: sembra che funzioni anche senza la parte del blocco figlio per me, quindi sembra funzionare bene.

.parent {
  white-space: nowrap;
  display: table;
}

0

Puoi usare quanto segue:

display: inline-block;

Funziona bene su link e altri elementi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.