Tag error:   ->  Textpattern Notice: Page template default does not contain a txp:article tag  on line 464
Netxus Foundries: CSS

Este truco es muy conocido y bastante extendido. Sin embargo, aquellos diseñadores con experiencia previa en Dreamweaver siguen usando JavaScript para implementar este efecto.

Hasta los navegadores de 4a generación, IE 5 y Netscape 4, teniamos que utilizar sencillas funciones en JavaScript (DreamWeaver sigue usandolas, así que un motivo más para olvidarse de esa herramienta) para cambiar la imagen de por ejemplo un botón, cuando pasabamos el raton sobre él o haciamos clic en él.

Con la llegada de navegadores con soporte medianamente decente para CSS, disponemos de un método mucho más eficaz y sencillo de implementar. La principal ventaja es que no hace falta usar JavaScript, con lo que este método funcionará incluso en aquellos navegadores que lo tengan desactivado.

El truco consiste en empaquetar las distintas versiones del botón en una única imagen. Aunque podríamos seguir usando distintas imagenes como con la técnica JavaScript, necesitariamos precargar todas las imagenes para que el primer efecto fuera adecuado.
En este ejemplo empaquetaremos las imagenes en vertical, ya que cada versión es mayor horizontalmente que verticalmente. De todas formas, es igualmente válido el ponerlas en horizontal, una al lado de la otra.

CSS RollOver

En el diagrama vemos que cada una de las versiones del botón está colocada debajo de la otra, en una solo imagen. La altura de cada versión es de 32 pixels y la anchura de 108 pixels. Aunque es tecnicamente posible el versiones de distintos tamaños, no es muy recomendable hacerlo ya que si no se sabe bien lo que se está haciendo podemos obtener un efecto rollover bastante malo.

La imagen que hemos creado es la siguiente, por favor, os ruego diculpeis mi falta de aptitudes para las artes plásticas.

CSS RollOver Button

Ahora vamos con el CSS, que es la parte fundamental de esta técnica. Asumimos que tenemos un boton en el HTML declarado con un enlace (<a>), es posible utilizar otros elementos, sin embargo, si usamos otra cosa que no sea un enlace no funcionará en Internet Explorer, que por mucho que nos pese, sigue siendo el navegador más usado.

El código HTML pinta así


 <a href="#" class="boton">Home</a>
 <a href="#" class="boton">Links</a>

Vemos que hay definidos dos enlaces con la clase boton. Ahora le añadimos un poco de CSS para aplicar el efecto.

css:
  1. a.boton {
  2.   // Definimos la dimension del botón
  3.   display: block;
  4.   width: 98px;  // 108 - horizontal padding
  5.   height: 25px; // 32 - vertical padding
  6.   // Posicionamos el texto dentro del boton
  7.   padding: 7px 0 0 10px;
  8.   // Le asignamos la imagen
  9.   background-image: url( boton.png );
  10.   background-repeat: no-repeat;
  11.   background-position: 0 0;
  12. }
  13.         // Para cuando pasemos el ratón por encima
  14. a.boton:hover {
  15.   background-position: 0 -32px;
  16. }
  17.         // Ahora para cuando hagamos click en él
  18. a.boton:active {
  19.   background-position: 0 -64px; // 32x2
  20. }

Este ejemplo quedaría así


Home
Links

Como se puede apreciar, esté método resulta muy útil a la hora de diseñar web sites. Con un poco de práctica y algo de imaginación podemos realizar bastantes efectos simplemente con CSS.

Jun 23, 12:26 AM 1 comment

El estándard CSS define un sistema de formateo muy sencillo e intuitivo, sin embargo por alguna razón no todo el mundo acaba de entenderlo.

Basicamente en CSS todos los elementos son cajas, es decir, tienen una anchura y una altura (aunque sean normalmente implicitas por el contenido). Esto simplifica enormemente el posicionamiento de objectos, ya que una caja es una forma geometrica muy simple y muy fácil a la hora de calcular operaciones como el apilamiento por ejemplo.

Estas cajas pueden tener diversas formas de posicionarse. La más común es la de posicionamiento En Linea (inline), donde las cajas se van posicionando de izquierda a derecha (o al revés para páginas en arabe por ejemplo), formando líneas. Logicamente no podemos crear un diseño atractivo simplemente con el uso de líneas, ya que eso no sería un gran cambio con respecto a las tablas de toda la vida.
Para evitarlo disponemos de otros métodos de posicionamiento de cajas: fijo (fixed) y absoluto (absolute). Sin entrar mucho en detalles, el modo fijo nos permite posicionar arbitrariamente una caja con respecto a la ventana, mientras que el absoluto es practicamente igual solo que con respecto a todo el documento.

Dentro del posicionamiento en linea, podemos definir como queremos que actue una caja al alinearse con otras. Podemos hacer que una caja actue como un contenedor, el cual por defecto se mantendrá solo en su propia línea, no permitiendo que otras cajas se alineén con él horizontalmente. Para cambiar esta forma de actuar podemos flotarlo hacia la izquierda o la derecha, según nos convenga. Cuando flotamos una caja lo que estamos diciendo es que no nos importa que se use el espacio restante de la ‘línea’ que ocupa para otros elementos. Esto significa que al flotar una caja esta se sale del flujo normal del documento, con lo que realmente no está creando una línea horizontal, simplemente tiene una coordenada de origen, una anchura y una altura. Si no queremos que sea así, usaremos la propiedad ‘clear’.

Asi que para saber como va a quedar una página sin tener que experimentar mucho previsualizandola, solo tenemos que tener en cuenta el tipo de posicionamiento que tienen las cajas (elementos) y si son flotantes o no. Además es muy importante tener en cuenta que el documento se renderiza de arriba a abajo (y de izquierda a derecha aunque puede invertirse).

Logicamente el estándar CSS tiene muchas más opciones de posicionamiento y formas de controlar el flujo de los elementos, sin embargo las aquí descritas són las que se utilizan en el 95% de los casos.

Tambien es imprescindible que sepamos más o menos de que tipo son los elementos comunes, por ejemplo em es de tipo en linea mientras que p al igual que las hX es una caja contenedora, que ocupará todo el espacio horizontal por defecto.

I’ve just spend an hour chatting with Daniel Mota (aka IceBeat) about his project CSSing. I’ve been following its developement for some months now, in fact I started my own version, MacroCSS, since he didn’t have released the source code at that time.

I didn’t have the time to continue the development of MacroCSS, I did manage though to implement a SAC based parser for CSS which turned out to be quite powerful. IceBeat was searching with a post in his blog for a replacement for his regular expression based parser. I pointed him to MacroCSS and he was quite impressed with it.

After chatting with him I’m quite happy, not just because he liked my parser but because we almost share the same vision for this project. Since as I said, I don’t have the time to continue the development of MacroCSS on my own, I’m deprecating it and I’ll focus on helping IceBeat with CSSing in what I can.

I really think this project could be a real hit for the web development comunity, it fits really well with other ‘web 2.0’ (hell, how much I hate that term) technologies like ajax (I hate this one even more). So if anyone is reading this and wants to help out, he/she will be more than welcome.