CSS: Texto líquido sobre una imagen con tamaño variable
Recientemente estuve considerando varias técnicas para mostrar gráficas en libros EPUB con la mejor calidad posible. Casi todas son inviables debido a la falta de soporte, incluyendo las que serían ideales: SVG o lienzos HTML5. Pero lo que más lamenté fue descartar una de mis dos soluciones que usaban solo CSS.
El problema general a resolver es tener una gráfica que se ajusta a la anchura de página (width: 100%) con la mejor calidad de imagen posible. La mayoría de los libros electrónicos en circulación en 2011 no utilizan un algoritmo de interpolación; cuando el tamaño de la imagen es distinto al tamaño de página se limitan a duplicar o suprimir filas/columnas de píxeles. Esto hace que el texto incluido en la imagen sea más difícil de leer, sobre todo si el tamaño de texto es pequeño y el tamaño de página es inferior al de la imagen:

La solución que quería implementar requiere CSS3 y soporte para position: absolute. Por desgracia, el estándar EPUB para el que están preparados los ereaders en circulación no incluye CSS3 y muchos ignoran también el posicionamiento absoluto.
El truco consiste en colocar la imagen sin texto dentro de un div (cuyo tamaño se ajustará al de la imagen) y posicionar el texto de forma absoluta dentro del div usando porcentajes. Para ajustar el tamaño del texto empleamos media queries con el argumento min-width:
.figura {
width: 100%;
position: relative;
}
.figura img {
width: 100%;
}
.figura .dato {
position: absolute;
font-size: 11px;
}
@media (min-width: 601px) {
.figura .dato { font-size: 13px; }
}
@media (min-width: 701px) {
.figura .dato { font-size: 14px; }
}
@media (min-width: 801px) {
.figura .dato { font-size: 15px; }
}
@media (min-width: 901px) {
.figura .dato { font-size: 16px; }
}
@media (min-width: 1025px) {
.figura .dato { font-size: 17px; }
}
Para el código de ejemplo he puesto los datos en divs, pero se podrían usar listas u otras etiquetas más semánticas.
<div class="figura"> <img src=".."> <div class="dato" style="top: 10%; left: 20%;">1737,48</div> <div class="dato" style="top: 10%; left: 30%;">1234,56</div> <div class="dato" style="top: 10%; left: 40%;">845,12</div> </div>
En teoría, al usar CSS3 deberíamos poder usar la imagen como fondo para el div del envoltorio. En la práctica el soporte para CSS3 suele ser incompleto, por lo que podemos disponer de min-width para las media queries y no de imágenes de fondo escalables.










Estás viendo una entrada al azar. La URL no era válida o el contenido ya no está disponible.