2010-06-22 10 views
13

Este es mi código:¿Cómo agregar un relleno horizontal a cada línea en una frase envuelta de varias líneas?

<div><p><span>... highlighted text ...</span></p><p>Chapter info</p></div> 

Esto es lo que se ve actualmente como:

http://i48.tinypic.com/2dqvo1i.png

¿Hay una manera de agregar relleno a los lados del texto seleccionado? El relleno regular en el SPAN no funciona, porque solo toma en cuenta el comienzo y el final de la oración, no cada línea por separado.

¿Alguna idea? El código CSS3 está bien.

+0

Solo para aclarar, está buscando cada línea del texto ajustado a ser rellenado de forma diferente? Si no, ¿por qué no aplicar el relleno a la etiqueta div? – JohnFx

+0

bueno, estoy casi 1 año después, pero estoy buscando exactamente lo mismo. – pasine

+0

Echa un vistazo a esta solución - http://stackoverflow.com/a/34660112/483779 – Stickers

Respuesta

24

Después de luchar durante algún tiempo me encontré con una solución no extravagante, con un retroceso decente para navegadores antiguos - la adición de dos CSS3 sombras a las líneas de texto:

span { 
background:#ff0;color:#000; 
box-shadow:0.2em 0 0 #ff0,-0.2em 0 0 #ff0; 
-moz-box-shadow:0.2em 0 0 #ff0,-0.2em 0 0 #ff0; 
-webkit-box-shadow:0.2em 0 0 #ff0,-0.2em 0 0 #ff0; 
} 
+0

Gracias. Exactamente lo que estaba buscando. – Marc

+0

parece ser la única manera. Eso es perfecto – Ben

+0

Esta es realmente una gran y simple solución para una tarea común. – klickreflex

1

Solo rellene las etiquetas "p" que rodean los tramos. La etiqueta "p" (a diferencia de span) es un elemento de nivel de bloque, por lo que el relleno en la parte superior, inferior o lateral funcionará como se espera.

+0

Quiero rellenar las tiras amarillas de textos, por lo que el texto no está tan cerca del lado. Ejemplo de maqueta: http://i50.tinypic.com/206dlef.png Al agregar el relleno a la P, solo agrega relleno al bloque como un todo. Sin embargo, quiero agregar el relleno a las líneas de texto individualmente. Estoy empezando a pensar que no es posible, porque la línea de texto ya se interpreta como UN elemento, pero para que funcione mi idea, debe interpretar cada línea de texto por separado para que el relleno horizontal funcione. – Marc

+0

Desafortunadamente, NO PUEDO crear elementos separados para cada línea, porque se crean dinámicamente y no conozco el punto de 'ruptura' de antemano. Idealmente habría un pseudo-selector de cada línea, que podría usar para rellenar cada línea individualmente. – Marc

0

Probar inline-block. No va a trabajar en nada más viejo que IE8 (though there are some work arounds), pero todo lo demás debe estar bien populares:

p span { 
    display: inline-block; 
    padding: 0 2em; 
} 
+0

Desafortunadamente eso tampoco funciona. Simplemente crea un elemento de bloque, que no borra sus hermanos. Efectivamente, esto significa que tengo un bloque amarillo, en lugar de líneas de amarillo. – Marc

+0

Oh, ya veo. Entonces creo que lo que quieres no es posible, el relleno por su naturaleza se aplica a los bloques. Algún tipo de solución jQuery para agregar espacios sin interrupciones en lugares apropiados es la única manera de hacerlo. – robertc

+0

Lástima. Supongo que lo dejaré como está. Gracias por la ayuda sin embargo. – Marc

4
white-space: pre-wrap; 
No

realmente una solución, pero sí añadir un poco de espacio antes del descanso.

+0

Gracias. De hecho, no resuelve el problema, pero el espacio adicional me ayuda a buscar el aspecto que estoy buscando. – Marc

-1

en lugar de añadir dos CSS3-sombras sugerido, que aquí hay una respuesta mucho más simple:

uso display:block

<span> es display:inline por defecto, por lo que los bordes y el relleno que agregó en realidad no están afectando a su tamaño. Entonces solo la primera línea se ve afectada.

Use display:block en el lapso y <span> ahora funciona como <p> y <div>.

Aquí hay una buena explicación: http://quirksmode.org/css/css2/display.html

+2

Eso no es lo que el OP quiere ... si lo haces, no hay un efecto de "resaltado", parece una simple caja. – Arkana

0

encontrado por fin una forma de salir de esta miseria. Trabajó para mi. Utiliza un botón a la izquierda así.

<p> 
<button class="blankspace"> 
</button> 
<span> 
</span> 
</p> 

y CSS como si fuera

.blankspace { 
    background: none; 
    opacity: 0.0; 
    outline:0; 
    text-decoration: none; 
    width: 2%; 
    height: 80%; 
    margin:0 auto; 
    float:left; 
    text-align:right; 
    padding:0%; 
    font-size:2px; 
} 
Cuestiones relacionadas