Académique Documents
Professionnel Documents
Culture Documents
Durante mucho tiempo no tuve necesidad de maquetear porque hacía sitios web donde no
era necesario ser exacto en el diseño.
No eran raros los casos donde demorara bastante en encontrar la forma de que se vieran
del mismo modo tanto en Firefox como en IE6, o Chrome.
Desde hace algunos meses trabajo en una agencia de publicidad donde he tenido que
realizar ese tipo de trabajo varias veces.
Gracias a Dios, para esta época ya he leido y experimentado algo sobre técnicas con CSS,
y basado en ellas estoy mejorando en la tarea de maqueteo.
Ahora puedo conseguir que el diseño web calce sobre el diseño gráfico que me pasan, de
un modo más preciso y, principalmente, más rápido.
Tengo archivados varios textos de diseño web que aún no he leido. Ojalá pueda ir
mejorando esta técnica que describo a continuación.
El problema
Hay un diseño gráfico con texto y fotos dispuestos en un rectángulo. Se desea hacer
un diseño web que calce con él del modo más exacto que se pueda, con el código más
eficiente que se pueda, en el menor tiempo que se pueda.
Cómo lo hago
Gráficos
Primero, uso el diseño gráfico para obtener las imágenes que requiero. Generalmente lo
hago con Photoshop.
Aislo las figuras y piezas que necesitaré para armar la maqueta.
Posición
La idea es usar la foto del diseño como fondo de un div. Y, sobre ese div, ir definiendo
otros div que contengan los elementos que queremos colocar. La posición de esos div
será siempre absoluta. Para lograr un calce preciso, temporalmente se puede aplicar
transparencia al div que se desea encajar.
● Debido a las discrepancias que hay en los browsers sobre el margen de muchos
elementos, uso una hoja de estilos reset para ponerlos en una base inicial común.
Ejemplo
● El diseño en Photoshop:
● Extrayendo las piezas:
Copio cada pieza en un layer aparte y luego la duplico en un documento aparte (en
layer, clic derecho, duplicate, destination: new document).
Luego se puede hacer trim (Image, Trim) para eliminar el espacio sobrante.
Si se desea un margen, luego del trim se puede ampliar el tamaño del canvas
(Image, Canvas size...).
</head>
<body>
<div id="container"></div>
</body>
</html>
Es importante que el container tenga position: relative o position:absolute para que
los elementos que contengan se puedan posicionar de modo absoluto luego.
<div id="container">
<div id="titulo">
Lorem <strong>ipsum</strong>
</div>
<div id="principal">
Lorem ipsum ignota scripta<br />
debitis ad has.<br />
Wisi forensibus et vis,<br />
eam ad eruditi blandit<br />
appetere.
</div>
<div id="pie">
Libris sanctus in vix, te pro magna semper facilisis.<br />
Eligendi vulputate te mei. Appareat erroribus<br />
assentior ne est.
</div>
</div>
Cuando se desea que el texto esté cortado de manera específica, como en el caso
de este aviso, uso <br/> para asegurar eso.
Uso <strong> y <em> para señalar las negritas o cursivas que hubiera.
#titulo {
position: absolute;
top: 34px;
left: 50px;
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
font-size: 48px;
background-color: #0f0;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
}
#principal {
display: none;
position: absolute;
top: 0;
left: 0;
background-color: #0f0;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
}
#pie {
display: none;
position: absolute;
top: 0;
left: 0;
background-color: #0f0;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
}
Ayuda bastante colorear el fondo del bloque (con #0f0, por ejemplo) y aplicarle
transparencia mientras se juega con los números top y left para calzarlo
exactamente en la posición requerida.
Incluso se puede hacer CTRL++ para que el browser haga zoom de la página y
podamos apreciar mejor los detalles.
Mientras se trabaja con un div, los otros están temporalmente invisibles con
display:none.
Cuando todos textos están posicionados:
Como hay diferencias entre el sistema de tipografía de Photoshop y el del browser,
es posible que el calce no sea perfecto, pero es importante tratar de aproximarse
all tipo de fuente, el tamaño de la fuente, la altura de la línea y la separación entre
caracteres.
Tal vez haya un modo de configurar Photoshop para que produzca texto que se
pueda calzar exactamente con el navegador.
#titulo {
1display: none;
position: absolute;
top: 34px;
left: 50px;
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
font-size: 48px;
background-color: #0f0;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
}
#principal {
1display: none;
position: absolute;
top: 105px;
left: 54px;
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
font-size: 24px;
line-height: 28px;
background-color: #0f0;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
}
#pie {
1display: none;
position: absolute;
top: 287px;
left: 52px;
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
line-height: 12.6px;
background-color: #0f0;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
}
Para comentar una línea CSS es útil el truco de anteponerle un número. Todos los
navegadores ignorarán esa línea. Yo suelo dejarlas disponibles durante la etapa de
desarrollo. Es en la versión final donde ya hago una poda de lo que no es necesario.
#corner_bottom {
1display: none;
background: url(images/corner_bottom.gif) no-repeat;
position: absolute;
top: 344px;
left: 0;
width: 56px;
height: 56px;
background-color: #0f0;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
}
#corner_top {
1display: none;
background: url(images/corner_top.gif) no-repeat;
position: absolute;
top: 0;
right: 0;
width: 56px;
height: 64px;
background-color: #0f0;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
}
#bola8{
1display: none;
background: url(images/bola8.png) no-repeat;
position: absolute;
top: 229px;
right: 34px;
width: 169px;
height: 150px;
background-color: #0f0;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
}
Aunque Dreamweaver permite mover con facilidad los elementos posicionados
absolutamente, no presenta la transparencia. Con un poco de práctica se hace
llevadero hacerlo a mano.
#redbox {
background-color: #f00;
width: 550px;
height: 400px;
position: absolute;
}
#whitebox {
background-color: #fff;
width: 530px;
height: 380px;
position: absolute;
top: 10px;
left: 10px;
}
...
<div id="container">
<div id="redbox">
<div id="whitebox"></div>
</div>
<div id="titulo">
Lorem <strong>ipsum</strong>
</div>
<div id="principal">
...
Quizás pudimos haber hecho el marco primero, para que dentro quedaran el texto y la bola.
En ese caso, los valores de posición de esos elementos serían ligeramente diferentes, pues
serían relativos a la esquina superior izquierda del cuadrado blanco.
Compatibilidad
El truco del guión bajo
A veces hay estilos que requieren valores diferentes para producir el efecto deseado en IE6.
Para esos casos, es útil el truco de usar un guión bajo al comienzo de la propiedad CSS.
Por ejemplo, _margin: 10px; será ignorada por todos los navegadores, excepto por IE6, que
la tomará del mismo modo que margin: 10px;
De ese modo, se pueden combinar ambas reglas para que en cada navegador produzcan el
mismo resultado:
#elemento {
background-color: #fff;
margin: 10px 20px;
_margin: 13px 23px;
}
#elemento {
background-color: #fff;
margin: 13px 23px;
}
PNGs en IE6
IE6 no maneja bien la transparencia de un PNG. Para que lo haga podemos usar pngFix,
que es un plugin para jQuery.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/
html4/strict.dtd">
<html lang="en">
<head>
<style type="text/css">
#container {
1background: url(foto.png) no-repeat;
width: 550px;
height: 400px;
position: relative;
}
#redbox {
background-color: #f00;
width: 550px;
height: 400px;
position: absolute;
}
#whitebox {
background-color: #fff;
width: 530px;
height: 380px;
position: absolute;
top: 10px;
left: 10px;
}
#titulo {
1display: none;
color: #f00;
position: absolute;
top: 34px;
left: 50px;
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
font-size: 48px;
/*
background-color: #0f0;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
*/
}
#principal {
1display: none;
position: absolute;
top: 105px;
left: 54px;
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
font-size: 24px;
line-height: 28px;
/*
background-color: #0f0;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
*/
}
#pie {
1display: none;
position: absolute;
top: 287px;
left: 52px;
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
line-height: 12.6px;
/*
background-color: #0f0;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
*/
}
#corner_bottom {
1display: none;
background: url(images/corner_bottom.gif) no-repeat;
position: absolute;
top: 344px;
left: 0;
width: 56px;
height: 56px;
/*
background-color: #0f0;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
*/
}
#corner_top {
1display: none;
background: url(images/corner_top.gif) no-repeat;
position: absolute;
top: 0;
right: 0;
width: 56px;
height: 64px;
/*
background-color: #0f0;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
*/
}
#bola8{
1display: none;
1background: url(images/bola8.png) no-repeat;
position: absolute;
top: 229px;
right: 34px;
width: 169px;
height: 150px;
/*
background-color: #0f0;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
*/
}
</style>
<script type="text/javascript">
$(document).ready(function() {
$('#bola8').pngFix();
});
</script>
</head>
<body>
<div id="container">
<div id="redbox">
<div id="whitebox"></div>
</div>
<div id="titulo">
Lorem <strong>ipsum</strong>
</div>
<div id="principal">
Lorem ipsum ignota scripta<br />
debitis ad has.<br />
Wisi forensibus et vis,<br />
eam ad eruditi blandit<br />
appetere.
</div>
<div id="pie">
Libris sanctus in vix, te pro magna semper facilisis.<br />
Eligendi vulputate te mei. Appareat erroribus<br />
assentior ne est.
</div>
<div id="corner_bottom"></div>
<div id="corner_top"></div>
<div id="bola8"><img src="images/bola8.png" alt="bola8" width="169"
height="150" /></div>
</div>
</body>
</html>
Pero pngFix no logra corregir el bug de IE6 para imágenes que son background, así que
hay que colocarla como img dentro del div correspondiente, indicando explícitamente sus
dimensiones.
Conclusión
Usar un elemento posicionado absolutamente dentro de otro posicionado ya sea
relativamente o absolutamente es el patrón base de la técnica que describo.
El uso de una imagen guía de fondo y la aplicación de transparencia a los elementos que
queremos calzar es de mucha ayuda posicionarlos con precisión.
Autor
Antonio Kobashikawa Carrasco
akobashikawa@gmail.com