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?


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>

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.


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.


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.


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).


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>

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;

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.