Ancho CSS de una etiqueta <span>

81

Utilizo <span>etiquetas en los títulos de mis módulos, por ejemplo

<span>Categories</span>.

Especifico el color / imagen de fondo del tramo, el ancho y el alto en css.

Pero el ancho del tramo depende de su contenido / texto.

Entonces, si lo hago <span></span>, con solo una imagen / color de fondo en css, no aparece nada.

Por supuesto, quiero que aparezca algo.

¿Cómo puedo resolver esto?

marte
fuente
4
Solo me gustaría señalar que este no es un buen uso de span. Está destinado a marcar rangos cortos de contenido dentro de un todo más grande, por lo que intencionalmente no es un elemento de bloque por defecto. Para los títulos, una de las etiquetas h # sería la mejor. De lo contrario, un div todavía suele ser mejor que un intervalo.
Chuck
gracias por sus respuestas ..: D me parece que esto es una tontería para empezar. jajaja .. ya hace muchos años. =))
mars-o

Respuestas:

114

Podría establecer explícitamente la propiedad de visualización en "bloquear" para que se comporte como un elemento de nivel de bloque, pero en ese caso probablemente debería usar un div en su lugar.

<span style="display:block; background-color:red; width:100px;"></span>
Chris Fulstow
fuente
gracias, ya veo. eso sucede porque span está en línea. ahora veo la apuesta de diferencia. pantallas en línea y en bloque. sí, div es apropiado .
D..gracias
4
El uso de un DIV dentro de párrafos, encabezados (h1, h2, etc.) rompería la validación si eso le importa. Otra posible solución es usar un span, display: block; y flotar: izquierda; :)
Arve Systad
gracias, y la respuesta a continuación fue fundamental para que el ancho funcione
Timothy T.
3
es mejor usar en inline-blocklugar deblock
Eugen Konkov
125

se extiende de forma predeterminada al estilo en línea, cuyo ancho no se puede especificar.

display: inline-block;

sería una buena manera, excepto que IE no lo admite

Sin embargo, puede piratear una solución de varios navegadores.

cobbal
fuente
2
Creo que IE admite inline-block desde al menos la versión 6. Creo que solo admite inline-block si el elemento al que se aplica está naturalmente en línea (que es <span>).
Ken Browning
3
Sí, IE admite bloques en línea. Su soporte es sutilmente diferente, pero funcionaría en este caso.
thomasrutter
¡Increíble! Comenzando a comprender las diferencias reales en la visualización:
Dean Meehan
6

No puede especificar el ancho de un elemento con visualización en línea. Puede poner algo en él como un espacio que no se rompa () y luego configurar el relleno para darle más ancho, pero no puede controlarlo directamente.

Puede usar display inline-block, pero eso no es ampliamente compatible.

Un verdadero truco sería poner una imagen dentro y luego establecer el ancho de eso. Algo así como un GIF transparente de 1 píxel. Sin embargo, no es el enfoque recomendado.

cletus
fuente
3

Usaría el paddingatributo. Esto le permitirá agregar un número determinado de píxeles a cada lado del elemento sin que el elemento pierda sus cualidades de extensión:

  • No se convertirá en un bloque
  • Flotará como esperas

Sin embargo, este método solo se agregará al relleno, por lo que si cambia la longitud del contenido (de Categorías a Etiquetas, por ejemplo), el tamaño del contenido cambiará y el tamaño general del elemento también cambiará. Pero si realmente desea establecer un tamaño rígido, debe hacer lo mencionado anteriormente y usar un div.

Consulte el modelo de caja para obtener más detalles sobre el modelo de caja, contenido, relleno, margen, etc.

Kelly Hays
fuente
3

Como en otras respuestas, comience sus atributos de intervalo con esto:

display:inline-block;  

Ahora puede usar el relleno más que el ancho:

padding-left:6%;
padding-right:6%;

Cuando usa relleno, su color se expande a ambos lados (derecho e izquierdo), no solo a la derecha (como en ancho).

Nohy bez hranic
fuente
2

Utilice el atributo 'pantalla' como en el ejemplo:

<span style="background: gray; width: 100px; display:block;">hello</span>
<span style="background: gray; width: 200px; display:block;">world</span>
Antonio
fuente
1

Habiendo fijado la altura y el ancho, debe indicar cómo actuar si el texto de su interior desborda su área. Así que agrega el CSS

desbordamiento: automático;

usuario2130923
fuente