2011-04-16 39 views
10

Estoy haciendo un texto estilístico dentro de divs redondeados, donde el texto choca contra la parte superior del contenedor. He podido controlar casi todo el contenido, divs anidados, imágenes establecidas como fondos, etc., y tuve todos ellos recortar con éxito, pero este me ha estado causando un gran dolor.border-radius; desbordamiento: oculto, y el texto no está recortado

Usar los bordes de la imagen de la vieja escuela o los encubrimientos no es una solución ya que tenemos fondos gráficos dinámicos. Necesitamos una solución para en realidad recortar el texto.

Esto es sobre todo visible en Firefox 3.x o más versiones de Chrome

Aquí está el código de ejemplo para jugar con:

http://jsfiddle.net/vfp3v/1/

div { 
    -moz-border-radius: 45px; 
    border-radius: 45px; 
    background-color: #ccc; 
    font-size: 100px; 
    color: #777; 
    line-height: 70%; 
    overflow: hidden; 
    width: 257px; 
} 

la jank:

enter image description here

Aviso que ha sido fijado en el nuevo Chrome y Firefox 4 - el feng:

enter image description here

La mayoría de nuestros usuarios del sitio son Firefox 3.6, por lo que le encantaría ser capaz de proporcionar una solución elegante para ellos también. Cualquier ayuda apreciada! Saludos

+0

woah ... parece una tarea bastante ... buena suerte lol – Jason

+0

Podría usar una imagen;) – Blender

+0

La imagen no funcionaría ya que el texto se genera a partir de los títulos de las publicaciones del blog. – ioTus

Respuesta

5

Esta funciona en FF 3.6: http://jsfiddle.net/vfp3v/15/

tiene algunos inconvenientes, como se puede ver en el segundo ejemplo (en FF 3.6) de la frontera recortada tiene un color sólido, por lo que si usted está usando alguna tipo de fondo esto podría verse feo. Solo échale un vistazo, podría ajustarse a tus necesidades.

Acabo de añadir un lapso:

<div><span></span>WXYZ</div> 

y luego la colocó sobre el texto con un borde en el mismo color que el fondo, y un desplazamiento tan grande como la frontera:

div{ 
    position:relative; 
    etc... 
} 
span{ 
    position:absolute; display:block; width:100%; height:100%; 
    border:25px solid #fff; top:-25px; left:-25px; 
    -moz-border-radius: 70px; border-radius: 70px; /* 45 radius + 25 border */  
} 

edit: acaba de probar esto en chrome 10.0.6 (que tiene el error de recorte) y funcionó!

En navegadores que soportan correctamente el radio del borde, el tramo (y su borde de color) ni siquiera es visible porque está recortado (desbordamiento: oculto).

+0

Método interesante, aunque no es lo que necesitamos. Tenemos imágenes de fondo altamente dinámicas que deben mostrarse, y esquinas redondeadas en todos los elementos de la interfaz de usuario. – ioTus

+0

Esa es la única gran desventaja de esta solución. Con las imágenes de fondo no puedo pensar en ninguna buena solución, creo que siempre terminas con un método para cubrir las partes que deberían ocultarse. O simplemente agregue suficiente relleno para que nunca se necesite recorte ... – Willem

+0

como información general nuestra "solución" parcial actual es tener el texto en una transparencia alfa del 20%, por lo que el recorte de texto es menos notorio pero el alto -contrast color sólido bg aparece el texto.Todavía no es un clipping/enmascaramiento legítimo, pero es un paso en la dirección correcta – ioTus

Cuestiones relacionadas