Pequeño hack para IE: El hack del selector universal

Sinceramente detesto los hacks en CSS. Sólo agregan código que solamente ensucia tu CSS por culpa de algún navegador con errores de interpretación en las especificaciones (léase Internet Explorer). Tal vez los dolores de cabeza más conocidos por los desarrolladores, sean los misteriosos márgenes duplicados, o el tener que usar —en ciertas ocasiones y en ciertos elementos— padding en vez de margin, sin ninguna razón aparente, todo porque IE así ha dicho que sea.

Hay hacks de todo tipo y para todos los navegadores, buscando un poco en Position Is Everything tal vez puedas encontrar la solución a tu problema. Pero si no la has encontrado, todavía puedes usar el último recurso: * html.

Vamos por partes. El selector universal, representado por el caracter asterisco (*) selecciona todos los elementos del árbol del documento. Esto quiere decir que la siguiente regla:

* { color: red; }

Le asignaría el color rojo a todos los elementos del árbol del documento, sobreescribiendo así su herencia (Eric tiene un excelente artículo sobre el poder de los selectores universales). Así, cualquier elemento de un documento HTML tendría el color rojo asignado.

Ahora bien, volviendo a nuestro hack:

* html { }

Esta regla en CSS, quiere decir “aplica esta regla a todos los HTML hijos del elemento universal”, o lo que es lo mismo, “aplica esta regla a todos los HTML descendientes de *“, o “selecciona todos los HTML hijos/descendientes de todos los elementos”. Ahora bien, como HTML es el elemento root por defecto (es decir, es el elemento por el cual comienza el árbol del documento ), no selecionariamos nada, ya que HTML no puede ser hijo de ningún otro elemento. La regla entonces no tiene sentido, pero es válida en CSS y nos servirá para ocultar reglas a navegadores buenos y mostrarlas al navegador malo (IE), ya que cualquier regla empezando por * html, es interpretada por IE (lo veremos más adelante) y puede ser usada a nuestro beneficio.

Esta regla, aunque sencilla, puede prestarse a confusión. ¿Por qué decimos “selecciona todos los HTML hijos de *” y no “selecciona todos los HTML”, o en todo caso, “selecciona EL HTML”? Si estamos pensando en “selecciona todos los HTML”, estamos pensando en D.O.S., en donde poner un dir *.txt quiere decir “muestra todos los archivos .txt”. Aquí, el espacio en blanco hace la diferencia. Al tener el espacio en blanco, estamos aplicando selectores descendentes y el elemento universal se toma simplemente como eso, como el elemento que quiere decir “todos los elementos”. La clave es esa, el elemento * significa “todos los elementos”, y no “todos los elementos X”.

Volviendo al hack, Firefox y Opera simplemente ignoran cualquier regla que empiece con * html, sin embargo, IE la interpreta. Entonces, el siguiente código:

* html body h1 { color:blue; }

Es interpretado por Internet Explorer como html body h1 { color:blue; } (noten que no interpreta el asterisco) y el resultado sería que todos los H1 (hijos de BODY y obviamente de HTML) tendrían color azul. En Firefox y Opera, no pasaría nada.

El hack funciona siempre poniendo a BODY como elemento hijo de HTML y luego poniendo el elemento que queremos estilizar, es decir, poniendo siempre * html body mi-elemento, lo cual es lógico, pues según el árbol del documento, no hay elementos para dar estilo entre HTML y BODY, es decir, no podríamos poner algo como * html h1 (nos estaríamos salteando a BODY, lo cual es incorrecto, pero sin embargo valida perfectamente).. Funciona si se pone * html h1, no hace falta ser tan estrictos con el árbol del documento siempre y cuando respetemos qué elemento contiene a quién (gracias Fede).

Nota: No lo piensen mucho ni se descerebren como yo, según el blog de IE, este hack ya está deprecado. Pero quien sabe, hasta que salga IE7 todavía puede serles útil :)

Como crear tu propio tema para Wordpress (Parte 1)

Bueno, ésta es la primer entrega de la serie “como crear tu propio theme para Wordpress desde cero”. En esta serie de artículos trataré de explicar, dummies-friendly, cuales son los pasos necesarios para crear tu propio theme o template para Wordpress, el sistema de publicación para blogs más usado hoy en día.

Qué necesitas saber/tener para aprovechar al máximo estos artículos:

  • Tener una copia de Wordpress 1.5 instalado en tu servidor personal o en tu hosting. Lo recomendable es hacer todas las pruebas en tu servidor web personal.
  • Mínimos conocimientos de XHTML, CSS y PHP.
  • Curiosidad por ver como funcionan las cosas y muchas ganas de sacar los vestigios de Kubrick de tu blog :)

Vá a ser un artículo realmente introductorio, apto para que cualquier persona curiosa —y con ganas de modificar su theme actual— pueda echar mano en el código y armar su propio theme para Wordpress. Sin más, empecemos entonces por ver lo primero: La anatomía de Wordpress.

La estructura de Wordpress

Wordpress tiene una forma bastante lógica de manejar las “caras” de los blogs. De hecho, ésta forma de armar un blog les será conocida a los que vienen programando sitios dinámicos. La idea es básicamente separar cada sección del blog en archivos independientes, de manera que cada archivo pueda modificarse como deseemos. Luego, cada archivo o sección del blog, podrá llamarse desde un archivo maestro para armar cada tema.

Este archivo maestro en Wordpress se llama index.php. Como veremos más adelante, este template (para no confundirnos, llamaremos así a los archivos de Wordpress que se usan para crear un tema) incluirá llamadas a los otros templates de cabecera, contenido, barra lateral y pie de página que conformarán el blog.

Además de estos templates fundamentales, Wordpress también tiene templates especiales para los comentarios, las categorías, los enlaces, los autores, los archivos del blog, la página de búsqueda y hasta para la página 404 (error que devuelve el servidor cuando no se encuentra una página determinada). Por otro lado, este CMS es también capaz de manejar páginas individuales para el blog. Esto nos permitirá, por ejemplo, manejar secciones (digamos, “acerca de”, “portfolio”, “contacto”, etc.). Si me estuvieron siguiendo, entonces ya se van dando una idea de donde radica el potencial de este sistema de publicación: Wordpress también puede ser usado como un perfecto CMS para sitios de propósito general, y de hecho, no tiene nada de que envidiar a sus primos más grandes como Drupal o Mambo.

Veamos gráficamente el árbol de directorios de una instalación clásica de Wordpress:

/
wp-admin
  	wp-content
		plugins
		themes
			classic
			default
	wp-images
		smilies
	wp-includes
…
…

En la raíz de una instalación de Wordpress encontramos los archivos de configuración del sistema de publicación, además de carpetas con funciones que luego serán usadas por el CMS (agrupadas en archivos con extensión PHP). La carpeta wp-admin contiene todas las funciones que se usarán en el panel de administración de Wordpress. En wp-images residen las imágenes que vienen con el CMS, (como ser los emoticones) y las imágenes que se usarán en el panel de administración (el logo del sistema, las imágenes de fondo). En wp-includes encontraremos las funciones que manejan los comentarios, los enlaces, y algo muy importante, las funciones que definen las etiquetas (tags) para armar los templates (veremos que son más adelante).

Dejamos para el último la carpeta wp-content, puesto que es la que más nos interesa. En ella deberemos incluir los templates que conformarán nuestro tema de Wordpress. Los templates de cada tema se agrupan en carpetas (fíjense que la instalación básica de Wordpress trae 2 temas por defecto, classic y default). Como no somos originales, nuestro nuevo tema será bautizado como “mitema”, por lo que crearemos una carpeta con ese nombre dentro del directorio themes.

Además, dentro de la carpeta wp-content, hay una sub-carpeta llamada plugins, que servirá como repositorio para la instalación de plugins para Wordpress. Un plugin permite personalizar el sistema agregando funcionalidades extra de una manera sencilla (basta copiar y pegar el plugin y activarlo desde el panel de administración).

En resúmen: Para crear un nuevo tema para Wordpress, el único directorio que nos interesa es /wp-content/themes/. En el estarán los templates que conformarán nuestro nuevo tema. Cada tema, tendrá su propia carpeta.

Esta fue la primer entrega. Mañana seguiremos explicando más sobre la creación de un tema nuevo para Wordpress. Cualquier duda, en los comentarios :)

Una introducción a XHTML

Nota: El siguiente artículo fué publicado en la revista argentina USERS, en la edición #171. El contenido del mismo está bajo una licencia Reconocimiento-NoComercial-SinObraDerivada 2.0. Este artículo puede puede haber sido editado para la versión impresa de la revista con el fin de evitar localismos. Actualmente, se encuentra en proceso de revisión, se omitieron capturas de pantalla y recuadros informativos. Les aconsejo comprar la revista, o esperar a que el artículo esté disponible en la web de Tectimes para descargarlo en formato PDF.
Siguiendo con nuestra serie de artículos sobre desarrollo web orientado a estándares, en esta ocasión les explicaremos en que consiste XHTML, explicando paso por paso la estructura de un documento en este lenguaje.

Continue reading…



Copyright © 2004–2010 Rodrigo Galindez. All rights reserved. Hosting by XMundo Networks.

RSS Feed. Proudly powered by Wordpress. Correct at time of going to print.