Larghezza fissa CSS in un arco


381

All'interno di un elenco non ordinato:

<li><span></span> The lazy dog.</li>
<li><span>AND</span> The lazy cat.</li>
<li><span>OR</span> The active goldfish.</li>

L'aggiunta di un attributo di classe o stile è consentita, ma non è consentito riempire il testo e aggiungere o modificare tag.

Il rendering della pagina con Courier New.

L'obiettivo è allineare il testo dopo l'intervallo.

    The lazy dog.
AND The lazy cat.
OR  The active goldfish.

La giustificazione della "OR" non è importante.

Il testo di un animale pigro potrebbe essere racchiuso in un ulteriore elemento, ma dovrò ricontrollare.

Risposte:


427

ul {
  list-style-type: none;
  padding-left: 0px;
}

ul li span {
  float: left;
  width: 40px;
}
<ul>
  <li><span></span> The lazy dog.</li>
  <li><span>AND</span> The lazy cat.</li>
  <li><span>OR</span> The active goldfish.</li>
</ul>

Come ha detto Eoin, è necessario inserire uno spazio non interrotto nelle span "vuote", ma non è possibile assegnare una larghezza a un elemento inline, solo riempimento / margine, quindi è necessario renderlo mobile in modo da poter dagli una larghezza.

Per un esempio di jsfiddle, vedere http://jsfiddle.net/laurensrietveld/JZ2Lg/


1
<span> è un elemento incorporato per impostazione predefinita - e mobile non gli darà una larghezza.
— codeinthehole,

56
La proprietà float genera una "casella di blocco" che ha una larghezza.
— Stephen Caldwell,

83
Dovrebbe essere diplay: inline-block; width: 32px;lo farà nella maggior parte dei browser moderni.
— Paulo Bueno,

2
@Randy Marsh - no, la proprietà width ha effetto solo perché la proprietà float cambia l'elemento in un display a blocchi, come descritto da Stephen Caldwell sopra.
— codeinthehole

14
@PauloBueno puoi cambiare diplayper leggere display, BTW, funziona per me. grazie
— basarat il

507

In un mondo ideale lo faresti semplicemente usando i seguenti css

<style type="text/css">

span {
  display: inline-block;
  width: 50px;
}

</style>

Funziona su tutti i browser tranne FF2 e precedenti.

Firefox 2 e versioni precedenti non supportano questo valore. Puoi usare -moz-inline-box, ma tieni presente che non è uguale al blocco inline e potrebbe non funzionare come previsto in alcune situazioni.

Citazione tratta da quirksmode


1
@NicholasPickering .. che ne dici di wkhtmltopdf?
— codeinthehole

Hm, non ne sono sicuro. È solo una piccola battuta d'arresto. Ho dovuto usare le tabelle per ottenere l'effetto desiderato.
— Nicholas Pickering,

Bene, posso consigliare wkhtmltopdf se hai mai bisogno di qualcosa che sia conforme a CSS3.
— codeinthehole,

7
Nel frattempo, 10 anni dopo, questa è sicuramente la strada da percorrere.
— Vog,

19

Sfortunatamente gli elementi inline (o gli elementi con display: inline) ignorano la proprietà width. Dovresti usare invece div galleggianti:

<style type="text/css">
div.f1 { float: left; width: 20px; }
div.f2 { float: left; }
div.f3 { clear: both; }
</style>

<div class="f1"></div><div class="f2">The Lazy dog</div><div class="f3"></div>
<div class="f1">AND</div><div class="f2">The Lazy cat</div><div class="f3"></div>
<div class="f1">OR</div><div class="f2">The active goldfish</div><div class="f3"></div>

Ora vedo che devi usare span ed elenchi, quindi dobbiamo riscriverlo un po ':

<html><head>
<style type="text/css">
        span.f1 { display: block; float: left; clear: left; width: 60px; }
    li { list-style-type: none; }
    </style>

</head><body>
<ul>
<li><span class="f1">&nbsp;</span>The lazy dog.</li>
<li><span class="f1">AND</span> The lazy cat.</li>
<li><span class="f1">OR</span> The active goldfish.</li>
</ul>
</body>
</html>

3
Questa è un'ottima soluzione. I div fluttuanti imitano il comportamento previsto delle campate mentre si allineano orizzontalmente. È importante ricordare il chiaro: entrambe le interruzioni di riga. È un ottimo modo per evitare le tabelle in questo contesto.
— artur,

Non capisco, il pulsante è inline o inline-block element, perché "width" verrà applicato ad esso? Il pulsante sembra un elemento incorporato giusto? Esiste un documento che mostra le proprietà "display" predefinite di tutti gli elementi html?
— GMsoF,

14

Il <span>tag dovrà essere impostato su display:blockin quanto è un elemento incorporato e ignorerà la larghezza.

così:

<style type="text/css"> span { width: 50px; display: block; } </style>

e poi:

<li><span>&nbsp;</span>something</li>
<li><span>AND</span>something else</li>

No, non penso che funzioni. "qualcosa" va alla riga successiva. E manca un "<"
— user1537366

Come ho già detto, NON funziona! Controllare jsfiddle.net/m156a0qp fuori. Inoltre, non è mai buono immischiarsi nel CSS di tutti gli elementi di span!
— user1537366,

4
<style type="text/css">

span {
  position:absolute;
  width: 50px;
}

</style>

È possibile eseguire questo metodo per assegnare la larghezza per gli elementi incorporati


2

Le persone in questo caso non possono essere un elemento a blocchi perché il resto del testo tra gli elementi li scenderà. Anche usare float è una pessima idea perché dovrai impostare la larghezza per l'intero elemento li e questa larghezza dovrà essere uguale alla larghezza dell'intero elemento ul o altro contenitore.

Prova qualcosa del genere in html:

<li><span></span><strong>The</strong> lazy dog.</li>
<li><span>AND</span> <strong>The</strong> lazy cat.</li>
<li><span>OR</span>  <strong>The</strong> active goldfish.</li>

e nel css

li {position:relative;padding-left:80px;} // 80px or something else
li span {position:absolute;top:0;left:0;}
li strong {color:red;} // red or else

quindi, quando l'elemento li è relativo, formatta l'elemento span in modo che sia assoluto e in alto: 0; left: 0; quindi rimane in alto a sinistra e si imposta il padding-left (o: padding: 0px 0px 0px 80px;) per impostare questo spazio libero per l'elemento span.

Dovrebbe funzionare meglio per casi semplici.


1

prova questo

> <span class="input-group-addon" style="padding-left:6%;
> padding-right:6%; width:150px; overflow: auto;">

1

Utilizzando HTML 5.0, è possibile correggere la larghezza del blocco di testo utilizzando <span>o <div>.

inserisci qui la descrizione dell'immagine

Per <span>, ciò che è importante è aggiungere la seguente linea CCS

display: inline-block;

Per il tuo vuoto <span>l'importante è aggiungere &nbsp;spazio.

Il mio codice sta seguendo

body
	{
	font-family: Arial;
	font-size:20px;
	}

div
	{
	width:200px;
	font-size:80px;
	background-color: lime;
	}
div span
	{
	display:block;
	width:200px;
	background-color: lime;
	}

ul li span
	{
	display: inline-block;
	width: 80px;
	background-color: yellow;
	}
span.tab
	{
	display: inline-block;
	width: 80px;
	background-color: yellow;
	}
&lt;DIV&gt;

<div class='test'>ABCDEF</div>

&lt;SPAN&gt;

<div>
    <span class='test'>ABCDEF</span>
</div

<br>

<ul>
  <li><span class='tab'>&nbsp;</span> The lazy dog.</li>
  <li><span class='tab'>AND</span> The lazy cat.</li>
  <li><span class='tab'>OR</span> The active goldfish.</li>
</ul>

PS: ho definito la tabclasse perché il ul li spanselettore CSS non funziona sul mio PC!


inserendo un & nbsp; era quello che ha funzionato per me!
— adrien le coarer,

0

Puoi farlo usando una tabella, ma non è puro CSS.

<style>
ul{
    text-indent: 40px;
}

li{
    list-style-type: none;
    padding: 0;
}

span{
    color: #ff0000;
    position: relative;
    left: -40px;
}
</style>


<ul>
<span></span><li>The lazy dog.</li>
<span>AND</span><li>The lazy cat.</li>
<span>OR</span><li>The active goldfish.</li>
</ul>

Nota che non viene visualizzato esattamente come desideri, perché cambia riga su ogni opzione. Tuttavia, spero che questo ti aiuti ad avvicinarti alla risposta.


-1

Bene, c'è sempre il metodo della forza bruta:

<li><pre>    The lazy dog.</pre></li>
<li><pre>AND The lazy cat.</pre></li>
<li><pre>OR  The active goldfish.</pre></li>

O è quello che intendevi per "imbottitura" del testo? È un lavoro ambiguo in questo contesto.

Sembra una domanda da fare a casa. Spero che tu non stia cercando di farci fare i compiti per te?


-1

ul {
	list-style-type: none;
	padding-left: 0px;
}

ul li span { 
	float: left;
	width: 40px;
}
<ul>
    <li><span></span> The lazy dog.</li>
    <li><span>AND</span> The lazy cat.</li>
    <li><span>OR</span> The active goldfish.</li>
</ul>

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.