SlideShare una empresa de Scribd logo
1 de 8
Buenas prácticas en la codificación HTML/CSS (El código HTML/CSS afecta al
rendimiento).
Temas relacionados: Tablas y CSS's | Óptimizar para Buscadores | PageRank en
Google | Éxito en Google
Contenido:
1. Introducción: resolución de conflictos por el navegador
2. Consejos en la codificación de Tablas
o 2.1 Anidamiento
o 2.2 Aspectos gráficos mediante tablas
o 2.3 Estructurar contenidos
o 2.4 El atributo WIDTH
o 2.5 El atributo HEIGHT
o 2.6 El atributo TABLE-LAYOUT
o 2.7 Formato HTML de Tablas, Filas y Celdas
o 2.8 HTML de Tablas bien formado
o 2.9 El atributo WHITE-SPACE
3. Consejos en la codificación de Listas
o 3.1 Especificación de marcadores (bullets)
o 3.2 HTML de Listas bien formado
4. Estilos y CSS's
o 4.1 Estilos "inline"
o 4.2 Formas de aplicar formato
5. Pseudo Clases para Links
o 5.1 Especificación de las pseudo-clases de hiperenlace en el órden correcto
6. Conflictos de estilos
o 6.1 Especificidad
o 6.2 Nomenclatura de reglas
1. Introducción: resolución de conflictos por el navegador:
Quizá una de las razones que ha colaborado a que haya millones de sitios en Internet
es la facilidad y rapidez con que cualquiera sin demasiada formación técnica aprende
HTML. Al menos los rudimentos más básicos para formatear páginas.
La segunda razón es la capacidad que tienen los browsers para interpretar HTML
incorrectamente escrito, al menos con algunos tipos de incorrecciones. De todos los
browsers actuales es, desde luego, Intenet Explorer el que mejor inetrpreta HTML-
mal formado.
Y esta capacidad de los navegadores de renderizar correctamente una página
burdamente escrita se basa en la lógica que tienen implementada para la resolución
de conflictos.
Por poner un ejemplo muy básico, se debería escribir un párrafo de texto entre los
tags <p> y </p>. Sin embargo, si el autor de la página abre un párrafo con <p> y
se le olvida cerrarlo, y abre el siguiente párrafo con un nuevo <p> que tampoco
cierra, el navegador interpretará que empieza nuevo párrafo, dará por supuesto el
cierre del primero, el del segundop y así sucesivamente.
La consecuencia negativa inducida de esta "buena virtud" es que esto ha contribuído
mucho al escaso cuidado con que los autores de páginas trabajan y a los escasos
conocimientos con los que se embarcan en la aventura.
Y las malas noticias son que esto no es gratis. Porque el navegador enmplea tiempo
(a veces muy apreciable si la página es extensa) en terminar de "pintar" un página
incorrectamente escrita, es decir, en resolver los conflictos por incorrecciones de
sintáxis.
Si, por ejemplo, escribimos una lista y no incluímos el tag de cierre de lista, </ul> el
navegador probablemente recorrerá todo el HTML de la página buscando el cierre
antes de tomar la decisión de dónde acaba la lista. Y si en la página hay más listas,
unas cerradas y otras no, el tema puede complicarse.
La conclusión es que vale la pena aprender HTML a fondo y aplicarse en escribirlo
sintácticamente correcto.
2. Consejos en la codificación de Tablas:
El elemento de código conflictivo por excelencia (al márgen del peso de las
imágenes, HTML Dinámico, carga y ejecución de JavaScript o Applets) son las Tablas.
Habida cuenta que es la forma absolutamente generalizada que tienen los
programadores de estructurar y situar contenidos y datos en la página, el tag y sus
atributos y relacionados se encuentan con gran profusión en cualquier aplicación.
Con frecuencia, para lo que menos se usan es para tabular datos en el sentido más
tradicional.
1. 2.1 Anidamiento: Está muy generalizado el que se suele incurrir en un
anidamiento de tablas excesivo lo que conlleva, por un lado el aumento del
peso de la página, por otro su longitud en caracteres (e indirectamente la
dificultad de mantenimiento), y, sobre todo, que para empezar a renderizar
la tabla padre el browser ha de haber completado la tabla hija, y para
completar la hija debe haber completado la de 3º nivel… y así
sucesivamente.
Al respecto de su uso y abuso, conviene hacer las siguientes
consideraciones:
 Evitar en lo posible el anidamiento de tablas, al menos, reducir el
número de niveles lo más posible.
2. 2.2 Aspectos gráficos mediante tablas: Se utilizan tablas dentro de
tablas para conseguir efectos gráficos: bordes-dobles, rellenos, distancias a
márgenes... Esto es un error mayúsculo e implica que se desconocen las
enormes posibilidades que ofrecen las CSS, utilizando en su defecto código
oneroso:
 Implementar todas las características gráficas de las tablas:
 Relleno (padding) de tabla y de celdas
 Distancias a bordes (margin)
 Bordes de tablas y de celdas
 Fondos de tabla, filas y celdas...
En concreto, mediante los atributos border-collapse y border-
spacing del modelo de tablas con bordes separados se pueden
conseguir efectos visuales muy interesantes.
3. 2.3 Estructurar contenidos: Se utilizan tablas dentro de tablas para incluir
secciones de una tabla (como por ejemplo una botonera, un grupo de
enlaces, un submenu…).
 Utilizar los encabezados /pies de
tabla <caption> con "align=top" y "align=bottom" (o el
atributo "caption-side: top,bottom" en la clase correspondiente), e
incluir elementos de formato contenedores ( <span>) que no sean
celdas.
 Utilizar tantos encabezados/pies de tabla como sean precisos para
especificar zonas adicionales de las mismas, siempre que esto ayude
a evitar tablas adicionales al respecto.
4. 2.4 El atributo WIDTH: Es muy recomendable utilizar "width" en tablas y
celdas:
 Utilizar siempre "width" en tablas y celdas en valor absoluto o relativo
según proceda, y siempre entre comillas dobles "width= 20%":
 Hay que aportar al browser la información necesaria para que
prediga dónde terminará físicamente la tabla: agiliza mucho
la renderización.
 De no existir esta información el browser tiene que recalcular
el ancho y alto de filas, columnas y celdas en función del
contenido de estas, y esto puede requerir, además, realizarlo
en varias pasadas, lo que penaliza mucho la renderización.
5. 2.5 El atributo HEIGHT: Utilizar el atributo "height" dentro del código HTML
para especificar la altura de una celda es uno de los desaciertos más típicos
en que caen los desarroladores de páginas, entre otras razones, porque es
aceptado por Internet Explorer, pero no es un estándar-HTML.
 La altura de filas o celdas debe especificarse mediante los
atributos "heigth" o "line-heigth" de las clases de estilo que les dan
formato.
 De ser preciso especificarlo en el HTML debe hacerse a nivel de fila,
en el "<tr>": aplicará a todas las celdas, reducirá el código y facilitará
la renderización de la tabla.
6. 2.6 El atributo TABLE-LAYOUT: Utilizar siempre que sea posible el
atributo "table-layout: fixed" (algoritmo de composición fija)
 Este atributo se especifica en la clase de estilo definida para la tabla.
 En este caso, el browser pinta la estructura de la tabla utilizando sólo
la información de anchos y altos de filas y celdas, ignorando
totalmente los contenidos de estas.
 La renderización será mucho más rápida que si utiliza un algoritmo
de composición automática, en cuyo caso tiene que analizar los
contenidos de las celdas, y en función de estos, ir recalculando las
dimensiones de filas, columnas y celdas para, a continuación,
pintarlas, lo que en ocasiones suele requerir varias pasadas hasta
obtener la disposición final de la tabla.
7. 2.7 Formato HTML de Tablas, Filas y Celdas: No utilizar (salvo que sea
imprescindible) elementos de formato codificado directamente en HTML en
tabla, filas o celdas.
 Todo, incluyendo alturas, colores de fondo, bordes, paddings,
margenes y características de fuentes... debe ir en clases de estilo
asociadas a tabla, filas o celdas.
 Simplifica el código en extensión y legibilidad, y ayuda mucho
a estructurarlo y mantenerlo.
 Simplifica la renderización porque el browser tendrá que
"recordar" sólo algunas clases de estilo para pintar una
estructura compleja y no tendrá que leer+asignar estilo
contínuamente a cada una de las celdas y sus contenidos.
 Facilita mucho la modificación del diseño y su reutilización.
8. 2.8 HTML de Tablas bien formado: Evitar tener algún tag de la
tabla "<tr>", "<td>", "<th>", "<caption>" sin cerrar.
 Aunque IE sea capaz de renderizar la estructura de una tabla
correctamente estando la sintáxis de la misma incompleta, en
muchos de los casos, supone un tiempo adicional de recorrido de la
estructura para llegar a pintar la tabla. Esto es especialmente grave
en tablas anidadas.
9. 2.9 El atributo WHITE-SPACE: A nivel celda, especificar si es posible en la
clase de estilo como se tratarán los espacios en blanco:
white-space:
 normal
 pre
 nowrap
3. Consejos en la codificación de Listas:
1. 3.1 Especificación de marcadores (bullets): No utilizar especificación de
marcadores en los tags <>:
 Cualquier especificación de formato, incluído el tipo de marcador,
debería ir en una única clase de estilo específica el tipo de lista no-
oredenada (<ul>) u ordenada (<ol>).
 Simplifica el código en extensión y legibilidad, y ayuda mucho
a estructurarlo.
 Simplifica la renderización porque el browser tendrá que
"recordar" sólo 1 clase de estilo para pintar una lista entera y
no tendrá que leer + asignar estilo a cada elemento de la
lista.
 Facilita mucho la modificación de la apariencia de la lista y su
reutilización.
2. 3.2 HTML de Listas bien formado: Asegurarse siempre de que todos los
elementos de la lista tienen el tag de cierre y no hay coflictos en el orden de
cierre con otros tags relacionados (<p>, <font>...):
 Si no se cierra un tag <> el browser deberá recorrerse la lista entera
para poder reconstruirla. Esto es especialmente crítico en listas
anidadas (en las que además habrá que vigilar el cierre y órden de
los tags o </ul> y </ol>) ya que parsear y reconstruir toda la
estructura de elementos puede ser costoso en tiempo y de resultados
inciertos si el HTML no está correctamente formado.
4. Estilos y CSS's :
1. 4.1 Estilos "inline": Evitar en lo posible el uso de estilos "inline" por
elemento:
 Si la página es grande (tiene muchos objetos) aumentan
apreciablermente el peso de la misma al implicar mucho código
adicional.
 El tiempo de renderización es bastante mayor, sobre todo para el
caso de muchos elementos con los mismos estilos (por ejemplo en
celdas de tablas). Evidentemente el browser tarda menos en leer un
estilo de una CSS e ir aplicándolo a todas las celdas que lo precisen
que en ir celda por celda leyendo los atributos de su estilo "inline" y
hacer el render de todas ellas.
2. 4.2 Formas de aplicar formato: Evitar en lo posible la convivencia de
distintos tipos de "styling":
 Del desarrollo llegan a encontrarse en un mismo elemento:
 Estilo aplicado mediante reglas de una CSS asociada a la
página HTML
 Estilo CSS "inline"
 Estilo importado de una CSS externa
 Estilo HTML
 Aumenta la cantidad de código utilizada para aplicar estilo.
 Aumenta el tiempo requerido para renderizar el elemento.
 Aporta complejidad para seguir el código, previsualizar el estilo
aplicado y lo hace no reutilizable.
5. Pseudo Clases para Links:
Con alguna frecuencia no funciona la especificación "Hoover" de un hiperenlace. Esto
es porque el browser entra en conflicto debido a la manera en que se han definido
las pseudo-clases de formato de dicho hiperenlace (espera estén definidas en un
orden concreto y las pseudo-clases no lo siguen).
1. 5.1 Especificación de las pseudo-clases de hiperenlace en el órden
correcto en la CSS: Declarar siempre las pseudo-clases del hiperenlace en
la CSS en el siguiente orden:
 a {}
 a:link {}
 a:visited {}
 a:hover {}
 a:active {}
6. Conflictos de estilos:
Tanto para el caso de trabajar con única CSS, como trabajando con varias CSS's en
cascada, puede darse el caso de que varias reglas apliquen sobre un mismo
elemento. En el siguiente ejemplo:
<style type="text/css">
.ParrafoEj1 { color: blue;font-family: arial }
.ListaEj1 { color: red;font-family: tahoma }
</style
<p class="ParrafoEj1"> A continuación viene una lista:
<ul class="ListaEj1">
<li> Elemento-1</li>
<li> Elemento-2</li>
<li> Elemento-3</li>
</ul>
</p>
Vemos que para la cadena de texto "Elemento-1" aplicarían tanto la
regla ParrafoEj1 al ser un texto incluído en un párrafo formateado por esa clase de
estilo, como la regla ListaEj1, en cuanto que es un elemento de una lista
formateada por esa regla. Y los atributos de ambas reglas se contradicen: el texto
deberá ir en "arial, azul" o en "tahoma, rojo"?
1. 6.1 Especificidad: El mecanismo de que disponen las CSS's para resolver
este tipo de conflictos se llamaEspecificidad.
Algunos selectores son más específicos que otros. Por ejemplo, los
selectores-ID son más específicos que los selectores de clase. Y estos son
más específicos que los selectores de elementos HTML.
La especificidad se determina según el siguiente órden de priooridad:
11 Los selectores-ID son los selectores más específicos.
11 Los selectores de clase son más específicos que los selectores de
elementos HTML.
11 Los selectores contextuales y los selectores que impliquen a más de
un selector de elemento HTML son más específicos que los selectores
de elemento único.
11 Para dos selectores de múltiples elementos, es más específico el que
afecte a más elementos.
11 Cuando dos reglas tengan la misma especificidad, prevalecerá la que
aparezca en último lugar dentro de la cascada.
Por ejemplo, si dos reglas entran en conflicto y tienen igual
especificidad y ambas están en la misma hoja de estilo, prevalecerá
(tendrá mayor especificidad) la que aparezca en último lugar dentro
de dicha hoja de estilo.
Sin embargo, si dos reglas entran en conflicto y tienen igual
especificidad, una de ellas está en una hoja de estilo, y la otra está
en una hoja de estilo importada, prevalecerá la regla que esté
definida en la hoja de estilo importada, que será por tanto, la que
tenga mayor especificidad.
2. 6.2 Nomenclatura de reglas: La forma en que se asignen nombres a las
distintas reglas de una hoja de estilos no pede ser aleatoria.
De hecho hay una forma de nombrar clases de la CSS que es frecuente
encontrar y que, en varias versiones de browsers suele traer conflictos de
resolución impredecible.
Veamos el siguiente ejemplo en el que definimos reglas para formatear los
distintos elementos de la cabecera de nuestra página:
11 .Header { … }
11 .HeaderTitle { … }
11 .HeaderTitle2 { … }
11 .HeaderTitle2Italic { … }
En este caso el desarrollador ha seguido una metodolología ordenada de
nombrar las clases que precisaba para formatear las cabeceras de sus
páginas
 .Header define el fondo, bordes, rellenos, etc. del área de cebecera.
 .HeaderTitle define el tipo, color y peso de letra del título.
 .HeaderTitle2 define el tipo, color y peso de letra del subtítulo.
 .HeaderTitle2Italic define el tipo, color y peso de letra del subtítulo
usado como "abstract", es decir, como flash explicativo del contenido
del página.
Pues bien: con esta nomenclatura de reglas aparentemente nemotécnica y
"usable", las posibilidades de conflicto para el navegador, según versiones,
son muy altas.
Efectivamente: cuando el navegador encuentra la llamada a la primera
clase, .Header, para formatear el área sobre la que se escribirá el título, la
encontrará en la CSS, encuentra el principio y el final de la cadena de texto
que constituye el nombre, y, en principio, no habrá problemas.
Sin embargo, cuando a continuación encuentra la llamada a la
clase, .HeaderTitle para formatear el texto del título, empieza a buscar en
la CSS y efectivamente encuentra .HeaderTitle, pero al seguir leyendo
encuentra.HeaderTitle2 y puede "tener dudas" de si el 2 forma parte del
nombre de la clase o es otra cosa, y lo mismo con .HeaderTitle2Italic.
El orígen del problema es que hay nombres de clase completos que forman
parte del(os) nombre(s) de otra(s) clase(s) en la CSS, con lo que en el
primer caso, con la clase, .Header existen las mismas posibilidades de
conflicto.
Por lo tanto, en la metodología de etiquetado de las reglas de las
CSS's, nunca el nombre de una clase deberá formar parte de otra
clase de ninguna de las CSS's, locales o importadas, con las que
estemos trabajando.

Más contenido relacionado

La actualidad más candente

Diapositivas
DiapositivasDiapositivas
DiapositivasSari69
 
Dreamweaver-Tratamiento de imágenes
Dreamweaver-Tratamiento de imágenesDreamweaver-Tratamiento de imágenes
Dreamweaver-Tratamiento de imágenesEliana Navarro J
 
Guía 20 bordes y sombreados word 2007 bco i
Guía 20  bordes y sombreados word 2007 bco iGuía 20  bordes y sombreados word 2007 bco i
Guía 20 bordes y sombreados word 2007 bco iRicardo Fonseca
 
resumen de Word
resumen de Wordresumen de Word
resumen de Wordalexbeliz
 
Tema 3. porcesador de textos word
Tema 3. porcesador de textos wordTema 3. porcesador de textos word
Tema 3. porcesador de textos wordtanke89negro
 
Guia 5 de html tablas
Guia 5 de html   tablasGuia 5 de html   tablas
Guia 5 de html tablaslisvancelis
 
Uso del dreamweaver para insertar: Texto, Imagen, Tabla
Uso del dreamweaver  para insertar: Texto, Imagen, TablaUso del dreamweaver  para insertar: Texto, Imagen, Tabla
Uso del dreamweaver para insertar: Texto, Imagen, Tablaan_vj96
 
Word para el blogger
Word para el bloggerWord para el blogger
Word para el bloggerAngie Cardozo
 
Configuración de Word para trabajos de grado - PDF
Configuración de Word para trabajos de grado - PDFConfiguración de Word para trabajos de grado - PDF
Configuración de Word para trabajos de grado - PDFUlises Rebolledo
 
4. ConfiguracióN De La PáGina
4. ConfiguracióN De La PáGina4. ConfiguracióN De La PáGina
4. ConfiguracióN De La PáGinaCANDIDO RUIZ
 

La actualidad más candente (19)

Diapositivas
DiapositivasDiapositivas
Diapositivas
 
Word
WordWord
Word
 
Dreamweaver-Tratamiento de imágenes
Dreamweaver-Tratamiento de imágenesDreamweaver-Tratamiento de imágenes
Dreamweaver-Tratamiento de imágenes
 
Bordes y sombreado
Bordes y sombreadoBordes y sombreado
Bordes y sombreado
 
Guía 20 bordes y sombreados word 2007 bco i
Guía 20  bordes y sombreados word 2007 bco iGuía 20  bordes y sombreados word 2007 bco i
Guía 20 bordes y sombreados word 2007 bco i
 
resumen de Word
resumen de Wordresumen de Word
resumen de Word
 
Sangrías
SangríasSangrías
Sangrías
 
Actividades de clase documentos
Actividades de clase documentosActividades de clase documentos
Actividades de clase documentos
 
Tema 3. porcesador de textos word
Tema 3. porcesador de textos wordTema 3. porcesador de textos word
Tema 3. porcesador de textos word
 
Tablas
TablasTablas
Tablas
 
Guia 5 de html tablas
Guia 5 de html   tablasGuia 5 de html   tablas
Guia 5 de html tablas
 
Manual
ManualManual
Manual
 
Procesadores de texto
Procesadores de textoProcesadores de texto
Procesadores de texto
 
Uso del dreamweaver para insertar: Texto, Imagen, Tabla
Uso del dreamweaver  para insertar: Texto, Imagen, TablaUso del dreamweaver  para insertar: Texto, Imagen, Tabla
Uso del dreamweaver para insertar: Texto, Imagen, Tabla
 
Word para el blogger
Word para el bloggerWord para el blogger
Word para el blogger
 
Formularios
FormulariosFormularios
Formularios
 
Configuración de Word para trabajos de grado - PDF
Configuración de Word para trabajos de grado - PDFConfiguración de Word para trabajos de grado - PDF
Configuración de Word para trabajos de grado - PDF
 
4. ConfiguracióN De La PáGina
4. ConfiguracióN De La PáGina4. ConfiguracióN De La PáGina
4. ConfiguracióN De La PáGina
 
Especialista Web J8
Especialista Web J8Especialista Web J8
Especialista Web J8
 

Similar a Buenas prácticas en la codificación html

Similar a Buenas prácticas en la codificación html (20)

Manual Css Desarrolloweb.Com
Manual Css Desarrolloweb.ComManual Css Desarrolloweb.Com
Manual Css Desarrolloweb.Com
 
Manual css 01
Manual css 01Manual css 01
Manual css 01
 
Hojas de estilo css
Hojas de estilo cssHojas de estilo css
Hojas de estilo css
 
Css hojas de-estilo
Css hojas de-estiloCss hojas de-estilo
Css hojas de-estilo
 
Tutorhtml 2014
Tutorhtml 2014Tutorhtml 2014
Tutorhtml 2014
 
Universidad tecnica tarea 4
Universidad tecnica tarea 4Universidad tecnica tarea 4
Universidad tecnica tarea 4
 
Universidad tecnica tarea 4
Universidad tecnica tarea 4Universidad tecnica tarea 4
Universidad tecnica tarea 4
 
Hojas de estilo css
Hojas de estilo cssHojas de estilo css
Hojas de estilo css
 
Manual de css
Manual de cssManual de css
Manual de css
 
Byb4
Byb4Byb4
Byb4
 
Html
HtmlHtml
Html
 
Lenguaje html
Lenguaje htmlLenguaje html
Lenguaje html
 
DEBER HOJA DE ESTILO (CSS) blog blogger blogspot
DEBER HOJA DE ESTILO (CSS) blog blogger blogspotDEBER HOJA DE ESTILO (CSS) blog blogger blogspot
DEBER HOJA DE ESTILO (CSS) blog blogger blogspot
 
CSS_2020.pdf
CSS_2020.pdfCSS_2020.pdf
CSS_2020.pdf
 
Presentación Introducción al lenguaje HTML
Presentación Introducción al lenguaje HTMLPresentación Introducción al lenguaje HTML
Presentación Introducción al lenguaje HTML
 
Manual de css hojas de estilo
Manual de css hojas de estiloManual de css hojas de estilo
Manual de css hojas de estilo
 
Manual de css......jpg
Manual de css......jpgManual de css......jpg
Manual de css......jpg
 
HTML
HTMLHTML
HTML
 
Omar
OmarOmar
Omar
 
Manual css
Manual cssManual css
Manual css
 

Más de Lux Deray

Energía potencial y cinética
Energía potencial y cinéticaEnergía potencial y cinética
Energía potencial y cinéticaLux Deray
 
Ejercicios diodos
Ejercicios diodosEjercicios diodos
Ejercicios diodosLux Deray
 
Regulador del factor de potencia
Regulador del factor de potenciaRegulador del factor de potencia
Regulador del factor de potenciaLux Deray
 
Energía solary eah
Energía  solary eahEnergía  solary eah
Energía solary eahLux Deray
 
Corrección del factor de potencia en sistemas trifásicos
Corrección del factor de potencia  en sistemas trifásicosCorrección del factor de potencia  en sistemas trifásicos
Corrección del factor de potencia en sistemas trifásicosLux Deray
 
Prueba de soportes de concreto
Prueba de soportes de concretoPrueba de soportes de concreto
Prueba de soportes de concretoLux Deray
 
Transistores
TransistoresTransistores
TransistoresLux Deray
 

Más de Lux Deray (9)

Sensores
SensoresSensores
Sensores
 
Energía potencial y cinética
Energía potencial y cinéticaEnergía potencial y cinética
Energía potencial y cinética
 
Ejercicios diodos
Ejercicios diodosEjercicios diodos
Ejercicios diodos
 
Coltan
ColtanColtan
Coltan
 
Regulador del factor de potencia
Regulador del factor de potenciaRegulador del factor de potencia
Regulador del factor de potencia
 
Energía solary eah
Energía  solary eahEnergía  solary eah
Energía solary eah
 
Corrección del factor de potencia en sistemas trifásicos
Corrección del factor de potencia  en sistemas trifásicosCorrección del factor de potencia  en sistemas trifásicos
Corrección del factor de potencia en sistemas trifásicos
 
Prueba de soportes de concreto
Prueba de soportes de concretoPrueba de soportes de concreto
Prueba de soportes de concreto
 
Transistores
TransistoresTransistores
Transistores
 

Buenas prácticas en la codificación html

  • 1. Buenas prácticas en la codificación HTML/CSS (El código HTML/CSS afecta al rendimiento). Temas relacionados: Tablas y CSS's | Óptimizar para Buscadores | PageRank en Google | Éxito en Google Contenido: 1. Introducción: resolución de conflictos por el navegador 2. Consejos en la codificación de Tablas o 2.1 Anidamiento o 2.2 Aspectos gráficos mediante tablas o 2.3 Estructurar contenidos o 2.4 El atributo WIDTH o 2.5 El atributo HEIGHT o 2.6 El atributo TABLE-LAYOUT o 2.7 Formato HTML de Tablas, Filas y Celdas o 2.8 HTML de Tablas bien formado o 2.9 El atributo WHITE-SPACE 3. Consejos en la codificación de Listas o 3.1 Especificación de marcadores (bullets) o 3.2 HTML de Listas bien formado 4. Estilos y CSS's o 4.1 Estilos "inline" o 4.2 Formas de aplicar formato 5. Pseudo Clases para Links o 5.1 Especificación de las pseudo-clases de hiperenlace en el órden correcto 6. Conflictos de estilos o 6.1 Especificidad o 6.2 Nomenclatura de reglas 1. Introducción: resolución de conflictos por el navegador: Quizá una de las razones que ha colaborado a que haya millones de sitios en Internet es la facilidad y rapidez con que cualquiera sin demasiada formación técnica aprende HTML. Al menos los rudimentos más básicos para formatear páginas.
  • 2. La segunda razón es la capacidad que tienen los browsers para interpretar HTML incorrectamente escrito, al menos con algunos tipos de incorrecciones. De todos los browsers actuales es, desde luego, Intenet Explorer el que mejor inetrpreta HTML- mal formado. Y esta capacidad de los navegadores de renderizar correctamente una página burdamente escrita se basa en la lógica que tienen implementada para la resolución de conflictos. Por poner un ejemplo muy básico, se debería escribir un párrafo de texto entre los tags <p> y </p>. Sin embargo, si el autor de la página abre un párrafo con <p> y se le olvida cerrarlo, y abre el siguiente párrafo con un nuevo <p> que tampoco cierra, el navegador interpretará que empieza nuevo párrafo, dará por supuesto el cierre del primero, el del segundop y así sucesivamente. La consecuencia negativa inducida de esta "buena virtud" es que esto ha contribuído mucho al escaso cuidado con que los autores de páginas trabajan y a los escasos conocimientos con los que se embarcan en la aventura. Y las malas noticias son que esto no es gratis. Porque el navegador enmplea tiempo (a veces muy apreciable si la página es extensa) en terminar de "pintar" un página incorrectamente escrita, es decir, en resolver los conflictos por incorrecciones de sintáxis. Si, por ejemplo, escribimos una lista y no incluímos el tag de cierre de lista, </ul> el navegador probablemente recorrerá todo el HTML de la página buscando el cierre antes de tomar la decisión de dónde acaba la lista. Y si en la página hay más listas, unas cerradas y otras no, el tema puede complicarse. La conclusión es que vale la pena aprender HTML a fondo y aplicarse en escribirlo sintácticamente correcto. 2. Consejos en la codificación de Tablas: El elemento de código conflictivo por excelencia (al márgen del peso de las imágenes, HTML Dinámico, carga y ejecución de JavaScript o Applets) son las Tablas. Habida cuenta que es la forma absolutamente generalizada que tienen los programadores de estructurar y situar contenidos y datos en la página, el tag y sus atributos y relacionados se encuentan con gran profusión en cualquier aplicación. Con frecuencia, para lo que menos se usan es para tabular datos en el sentido más tradicional. 1. 2.1 Anidamiento: Está muy generalizado el que se suele incurrir en un anidamiento de tablas excesivo lo que conlleva, por un lado el aumento del peso de la página, por otro su longitud en caracteres (e indirectamente la dificultad de mantenimiento), y, sobre todo, que para empezar a renderizar la tabla padre el browser ha de haber completado la tabla hija, y para completar la hija debe haber completado la de 3º nivel… y así sucesivamente. Al respecto de su uso y abuso, conviene hacer las siguientes consideraciones:  Evitar en lo posible el anidamiento de tablas, al menos, reducir el número de niveles lo más posible. 2. 2.2 Aspectos gráficos mediante tablas: Se utilizan tablas dentro de tablas para conseguir efectos gráficos: bordes-dobles, rellenos, distancias a márgenes... Esto es un error mayúsculo e implica que se desconocen las
  • 3. enormes posibilidades que ofrecen las CSS, utilizando en su defecto código oneroso:  Implementar todas las características gráficas de las tablas:  Relleno (padding) de tabla y de celdas  Distancias a bordes (margin)  Bordes de tablas y de celdas  Fondos de tabla, filas y celdas... En concreto, mediante los atributos border-collapse y border- spacing del modelo de tablas con bordes separados se pueden conseguir efectos visuales muy interesantes. 3. 2.3 Estructurar contenidos: Se utilizan tablas dentro de tablas para incluir secciones de una tabla (como por ejemplo una botonera, un grupo de enlaces, un submenu…).  Utilizar los encabezados /pies de tabla <caption> con "align=top" y "align=bottom" (o el atributo "caption-side: top,bottom" en la clase correspondiente), e incluir elementos de formato contenedores ( <span>) que no sean celdas.  Utilizar tantos encabezados/pies de tabla como sean precisos para especificar zonas adicionales de las mismas, siempre que esto ayude a evitar tablas adicionales al respecto. 4. 2.4 El atributo WIDTH: Es muy recomendable utilizar "width" en tablas y celdas:  Utilizar siempre "width" en tablas y celdas en valor absoluto o relativo según proceda, y siempre entre comillas dobles "width= 20%":  Hay que aportar al browser la información necesaria para que prediga dónde terminará físicamente la tabla: agiliza mucho la renderización.  De no existir esta información el browser tiene que recalcular el ancho y alto de filas, columnas y celdas en función del contenido de estas, y esto puede requerir, además, realizarlo en varias pasadas, lo que penaliza mucho la renderización. 5. 2.5 El atributo HEIGHT: Utilizar el atributo "height" dentro del código HTML para especificar la altura de una celda es uno de los desaciertos más típicos en que caen los desarroladores de páginas, entre otras razones, porque es aceptado por Internet Explorer, pero no es un estándar-HTML.  La altura de filas o celdas debe especificarse mediante los atributos "heigth" o "line-heigth" de las clases de estilo que les dan formato.
  • 4.  De ser preciso especificarlo en el HTML debe hacerse a nivel de fila, en el "<tr>": aplicará a todas las celdas, reducirá el código y facilitará la renderización de la tabla. 6. 2.6 El atributo TABLE-LAYOUT: Utilizar siempre que sea posible el atributo "table-layout: fixed" (algoritmo de composición fija)  Este atributo se especifica en la clase de estilo definida para la tabla.  En este caso, el browser pinta la estructura de la tabla utilizando sólo la información de anchos y altos de filas y celdas, ignorando totalmente los contenidos de estas.  La renderización será mucho más rápida que si utiliza un algoritmo de composición automática, en cuyo caso tiene que analizar los contenidos de las celdas, y en función de estos, ir recalculando las dimensiones de filas, columnas y celdas para, a continuación, pintarlas, lo que en ocasiones suele requerir varias pasadas hasta obtener la disposición final de la tabla. 7. 2.7 Formato HTML de Tablas, Filas y Celdas: No utilizar (salvo que sea imprescindible) elementos de formato codificado directamente en HTML en tabla, filas o celdas.  Todo, incluyendo alturas, colores de fondo, bordes, paddings, margenes y características de fuentes... debe ir en clases de estilo asociadas a tabla, filas o celdas.  Simplifica el código en extensión y legibilidad, y ayuda mucho a estructurarlo y mantenerlo.  Simplifica la renderización porque el browser tendrá que "recordar" sólo algunas clases de estilo para pintar una estructura compleja y no tendrá que leer+asignar estilo contínuamente a cada una de las celdas y sus contenidos.  Facilita mucho la modificación del diseño y su reutilización. 8. 2.8 HTML de Tablas bien formado: Evitar tener algún tag de la tabla "<tr>", "<td>", "<th>", "<caption>" sin cerrar.  Aunque IE sea capaz de renderizar la estructura de una tabla correctamente estando la sintáxis de la misma incompleta, en muchos de los casos, supone un tiempo adicional de recorrido de la estructura para llegar a pintar la tabla. Esto es especialmente grave en tablas anidadas. 9. 2.9 El atributo WHITE-SPACE: A nivel celda, especificar si es posible en la clase de estilo como se tratarán los espacios en blanco: white-space:  normal  pre  nowrap
  • 5. 3. Consejos en la codificación de Listas: 1. 3.1 Especificación de marcadores (bullets): No utilizar especificación de marcadores en los tags <>:  Cualquier especificación de formato, incluído el tipo de marcador, debería ir en una única clase de estilo específica el tipo de lista no- oredenada (<ul>) u ordenada (<ol>).  Simplifica el código en extensión y legibilidad, y ayuda mucho a estructurarlo.  Simplifica la renderización porque el browser tendrá que "recordar" sólo 1 clase de estilo para pintar una lista entera y no tendrá que leer + asignar estilo a cada elemento de la lista.  Facilita mucho la modificación de la apariencia de la lista y su reutilización. 2. 3.2 HTML de Listas bien formado: Asegurarse siempre de que todos los elementos de la lista tienen el tag de cierre y no hay coflictos en el orden de cierre con otros tags relacionados (<p>, <font>...):  Si no se cierra un tag <> el browser deberá recorrerse la lista entera para poder reconstruirla. Esto es especialmente crítico en listas anidadas (en las que además habrá que vigilar el cierre y órden de los tags o </ul> y </ol>) ya que parsear y reconstruir toda la estructura de elementos puede ser costoso en tiempo y de resultados inciertos si el HTML no está correctamente formado. 4. Estilos y CSS's : 1. 4.1 Estilos "inline": Evitar en lo posible el uso de estilos "inline" por elemento:  Si la página es grande (tiene muchos objetos) aumentan apreciablermente el peso de la misma al implicar mucho código adicional.  El tiempo de renderización es bastante mayor, sobre todo para el caso de muchos elementos con los mismos estilos (por ejemplo en celdas de tablas). Evidentemente el browser tarda menos en leer un estilo de una CSS e ir aplicándolo a todas las celdas que lo precisen que en ir celda por celda leyendo los atributos de su estilo "inline" y hacer el render de todas ellas. 2. 4.2 Formas de aplicar formato: Evitar en lo posible la convivencia de distintos tipos de "styling":  Del desarrollo llegan a encontrarse en un mismo elemento:  Estilo aplicado mediante reglas de una CSS asociada a la página HTML  Estilo CSS "inline"  Estilo importado de una CSS externa
  • 6.  Estilo HTML  Aumenta la cantidad de código utilizada para aplicar estilo.  Aumenta el tiempo requerido para renderizar el elemento.  Aporta complejidad para seguir el código, previsualizar el estilo aplicado y lo hace no reutilizable. 5. Pseudo Clases para Links: Con alguna frecuencia no funciona la especificación "Hoover" de un hiperenlace. Esto es porque el browser entra en conflicto debido a la manera en que se han definido las pseudo-clases de formato de dicho hiperenlace (espera estén definidas en un orden concreto y las pseudo-clases no lo siguen). 1. 5.1 Especificación de las pseudo-clases de hiperenlace en el órden correcto en la CSS: Declarar siempre las pseudo-clases del hiperenlace en la CSS en el siguiente orden:  a {}  a:link {}  a:visited {}  a:hover {}  a:active {} 6. Conflictos de estilos: Tanto para el caso de trabajar con única CSS, como trabajando con varias CSS's en cascada, puede darse el caso de que varias reglas apliquen sobre un mismo elemento. En el siguiente ejemplo: <style type="text/css"> .ParrafoEj1 { color: blue;font-family: arial } .ListaEj1 { color: red;font-family: tahoma } </style <p class="ParrafoEj1"> A continuación viene una lista:
  • 7. <ul class="ListaEj1"> <li> Elemento-1</li> <li> Elemento-2</li> <li> Elemento-3</li> </ul> </p> Vemos que para la cadena de texto "Elemento-1" aplicarían tanto la regla ParrafoEj1 al ser un texto incluído en un párrafo formateado por esa clase de estilo, como la regla ListaEj1, en cuanto que es un elemento de una lista formateada por esa regla. Y los atributos de ambas reglas se contradicen: el texto deberá ir en "arial, azul" o en "tahoma, rojo"? 1. 6.1 Especificidad: El mecanismo de que disponen las CSS's para resolver este tipo de conflictos se llamaEspecificidad. Algunos selectores son más específicos que otros. Por ejemplo, los selectores-ID son más específicos que los selectores de clase. Y estos son más específicos que los selectores de elementos HTML. La especificidad se determina según el siguiente órden de priooridad: 11 Los selectores-ID son los selectores más específicos. 11 Los selectores de clase son más específicos que los selectores de elementos HTML. 11 Los selectores contextuales y los selectores que impliquen a más de un selector de elemento HTML son más específicos que los selectores de elemento único. 11 Para dos selectores de múltiples elementos, es más específico el que afecte a más elementos. 11 Cuando dos reglas tengan la misma especificidad, prevalecerá la que aparezca en último lugar dentro de la cascada. Por ejemplo, si dos reglas entran en conflicto y tienen igual especificidad y ambas están en la misma hoja de estilo, prevalecerá (tendrá mayor especificidad) la que aparezca en último lugar dentro de dicha hoja de estilo. Sin embargo, si dos reglas entran en conflicto y tienen igual especificidad, una de ellas está en una hoja de estilo, y la otra está en una hoja de estilo importada, prevalecerá la regla que esté definida en la hoja de estilo importada, que será por tanto, la que tenga mayor especificidad. 2. 6.2 Nomenclatura de reglas: La forma en que se asignen nombres a las distintas reglas de una hoja de estilos no pede ser aleatoria. De hecho hay una forma de nombrar clases de la CSS que es frecuente encontrar y que, en varias versiones de browsers suele traer conflictos de resolución impredecible. Veamos el siguiente ejemplo en el que definimos reglas para formatear los distintos elementos de la cabecera de nuestra página:
  • 8. 11 .Header { … } 11 .HeaderTitle { … } 11 .HeaderTitle2 { … } 11 .HeaderTitle2Italic { … } En este caso el desarrollador ha seguido una metodolología ordenada de nombrar las clases que precisaba para formatear las cabeceras de sus páginas  .Header define el fondo, bordes, rellenos, etc. del área de cebecera.  .HeaderTitle define el tipo, color y peso de letra del título.  .HeaderTitle2 define el tipo, color y peso de letra del subtítulo.  .HeaderTitle2Italic define el tipo, color y peso de letra del subtítulo usado como "abstract", es decir, como flash explicativo del contenido del página. Pues bien: con esta nomenclatura de reglas aparentemente nemotécnica y "usable", las posibilidades de conflicto para el navegador, según versiones, son muy altas. Efectivamente: cuando el navegador encuentra la llamada a la primera clase, .Header, para formatear el área sobre la que se escribirá el título, la encontrará en la CSS, encuentra el principio y el final de la cadena de texto que constituye el nombre, y, en principio, no habrá problemas. Sin embargo, cuando a continuación encuentra la llamada a la clase, .HeaderTitle para formatear el texto del título, empieza a buscar en la CSS y efectivamente encuentra .HeaderTitle, pero al seguir leyendo encuentra.HeaderTitle2 y puede "tener dudas" de si el 2 forma parte del nombre de la clase o es otra cosa, y lo mismo con .HeaderTitle2Italic. El orígen del problema es que hay nombres de clase completos que forman parte del(os) nombre(s) de otra(s) clase(s) en la CSS, con lo que en el primer caso, con la clase, .Header existen las mismas posibilidades de conflicto. Por lo tanto, en la metodología de etiquetado de las reglas de las CSS's, nunca el nombre de una clase deberá formar parte de otra clase de ninguna de las CSS's, locales o importadas, con las que estemos trabajando.