Come impostare la proprietà di altezza per SPAN


88

Devo rendere il seguente codice estensibile con altezza predefinita

<style>
.title{
   background: url(bg.gif) no-repeat bottom right;
   height: 25px;
}
</style>

<span class="title">This is title</span>

Ma poiché span è un elemento inline, la proprietà "height" non funzionerà.

Ho provato a usare div invece, ma si espanderà fino alla larghezza dell'elemento superiore. E la larghezza dovrebbe essere flessibile.

Qualcuno può suggerire una buona soluzione per questo?

Grazie in anticipo.


1
Dovresti usare i tag di intestazione (h1, h2, h3, ...) per i titoli. È semanticamente più corretto.
Pickels

1
Sì, hai ragione Pickels. Grazie a tutti per il vostro aiuto. Questo è il mio css finale. Per me funziona benissimo: <style> h4 {display: inline-block; zoom: 1; * display: in linea; margine: 0px; altezza: 25px; } </style>
Kelvin,

Risposte:


142

Dagli un display:inline-blockin CSS: dovrebbe fargli fare quello che vuoi.
In termini di compatibilità: IE6 / 7 sarà lavorare con questo, come suggerisce quirks mode:

IE 6/7 accetta il valore solo sugli elementi con una visualizzazione naturale: inline.


Per quello che vale, IE7 non supporta inline-block.
Scott Cranfill,

Np. @Scott: Non lo vedo su W3 - ecco cosa dicono:Note: No versions of Internet Explorer (including IE8) support the property values "inline-table", "run-in", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-row", or "table-row-group".
casraf

2
@henasraf - @ Scott ha ragione, non posso usarlo anche a causa di quicks: quirksmode.org/css/display.html
Nick Craver

2
Citazione:IE 6/7 accepts the value only on elements with a natural display: inline.
casraf

1
Ahah, immagino che funzionerà se applicato a un spanallora. Grazie per le informazioni, henasraf.
Scott Cranfill,


13

questo per far funzionare display: inline-block in tutti i browser:

Abbastanza stranamente, in IE (6/7), se attivi hasLayout con "zoom: 1" e poi imposti il ​​display su inline, si comporta come un blocco inline.

.inline-block {
    display: inline-block;
    zoom: 1;
    *display: inline;
}

5

Supponendo che tu non voglia renderlo un elemento di blocco, potresti provare:

.title  {
    display: inline-block; /* which allows you to set the height/width; but this isn't cross-browser, particularly as regards IE < 7 */
    line-height: 2em; /* or */
    padding-top: 1em;
    padding-bottom: 1em;
}

Ma la soluzione più semplice è quello di trattare semplicemente la .titlecome un elemento a livello di blocco, e che utilizzano i tag titolo appropriato <h1>attraverso <h6>.


0

span { display: table-cell; height: (your-height + px); vertical-align: middle; }

Affinché gli intervalli funzionino come una cella di tabella (o qualsiasi altro elemento, del resto), è necessario specificare l'altezza. Ho dato alle campate un'altezza e funzionano bene, ma devi aggiungere l'altezza per farle fare quello che vuoi.


0

Un'altra opzione ovviamente è usare Javascript (Jquery qui):

$('.box1,.box2').each(function(){
    $(this).height($(this).parent().height());
})

-4

Perché hai bisogno di un intervallo in questo caso? Se vuoi modellare l'altezza potresti usare un div? Potresti provare un div con display: inline, anche se questo potrebbe avere lo stesso problema poiché in effetti faresti la stessa cosa di uno span.


3
Oppure, ignora del tutto le mie divagazioni e usa la risposta di henasraf :)
Seth Petry-Johnson

Il voto negativo dei commenti scoraggia solo coloro che vogliono contribuire legittimamente. Smettila! Offri invece un feedback costruttivo, o probabilmente più pertinente, la tua opinione in merito.
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.