2012-06-22 14 views
13

Me gustaría tener un elemento de título con overflow-x:hidden y overflow-y:visible. Sin embargo, por alguna razón, la propiedad overflow-y no parece obedecerse. Se puede observar esto aquí (probado en Chrome y Firefox): http://jsfiddle.net/YgsAw/3/¿Por qué overflow-x: clip oculto mis descendientes?

En esa demo, espero ver "jjjjj", pero en lugar de la j se cortan y parezco más a 1s.

Si establezco overflow-x:visible en la etiqueta h1, de repente aparece el alto completo del texto, pero el ajuste overflow-x:hidden lo hace recortado. Esperaría este comportamiento de overflow-y, pero eso parece no tener ningún efecto. ¿Por qué es esto y qué puedo hacer al respecto?

+1

Mi solución fue agregar un poco de relleno extra al fondo del contenedor. – Qaz

+1

@Qaz ese tipo de solución funciona, y en realidad estas son las cosas que todos hacemos para hacer el trabajo, pero irrita profundamente mi sensibilidad. ¿Cuánta amortiguación, exactamente, necesito ser * cierto * todo será visible en todas las plataformas? ¿Afectará ese relleno a mi diseño y lo hará más feo? Hay concesiones para considerar. Finalmente opté por el truco sugerido en la parte inferior de la respuesta aceptada, que agrega nodos HTML adicionales pero retiene el control preciso sobre la altura del elemento y garantiza que el desbordamiento vertical siempre estará visible. – Calvin

Respuesta

6

Encontré algunas respuestas en un previous question. Según the specs:

Los valores calculados de overflow-x y overflow-y son los mismos que sus valores especificados, excepto que algunas combinaciones con visible no son posibles: si se especifica como visible y el otro es scroll o auto, entonces visible se establece en auto. El valor calculado de overflow es igual al valor calculado de overflow-x si overflow-y es el mismo; de lo contrario, es el par de valores calculados de overflow-x y overflow-y.

Por otra parte, en this page el autor menciona que muchos navegadores imponen restricciones adicionales:

En Gecko, Safari, Opera, 'visible' se convierte en 'auto' también cuando se combina con 'oculta' (en otra palabras: 'visible' se convierte en 'auto' cuando se combina con cualquier cosa diferente de 'visible').

Esa misma página también proporciona demostraciones para todas las combinaciones posibles donde se puede observar este efecto.

No conozco una solución viable para mi situación.

EDITAR

Estoy bastante seguro de que puedo hacer lo que quiero anidando mi etiqueta del título en otra etiqueta: <div><h1>title</h1></div>. El interior h1 tiene line-height:normal para hacer que todo sea visible verticalmente, así como overflow:hidden para hacerlo truncar. El elemento externo puede tener una altura estrictamente limitada y overflow:visible. No es ideal, pero parece ser la mejor opción.

+0

La especificación fue todo lo que pude encontrar, pero no es relevante para su pregunta; por otro lado, no tenía conocimiento de ningún comportamiento específico de UA, y eso parece dar en el clavo en la cabeza. De hecho, no parece haber ninguna solución viable para su situación. Sin embargo, es interesante notar que puedes enfocar tu 'h1' y desplazarte para ver los descensores :) (' overflow' que no sea 'visible' no impide que algo se desplace, solo causa recorte visual) – BoltClock

2

Parece cambiar el elemento H1 en un elemento en línea le conseguirá los resultados deseados:

h1 { 
    margin: 10px; 
    padding: 0;   
    overflow-x: hidden; 
    overflow-y: visible; 
    line-height: 0.5em; 
    display:inline; 
} 

Sólo asegúrese de que el siguiente elemento es un elemento de bloque por lo que no se inicia en la misma línea. Eso o usa la altura de línea correcta y luego usa márgenes negativos. Después de todo, solo puedo adivinar lo que intentas hacer ... ¡Buena suerte!

+1

Creo que esto se debe a que los elementos en línea no obedecen en absoluto a la propiedad de desbordamiento. No tiene sentido para ellos. Lamentablemente, esto no funcionará para mí. El objetivo es usar 'white-space: nowrap' y' text-overflow: ellipsis' para hacer que el título se corte si es demasiado largo. No creo que pueda hacer que esto funcione correctamente para un elemento en línea. – Calvin

+0

@ Calvin: Sí, eso es correcto. Acabo de revisar la especificación, que dice [solo se aplica a los contenedores de bloques] (http://www.w3.org/TR/css3-box/#overflow) (esto incluye los bloques en línea). – BoltClock

Cuestiones relacionadas