Saltar índice de contenido - Desplazarse al índice de navegación.
Contenido: Preliminares. Caja centrada. Dos columnas. Tres columnas. Marcos sin marcos. Bloques en línea. Fondo elástico. Comentarios.
En el anterior taller hemos visto algunas técnicas de implementación de ciertas características del nivel 2 de CSS. Supongo que es un buen momento para utilizar toda esa munición. Para comprender estos modelos, amén de la lectura comprensiva del mencionado taller, es conveniente estar familiarizado con la especificación CSS2. A continuación unos cuantos ejemplos simples de maquetación. Son modelos que tradicionalmente se conseguían mediante tablas. Quizás en un futuro taller se aborden esquemas más complejos y acabados. Sin embargo, en este primer contacto ha primado la sencillez sobre todo lo demás.
El ya clásico problema de centrar un cuadro en horizontal y en vertical. Bajo mi punto de vista admite tres versiones más una, y por tanto hay cuatro ejemplos.
Este ejemplo es de una simplicidad aplastante. Simplemente se posiciona en absoluto la caja y se especifican sus coordenadas y dimensiones a porcentaje.
<div id="CentradaLL">... contenido de la caja... </div>
div#CentradaLL { position:absolute; top:10%; left:10%; width:80%; height:80%; }
Ejemplo: Caja centrada (margen líquido-contenido líquido).
El truco consiste en posicionar la caja al cincuenta por ciento. El efecto de centrado se consigue dando unos márgenes negativos que sean la mitad del ancho y del alto.
<div id="CentradaLS">... contenido de la caja... </div>
div#CentradaLS { position:absolute; top:50%; left:50%; width:500px; height:300px; margin-left:-250px; margin-top:-150px; }
Ejemplo: Caja centrada (margen líquido-contenido sólido).
La caja es absoluta, y se dibuja a partir de sus coordenadas. Internet Explorer no es capaz de calcular las dimensiones de una caja a partir de esos valores, de manera que se incluye un script que maneja el evento resize para calcular.
<div id="CentradaSL">... contenido de la caja... </div>
div#CentradaSL { position:absolute; top:64px; right:64px; bottom:64px; left:64px; }
var MargenH = 80; var MargenV = 64;
var ELM = (document.getElementById);
var IE5 = ((ELM) && (navigator.userAgent.toLowerCase().indexOf('msie')!=-1) && !(window.opera));
if (IE5) window.onresize=Dimensionar;
function Dimensionar () {
document.getElementById('CentradaSL').style.width = (document.body.clientWidth-2*MargenH)+'px';
document.getElementById('CentradaSL').style.height = (document.body.clientHeight-2*MargenV)+'px';
}
Ejemplo: Caja centrada (margen sólido-contenido líquido).
Antes de pasar a otros modelos, podemos detenernos en un caso parecido, como puede ser el de centrar sólo en horizontal una caja de ancho fijo. Es un modelo que tradicionalmente se ha venido haciendo insertando el contenido en una tabla, y esta a su vez en un div alineado y también en un obsoleto elemento center. La solución es tremendamente sencilla, con un solo elemento:
<div id="CentradaHS">... contenido de la caja... </div>
div#CentradaHS { width:400px; margin:auto; }
Sin embargo, y una vez más, Internet Explorer parece no reconocer la declaración CSS. Para conseguir lo mismo, podemos recurrir a una ligera artimaña, basada precisamente en otro error de interpretación:
<div id="Contenedora">
<div id="CentradaHS">... contenido de la caja... </div>
</div>
div#Contenedora { width:100%; text-align:center; }
div#CentradaHS { width:400px; margin:auto; text-align:left; }
La declaración text-align:center no debería tener efecto sobre la colocación del bloque interior, sino sobre sus elementos en línea, pero este nuevo fallo de implementación nos permite simular el comportamiento correcto. Obsérvese que hay que corregir la alineación real en la segunda regla.
Ejemplo: Caja centrada en horizontal (contenido sólido).
La presentación a dos columnas es una de las más repetidas, más que típica es ya un tópico. Hay varias maneras de conseguirla, y la más sencilla pasa por definir ambas columnas a porcentaje. Aquí vamos a optar por una disposición algo más arriesgada, consistente en bloquear el tamaño de la columna izquierda. El mayor peligro que se corre es que la derecha quede demasiado estrecha cuando las dimensiones de la ventana sean pequeñas, lo cual se salva utilizando la propiedad min-width. En el anterior taller se da la solución para cubrir esta última propiedad en Internet Explorer, que no la reconoce.
<div id="Izquierda">... contenido de la caja izquierda... </div>
<div id="Derecha">... contenido de la caja derecha... </div>
div#Izquierda { position:absolute; top:0; left:0; width:200px; height:inherit; }
div#Derecha { margin-left:200px; min-width:350px; }
Si la anterior es un tópico, ésta es el "Santo Grial", al menos así llaman muchos a la presentación a tres columnas. Incluso el W3C adopta este esquema en su página inicial, pero lo gestionan mediante una tabla (en casa del herrero cuchillo de palo). Aquí lo haremos a nuestra manera, y por supuesto sin tablas. Simplificando al máximo, las cajas laterales van posicionadas en absoluto y su ancho es fijo. Al estar fuera de flujo, el lugar que ocupan dentro del código HTML es lo de menos. Los márgenes de la caja central tienen que coincidir con lo que ocupan las cajas laterales.
Para evitar que los contenidos se superpongan cuando el tamaño de la ventana sea pequeño, se anidan las tres cajas en otra que hace uso de la propiedad min-width. Además del apaño para emular esto mismo en Internet Explorer, también hay que hacer unos retoques mínimos en los márgenes de las cajas centrales, debido a que las cajas tienen borde, y el citado navegador también los interpreta incorrectamente.
<div id="Madre">
<div id="Izquierda">... contenido de la caja izquierda... </div>
<div id="Central">... contenido de la caja central... </div>
<div id="Derecha">... contenido de la caja derecha... </div>
</div>
div#Madre { position:relative; min-width:620px; height:inherit; }
div#Izquierda { position:absolute; top:0; left:0; width:180px; height:100%; }
div#Central { margin-left:179px; margin-right:179px; }
html>body div#Central { margin-left:181px; margin-right:181px; }
div#Derecha { position:absolute; top:0; right:0; width:180px; height:100%; }
La manida presentación en paneles, usual en las páginas que usan marcos (ver el debate sobre marcos), puede reproducirse sin necesidad de usarlos, al menos en las últimas versiones de Internet Explorer y en los navegadores basados en el núcleo "Gecko". Otros navegadores importantes, como Opera o Konqueror no reconocen la declaración overflow:auto; y su aplicación acarrea graves problemas de accesibilidad, al poder quedar oculta una parte del texto. De manera que para evitar esto, se parte de un modelo más sencillo (que se deja como ejercicio para el lector) para aplicar el estilo avanzado donde funcione. Por lo demás, el modelo es muy simple, tres cajas posicionadas con dimensiones porcentuales.
<div id="Superior">... contenido de la caja superior... </div>
<div id="Izquierda">... contenido de la caja izquierda... </div>
<div id="Derecha">... contenido de la caja derecha... </div>
body { overflow:auto; }
div#Superior { position:absolute; top:0; left:0; width:100%; height:15%; overflow:auto; }
div#Izquierda { position:absolute; top:15%; left:0; width:25%; height:85%; overflow:auto; }
div#Derecha { position:absolute; top:15%; left:25%; width:75%; height:85%; overflow:auto; }
A falta de una propiedad CSS más indicada para esto que sea soportada por una mínima parte de navegadores, nos tenemos que conformar con utilizar cajas flotantes. La única pega es que si no tienen todas la misma altura la colocación es impredecible, y no tiene arreglo sin utilizar el DOM (e incluso ni por esas).
<div>...contenido de la caja...</div>
<div>...contenido de la caja...</div>
<div>...contenido de la caja...</div>
...
div { float:left; width:190px; height:190px; margin:1px; }
Este modelo da solución al problema de incluir un fondo con ornamento en los bordes, pero que pueda cambiar de tamaño sin problemas. Es más difícil explicarlo que ponerlo en funcionamiento.
<div id="Todo">
<div id="CajaN">
<div id="CajaNO"></div>
<div id="CajaNE"></div>
</div>
<div id="CajaO">...contenido de la caja...</div>
<div id="CajaS">
<div id="CajaSO"></div>
<div id="CajaSE"></div>
</div>
</div>
div#Todo { margin:48px; background:#FC9 url('fondo_e.png') right top repeat-y; }
div#CajaN { height:45px; background:url('fondo_n.png') repeat-x; }
div#CajaNO { float:left; width:45px; height:45px; background:url('fondo_no.png') no-repeat; }
div#CajaO { background:url('fondo_o.png') repeat-y; }
div#CajaNE { float:right; width:45px; background:url('fondo_ne.png') right top no-repeat; }
div#CajaS { height:45px; background:url('fondo_s.png') repeat-x; }
div#CajaSO { float:left; width:45px; height:45px; background:url('fondo_so.png') no-repeat; }
div#CajaSE { height:45px; background:url('fondo_se.png') right top no-repeat; }
Publicado por docpid, 20/02/07, 03:24
al usar el css para hacer el diseño de una caja lateral con un menu y una caja central con el contenido de la pag. como hago para que al pulsar un link del menu. la pagina a la que hace referencia el link se cargue en la caja principa.
Publicado por zdgcpymka rlzyuik, 11/04/07, 03:39
ovmsqpc coaxlvskp mgrsjtqyx uqwozl tpugknsx pgmdvkuob bsufz
Publicado por Plegetonyare, 01/06/07, 07:15
En primer lugar muchas gracias por la web, es genial!
Estoy intentando hacer el ejemplo de Fondo elástico para simular una hoja con una sombra alrededor del borde derecho y el inferior.
En Firefox sale perfecto, sin embargo en IE no se por qué parece que se repite, al final, un trozo superior de la hoja!!!
Para que veais a lo que me refiero os pongo las urls con los capturas(espero que eso se permita, si no es así, mis disculpas al webmaster):
http://s148.photobucket.com/albums/s14/plegetonyare/?action=view¤t=capt_ff.gif
http://s148.photobucket.com/albums/s14/plegetonyare/?action=view¤t=capt_ie.gif
El código que utilizo es el siguiente:
body {background-color: #CCCCCC;}
#CajaN, #CajaNO, #CajaNE, #CajaS, #CajaSO, #CajaSE { height:8px;}
#CajaNO, #CajaSO { width:8px; }
#CajaNO, #CajaSO { float:left; }
#Todo { background:#FFFFFF url(img/ombra_e.gif) right top repeat-y; }
#CajaNE { background:url(img/ombra_n_e.gif) right top no-repeat; }
#CajaSO { background:url(img/ombra_s_o.gif) no-repeat; }
#CajaS { background:url(img/ombra_s.gif) repeat-x; }
#CajaSE { background:url(img/ombra_s_e.gif) right top no-repeat; }
Alguien sabe el por qué de este fenómeno paranormal? :P
Una vez más gracias por todo y saludos,
Plegetonyare
Publicado por jaider, 10/07/07, 05:13
Hola!! me parece magnifico los aportes de esta web. pero aun no logro "cogerle la caña", para entender como funciona completamente. tengo la siguiente Necesidad:
una capa "columna" que aparezca a la derecha de la web con una serie de articulos, pero quiero que se pueda ocultar y reaparecer, segun quiera el lector.
lo que tengo hasta el momento es una tabla con aling a derecha fija, pero al envolverlo en un div y con visivility en hidden, me deja un hueco y el texto de la izq no se alinea a ocupar ese espacio, haciendome ver que hay sigue la tabla.
como haria esto????
Publicado por felipe, 09/11/07, 03:15
cuando muevo la ventana del explorador la plantilla o caja se justa pero cuando coloco un swf no lo ajusta a mi area editabel y la corre no se que hacer.
por ayuda gracias
Publicado por zhnjqc tapr, 22/11/07, 04:36
rgkjeabyv owfme axbe kigjncapt zqoprs aoce ljhpzxsu
Publicado por , 24/12/07, 01:17
aFjDBH <a href="http://tivkwkixkfyg.com/">tivkwkixkfyg</a>, [url=http://xklxftnjvbxi.com/]xklxftnjvbxi[/url], [link=http://gcuugjtfqrnq.com/]gcuugjtfqrnq[/link], http://faiwcjdgyjyc.com/
Publicado por Regina, 29/03/08, 11:24
Hello, Your site is perfect, sorry for my post http://www.yeropii7.net/1.html <a href=http://www.yeropii7.net/2.html>home insurance</a> [URL=http://www.yeropii7.net/3.html]car insurance[/URL] [LINK=http://www.yeropii7.net/4.html]health insurance[/LINK] sorry one more time
Publicado por rayfer, 16/04/08, 03:42
hola tengo un problema: por ejemplo tengo un contenedor con width:100%; y dentro de este tengo 3 con width:33.333%; y float:left; luego en FIREFOX queda estupendo incluyendo los demás navegadores pero en OPERA es como si le faltaran unos pixeles para llegar a tomar todo el ancho del contenedor padre al 100%, si alguien conoce alguna url o sepa alguna solución por favor escríbanme a albermontes@gmail.com gracias mil un saludo
08/05/2002. sysifus. Taller nº 3.
Estás en: tierra de nómadas > tallerWeb > Maquetación CSS.