CSSLab » HTML http://www.csslab.cl Un laboratorio de ideas para la web en español Thu, 12 Jan 2012 02:32:35 +0000 en hourly 1 http://wordpress.org/?v= Ordenando la cabeza http://www.csslab.cl/2011/07/19/ordenando-la-cabeza/ http://www.csslab.cl/2011/07/19/ordenando-la-cabeza/#comments Tue, 19 Jul 2011 17:33:27 +0000 Jorge Epuñan http://www.csslab.cl/?p=788 Muchas veces nos esforzamos en tener el código más limpio y pulcro posible, pero no nos fijamos en lo que sucede dentro del <head></head>. Es una parte vital, donde se define el comportamiento de toda la página web. Pero primero, debemos entender cómo el browser lee una página web.

Cuando un navegador comienza a parsear una página, comienza a leer desde el encabezado, claro. Si la respuesta del encabezado del content-type especifica un atributo charset, esos bytes pueden ser interpretados inmediatamente como texto utilizando el encoding determinado. Sin embargo, si una declaración charset no está presente, el browser comienza a escanear los bytes de de respuesta del cuerpo, buscando por algún marcador unicode ó algún elemento dentro del meta http-equiv que especifique el charset. Cuando lo encuentra el parser vuelve a leer el documento para asegurarse que lo anterior sea leído correctamente. Ahora, si una declaración de charset no está definido, el browser está obligado a autodetectar el encoding dependiendo del contenido, lo que puede provocar errores de caracteres o en la página misma.

Luego, son leídos el título, favicon y los estilos (<link>) los que deben estar en concordancia con el charset definido anteriormente.

Finalmente, el orden ideal propuesto por la mayoría de los navegadores modernos es el siguiente:

<doctype> 
<html> 
      <head> 
         <meta http-equiv content-type charset> 
         <title>
         <link rel="alternate" />
         <link rel="shortcut icon" />
         <link rel="stylesheet" type="text/css" />

Parece obvio, pero no muchas veces se cumple.


No incluí <script></script> intencionalmente ya que existen escuelas que dicen que es mejor incluirlos abajo del código de tu página, antes del </body>, lo que no valida en el código HTML pero acelera la carga de los elementos del DOM y deja para el final la carga de los scripts. Mejor lo dejo a criterio de cada desarrollador.

Links:

]]>
http://www.csslab.cl/2011/07/19/ordenando-la-cabeza/feed/ 5
El olvidado rel http://www.csslab.cl/2010/09/02/el-olvidado-rel/ http://www.csslab.cl/2010/09/02/el-olvidado-rel/#comments Thu, 02 Sep 2010 18:19:54 +0000 Jorge Epuñan http://www.csslab.cl/?p=640 ¿Por qué gastarme el tiempo de escribir un artículo sobre un atributo HTML tan antiguo, y por qué ustedes gastarían el suyo en leerlo? Que buenas preguntas para comenzar a redactar un tema donde es necesario aclarar sus usos y recalcar sus funciones, principalmente cuando las escuelas actuales aún son incipientes en enseñar la teoría por detrás de los fundamentos de los web standards. Comencemos con la parte aburrida:

El atributo rel describe la relación del presente documento al link (href) o ancla (name) especificado en el atributo href="". El valor de este atributo puede ser más de uno y al igual que las clases, separados por espacio.

Tiempo de una pausa para un pequeño detalle.

Este atributo dentro de un link <a></a> no es utilizado ni reconocido por ningún browser actualmente (por eso seguramente ha sido menospreciado y olvidado por tanto tiempo).

Entonces, ¿para qué seguir gastando nuestro tiempo? Pues rel="" sí es considerado por los buscadores para obtener más información sobre los enlaces, y es muy difundido mediante microformatos.

Los valores de este atributo para HTML 4.01 son (o eran, como quieras verlo):

alternate
una versión alternativa del documento (por ej. una traducción, página para impresión, etc).
stylesheet
este es familiar; es una hoja de estilos linkeada externamente.
start
el primer documento de un conjunto de documentos. Este valor le indica a los buscadores que la página es considerada el punto de inicio de la colección.
prev, next
documento anterior y siguiente de una misma colección de documentos; podría utilizarse para pre-cargar los documentos siguientes.
contents
una tabla de contenidos para el conjunto de documentos.
index
una página que ofrece un índice para los documentos.
glossary
una página con un glosario de términos para el conjunto de documentos.
copyright
textos legales para todo el documento.
chapter
pagina que abre un capítulo.
section
pagina que abre una sección.
subsection
pagina que abre una sub-sección.
appendix
el apéndice.
help
una página de ayuda (más información, otras fuentes de información, instrucciones, etc).
bookmark
pagina con enlaces a contenido dentro del mismo conjunto de documentos.

Para HTML 5 y a través de los microformatos (prácticamente XFN), se ha privilegiado la relación de enlaces a personas más que a documentos o partes de él. Los siguientes son los -hasta ahora- aprobados para HTML 5:

acquaintance
la persona linkeada ofrece conocimiento anexo al documento actual.
child
la persona referenciada es hija de la persona autora del documento.
co-resident
la persona referenciada vive en la misma casa del autor.
co-worker
la persona referenciada trabaja con el autor.
colleague
la persona referenciada es colega del autor.
contact
el autor considera a la persona referenciada como un contacto.
crush
la persona referenciada atrae al autor.
date
el autor está saliendo con la persona referenciada.
kin
la persona referenciada es parte de la gran familia del autor.
me
la persona referenciada y el autor son la misma persona.
met
el autor conoce a la persona referenciada.
muse
la persona referenciada inspira al autor.
neighbor
la persona referenciada vive cerca o es vecino del autor.
parent
la persona referenciada es padre del autor.
sibling
la persona referenciada es hermano(a) del autor.
spouse
la persona referenciada es cónyugue del autor.
sweetheart
el autor considera al(a) referenciado(a) como su cariño.

A partir de necesidades específicas de fabricantes de browsers y de tecnologías, se han creado algunos valores que son específicos, como:

nofollow
es utilizado por Google para especificar que el spider de indexación no debe seguir ese link.
shortcut icon
reconocido por los browsers modernos para enlazar un archivo favicon.ico.
apple-touch-icon
utilizado por Apple para especificar un archivo ícono para un sitio web.

Pues como leen, este malhogrado atributo está resucitando y nos permite vincular objetos y documentos con una semántica nunca antes vista. Queda en nosotros utilizarla correctamente y sacarle provecho en nuestros proyectos.

 

Links:

]]>
http://www.csslab.cl/2010/09/02/el-olvidado-rel/feed/ 5
Videocast 4: formulario http://www.csslab.cl/2010/04/08/videocast-4-formulario/ http://www.csslab.cl/2010/04/08/videocast-4-formulario/#comments Thu, 08 Apr 2010 15:09:23 +0000 Jorge Epuñan http://www.csslab.cl/?p=533 Tenía hace unos meses preparado un nuevo videocast para ayudar a quienes están aprendiendo a maquetar en HTML+CSS a realizarlo con campos de formularios. Lejos es lo más complicado que me ha tocado perfeccionar, pero se trata principalmente de practicar y de realizar la mayor cantidad de variaciones posibles para lograr un buen manejo de las etiquetas y conocer cómo se comportan en los diferentes browsers. A modo de ejemplo, la siguiente imagen grafica un mismo archivo HTML con diferentes tipos de <input /> con diferentes estilos en diferentes browsers:

Diferencias de input entre browsers - CSSLab.cl

En esta ocasión el layout es bastante simple, uno típico que encontrarás en cualquier sistema de comentarios para blogs. Pero es un buen puntapié para que veas de qué se trata esto. Además, contiene las etiquetas fundamentales y más utilizadas para capturar datos de usuarios.

Videocast 4 versión stream
Videocast 4 versión completa

Espero sea de ayuda y que se entienda, como siempre lo muestro en 2 formatos: streaming para web y uno en alta calidad para que lo bajes y estudies offline. Además, puedes descargar el material utilizado para este videocast.

]]>
http://www.csslab.cl/2010/04/08/videocast-4-formulario/feed/ 7
Enlaces vacíos y semánticos http://www.csslab.cl/2009/04/06/enlaces-vacios-y-semanticos/ http://www.csslab.cl/2009/04/06/enlaces-vacios-y-semanticos/#comments Mon, 06 Apr 2009 14:40:54 +0000 Jorge Epuñan http://www.csslab.cl/?p=415 Si desayunas jQuery, almuerzas Mootools y cenas Spry entonces seguro te gusta manipular eventos utilizando elementos del DOM ya generados. Deben saber que la etiqueta correcta para click (y doubleclick) es <a> y solamente <a>; todas las demás tienen otros muchos usos pero la única que semánticamente está habilitada para desencadenar una acción mediante un click es… ¡<a>!

Bien eso era lo primero que quería dejar claro; he visto demasiados <li>, <h1>, incluso <p> clickeables. Ahora, a lo que va este artículo es cómo la semántica se está dejando atrás por la comodidad de escribir eventos mediante JS. Me culpo también por caer en lo mismo, pero me interesa ahora mostrarles la mejor solución que he encontrado al respecto.

Pongámonos en un caso de ejemplo. Supongamos que se agrega una función para ejecutar un slideToggle a un enlace; por lo que he visto generalmente esto se hace de 2 maneras:

<a href="#" id="ejecuta_toggle">Ejecutar slideToggle</a>

Cumples con tener un href funcional (no vacío) pero puede hacer que al hacer click la página haga scroll hasta el inicio dado que tienes un ancla vacío en el href y quizás tengas que dar un return false al final de la función del slideToggle, ó

<a href="javascript:void(0)" id="ejecuta_toggle">Ejecutar slideToggle</a>

Que hace que el browser no ejecute el enlace y no se salga de la misma página.

Enfin, son 2 métodos similares y que cumplen con el objetivo primario de ejecutar algun comportamiento mediante Javascript a través de un hyperlink. Pero nuevamente mi pregunta: ¿Qué sucede con la semántica? ¿Cómo le digo al buscador, indexador, robot que ese <a> no es un enlace realmente? ¿Que lo estoy disfrazando para cumplir con mis objetivos?

Complicada pregunta y simple respuesta. Con esta inquitud espero que puedan ir más allá en sus desarrollos; recuerden que un simple click puede desencadenar muchos más eventos que los que tienen planificado para él, eventos que benefician a sus usuarios mediante indexaciones más precisas.

La solución

Entreguen una ancla semántica al hyperlink, pero una ancla sobre sí mismo. Ejemplifico con lo mismo que he estado utilizando:

<a href="#ejecuta_toggle" name="ejecuta_toggle" id="ejecuta_toggle">Ejecutar slideToggle</a>

Con este método conservan la semántica indicando a través del atributo name qué hará ese mismo enlace y al mismo tiempo evitan el movimiento de scroll de la página.

]]>
http://www.csslab.cl/2009/04/06/enlaces-vacios-y-semanticos/feed/ 8
<option disabled="disabled"> en IE6+ http://www.csslab.cl/2008/12/31/option-disabled-en-ie6/ http://www.csslab.cl/2008/12/31/option-disabled-en-ie6/#comments Wed, 31 Dec 2008 14:09:05 +0000 Jorge Epuñan http://www.csslab.cl/?p=372 Nuevamente vengo con un error de nuestro querido amigo IE6 que también es compartido por IE7 y el beta1 de IE8 (estos de Micro$oft no aprenden nunca…). Gracias a Rodrigo, me hizo notar que estos browsers no interpretan correctamente a <option> de un <select> que contenga el atributo disabled="disabled". Todos los otros navegadores buenos lo hacen perfectamente, pero lamentablemente la gran mayoría de usuarios no saben que lo que usan para navegar apesta (y no tienen culpa tampoco) y lamentablemente tenemos que encontrar soluciones a este y muchos otros problemas del desarrollo web.

Me puse a indagar por la web y encontré varias discusiones sobre qué solución es mejor que otra, y ninguna fue conclusiva. No hay solución aparente que funcione de igual manera para todos los browsers y que sea utilizada, por ejemplo, con comentarios condicionales. Básicamente me encontré con 2: una que involucra HTML pero la mejor manera de implementarlo es mediante Javascript y la segunda sencillamente con Javascript. Explicaré ambas a continuación, pero antes el HTML común que sería del tipo:

<select>
     <option>Primero</option>
     <option disabled="disabled">Segundo</option>
     <option>Tercero</option>
</select>

Ver ejemplo (en IE notarán)

<option disabled="disabled"> entre browsers

Solución 1

Para que IE interprete la opción <option disabled="disabled">Segundo</option> como deshabilitado, debes cambiar la etiqueta <option> por <optgroup>; el problema es que <optgroup> se compone ligeramente diferente de <option> por lo que el HTML quedaría así:

<select>
     <option>Primero</option>
     <optgroup label="Segundo">Segundo</optgroup>
     <option>Tercero</option>
</select>

Esta solución funciona perfecto en todos los browsers, por lo que puede ser hecho automáticamente mediante jQuery:

$('option:disabled').each(function(){
     var texto = $(this).text();
     $(this).replaceWith("<optgroup label='"+texto+"'>"+texto+"</optgroup>")
});

optgroup funcionando en IE6

Como el problema es sólo de IE, prefiero encerraro en un if() que detecte el browser como podrán apreciar en el ejemplo. Además, notarán que <optgroup> tiene una leve diferencia de estilo que <option disabled="disabled"> pero que se puede subsanar fácilmente mediante CSS.

Ver solución 1 (en IE notarán)

Solución 2

Esta solución no es una solución en sí sino un parche para el problema: ya que IE no considera el atributo disabled, entonces cada vez que el <option disabled="disabled"> sea seleccionado por el usuario (tomando en cuenta que todos los otros browsers no dejarán que sea seleccionado) la selección será automáticamente trasladada al primer <option> del <select>, vale decir del ejemplo HTML si hago click a <optgroup label="Segundo">Segundo</optgroup>, automáticamente seré redireccionado a <option>Primero</option>. El JS:

$('option:disabled').css('color','gray'); 
$('select').change(function(){
     checkDisabledOptions(this);
});
function checkDisabledOptions(el){
     if(el.options[el.options.selectedIndex].disabled){
          el.selectedIndex = 0;
     }
}

Esta solución es una mezcla entre jQuery y Javascript puro, tomada de la mejor implementación encontrada de entre 20 otras vistas; es la más simple y con menos líneas de código. Además, para esta solución es bueno siempre en el primero item del <select> la opción <option>Seleccione</option> o cualquiera que sea que no tenga un value válido (value=""), así aportamos a la accesibilidad y podremos validar ese ítem de formulario.

Ver solución 2 (en IE notarán)

Espero Rodrigo te haya servido, y gracias por hacer me ver este tema; me entretuve bastante resolviéndolo.

Links:

]]>
http://www.csslab.cl/2008/12/31/option-disabled-en-ie6/feed/ 5
Rayos-X contra no-estándares http://www.csslab.cl/2008/04/25/rayos-x-contra-no-estandares/ http://www.csslab.cl/2008/04/25/rayos-x-contra-no-estandares/#comments Fri, 25 Apr 2008 17:50:30 +0000 Jorge Epuñan http://www.csslab.cl/2008/04/25/rayos-x-contra-no-estandares/ La idea de una hoja de estilos que muestre evidentemente un marcado HTML deficiente o anticuado no es de nada nueva. Ya Eric Meyer hizo referencia a esfuerzos para desarrollar estilos que diagnosticaran etiquetas o atributos mal utilizados o llanamente obsoletos dentro de una página web. El objetivo es tener un grupo de estilos que puedan ser aplicados durante la fase de desarrollo (o armado) de un sitio web, o durante el análisis para un rediseño.

Elementos tan simples como links vacíos, o que no llevan a ningún lado (<a href="#">), imágenes sin definición de atributo alt (<img alt="">) o el mismo uso del atributo style="" dentro de cualquier etiqueta son detectados y mostrados con un estilo que traté de que fuera bastante notorio: bordes gruesos o colores poco comunes de fondo, por ejemplo.

Ver ejemplo 1

En el ejemplo 1, podrán ver (si ven el código fuente) que la estructura de esa página está bastante mal hecha, seguramente por algún software que hace el trabajo fácil. Al aplicar la hoja de estilos rayos-x.css, podrán notar todo lo que hace evidente:

Ver ejemplo 2

La hoja de estilos que hace la detección, contiene lo siguiente:

/* — atributos del <body> obsoletos — */
     body[bgcolor], body[background], body[link], body[alink], body[vlink] {
     border: 3px dashed red;
}
/* — etiquetas obsoletas desde HTML 4.01 — */
font, center, marquee, b, i, u, strike, menu, basefont, applet {
     background: fuchsia;
     font-weight: bold;
}
/* — atributos de estilo dentro de etiquetas, obsoletos todos — */
*[align], *[color] {
     border: 2px double blue;
}
/* — atributos de estilo para etiquetas comunes — */
div[bgcolor], div[background], table[bgcolor], table[background], td[bgcolor], td[background], th[bgcolor], th[background] {
     background: lime;
}
/* — detectando etiquetas vacias — */
div:empty, span:empty, li:empty, p:empty, td:empty, th:empty {
     background: yellow;
}
/* — detectando atributo style dentro de cualquier etiqueta — */
*[style] {
     border: 1px solid cyan;
}
/* — busca por algun spacer que se haya escapado — */
img[src$="spacer.gif"] {
     border: 4px solid fuchsia;
}
/* — busca por atributos alt y title vacios en <img /> — */
img[alt=""], img[title=""] {
     border-width: 3px;
}
/* — busca atributo title vacio en <a> — */
a[title=""] {
     background: chocolate;
}
/* — busca links de ancla vacio — */
a[href="#"] {
     background: lime;
}
/* — busca por links vacios — */
a[href=""] {
     background: fuchsia;
}

Y para utilizarla, sólo deben linkearla a la página que deseen de la siguiente manera:

<link rel="stylesheet" href="rayos-x.css" type="text/css" media="screen" />

Descargar rayos-x.zip [1kb]

]]>
http://www.csslab.cl/2008/04/25/rayos-x-contra-no-estandares/feed/ 8
Esas botoneras: centrándolas http://www.csslab.cl/2008/03/11/esas-botoneras-centrandolas/ http://www.csslab.cl/2008/03/11/esas-botoneras-centrandolas/#comments Tue, 11 Mar 2008 15:17:49 +0000 Jorge Epuñan http://www.csslab.cl/2008/03/11/esas-botoneras-centrandolas/ Uno de los temas más complicados a la hora de estructurar y diagramar un sitio, es cuando existen formularios. Creo que es el más difícil, ya que a pesar de tener un buen CSS reseter a mano que te ayude a setear esas propiedades en todos los browsers, aún así hay elementos que no obedecen como querríamos que lo hicieran. Algunos trucos se deben usar, y finalmente no queda totalmente exacto en todas las plataformas y navegadores. Imagínate esos formularios gigantescos, donde sobran campos y la usabilidad es nula… un lío.

Lo que se va a ver aquí, será específicamente cómo abordar la estructuración de una botonera de formularios (o de cualquier otro en realidad), y cómo lograr que se estén siempre centradas a pesar de cuántos botones tengan. El ejemplo gráfico a continuación:

Ejemplo Botonera Centrado en CSSLab

He visto muchas soluciones a esto, la mayoría de ellas complicadas (mi slogan siempre es facilitar la vida en su máxima expresión). Por ejemplo, se hacen class’es para cada botón (.boton_aceptar_1, .boton_aceptar_2 etc etc etc) y se posicionan absolutamente. También se hacen class’es a cada botón y se marginan, incluso negativamente (lo que IE6 no ve con buenos ojos). Imagínense si son varias páginas de formularios y los botones se repiten (por ejemplo, el ‘Aceptar’ o el ‘Enviar’ son los más comunes) pero no siempre van de a 2, sino que a veces van solos o de a 3, 4…. enfin. Hacer class’es para cada situación no es la mejor solución, ya que llenaremos la hoja de estilos de propiedades de posicionamiento en vez de aplicar una solución global, independiente de la cantidad de botones que estén involucrados. Bueno, esa es la idea de este artículo.

SafariFirefoxInternet Explorer 7Internet Explorer 6Opera

Es frecuente que los temas que escribo para CSSLab se den mientras estoy en algún proyecto, y me topo con dificultades que logro solucionar, y luego las muestro y explico aquí cómo se resolvió finalmente. Este es otro de esos casos, sólo que este tema lo había resuelto hacía mucho pero se dió nuevamente a manos de otro profesional web con quien trabajo. Lo ayudé con esto y finalmente me tomo el tiempo de explicarlo aquí para todos quienes tengan la misma situación.

Vamos a lo que nos reúne. Construído el lindo formulario, con <fieldset>, <legend>, varios <label>, <input /> y <textarea> quizás, llega la hora de poner los botones de Enviar y No Enviar como en el ejemplo gráfico anterior. Mi método implica utilizar listas, ya que me gustan para contener botones como menúes (aunque puede ser un <div> si quienes, incluso un <p>. Cada uno con su gusto). El HTML de la botonera:

<ul id="botonera">
     <li><input type="submit" value="Enviar" /><input type="reset" value="No Enviar" /></li>
</ul>

Como habrán notado, en vez de poner cada botón dentro de un <li></li> y flotarlos a la izquierda (como usualmente se usa para los menúes horizontales), puse todos los botones dentro de un mismo <li>, caso contrario no podrían ser centrados. Entonces, si es sólo un botón, o todos los que sean necesarios, deberán ir consecutivamente uno al lado del otro dentro de un único <li></li>.

Ahora, el CSS que hará la magia:

#botonera {
     width: 400px;
     margin: 20px auto;
}
     #botonera li {
          list-style: none;
          text-align: center;
     }
     #botonera input {
          margin-left: 10px;
     }

Bastante simple. Si se han fijado, lo que hace que se centren los elementos dentro del <li> es el text-align: center; ya que como <input /> es una etiqueta lineal, se alineará tal como lo haría un texto cualquiera. Ese es todo el truco. Lo otro es darle al <input /> un margin-left de unos 10px para que se separen un poco si son 2 o más botones (he visto usar &nbsp; para ello… no es correcto). Saco 3 conclusiones de esta solución:

  1. No se usa float alguno, lo que no hace el contenedor colapsar así que nos ahorramos un clearfix. Además que no puedes centrar un float.
  2. Se puede usar para cualquier botón, no sólo <input />: <a> y <button> también son soportados. Así que puedes también hacer un menú horizontal centrado con esta misma técnica.
  3. Es soportado por todos los browsers.

Ver Ejemplo

]]>
http://www.csslab.cl/2008/03/11/esas-botoneras-centrandolas/feed/ 7
Horror #2 http://www.csslab.cl/2008/03/07/horror-2/ http://www.csslab.cl/2008/03/07/horror-2/#comments Fri, 07 Mar 2008 19:04:23 +0000 Jorge Epuñan http://www.csslab.cl/2008/03/07/horror-2/ <table width="539" border="0" cellspacing="0" cellpadding="0">
     <tr>
          <td><img src="/imgs/spacer.gif" width="539" height="12"/></td>
     </tr>
</table>

¿Un spacer? No, habían muuuuchos más de donde salió ese. Y lo peor es una tabla entera solo para contener un spacer… Sin comentarios.

]]>
http://www.csslab.cl/2008/03/07/horror-2/feed/ 12
Horror http://www.csslab.cl/2007/12/11/horror/ http://www.csslab.cl/2007/12/11/horror/#comments Tue, 11 Dec 2007 18:28:36 +0000 Jorge Epuñan http://www.csslab.cl/2007/12/11/horror/ Modificando una página, me encontré con esto.

Sin comentarios.

     <tr align="center" valign="middle">
          <td class="cuerpo2"> <div align="center"><a href="entra.asp" target="_top" class="menulink Estilo1"><strong>INICIO</strong></a></div></td>
               </tr>
     </table></td>
          </tr>
     <tr align="left"> </tr>
</table>
               </td>
          </tr>
  <!– This table was automatically created with Macromedia Fireworks –>
     <!– http://www.macromedia.com –>

     </table>
<!–========================= STOP COPYING THE HTML HERE =========================–>
     </body>
</html>

]]>
http://www.csslab.cl/2007/12/11/horror/feed/ 29
La descendencia del CSS http://www.csslab.cl/2007/12/06/la-descendencia-del-css/ http://www.csslab.cl/2007/12/06/la-descendencia-del-css/#comments Thu, 06 Dec 2007 14:57:17 +0000 Jorge Epuñan http://www.csslab.cl/2007/12/06/la-descendencia-del-css/ Como verán, hasta las Hojas de Estilo en Cascada tienen descendencia. A través de CSS podemos reconocer las etiquetas que en la estructura HTML pertenecen o están contenidas dentro de otra etiqueta, y aplicarles estilos determinados. En CSS estos se llaman Selectores Descendentes. Pero me gustaría dejar claro desde el principio que 2 de estos selectores no funcionan en IE6. ¿Y para qué sigo escribiendo sobre esto? -podrían preguntarse. Bueno porque es una manera muy útil de manejar estilos, y porque esto refuerza que IE6 apesta como browser. Espero algún día que este navegador sea borrado completamente de la faz de la tierra y podamos utilizar todos los estándares habidos y por haber, sin preocuparnos por el soporte. Bueno, hecho los descargos.

Selectores Descendentes

Se ocupan para afectar a todos los elementos que pertenecen (o descenden) de una determinada etiqueta padre. Esto es muy común y hace falta sólo el ejemplo en CSS para que se den cuenta de lo que me refiero:

Ejemplo Selectores Descendentes

ul a {
     color: red;
}

En el ejemplo anterior, vemos que el color rojo se aplicará solamente a los enlaces <a> que estén dentro de un <ul>, y no a otros. Si queremos ser más específicos, podemos definir id‘s o class‘es:

.menu a {
     color: red;
}

Aquí el color rojo estará en toda etiqueta que tenga una class="menu". Y siendo más específico aún, podemos definir si esa class pertenece a cierta etiqueta:

ul.menu a {
     color: red;
}

Aquí sólo se verá el rojo del link si está dentro de un <ul class="menu"> y no otra etiqueta con esa misma class.

Ver ejemplo 1

Hay que tener cuidado con ser tan específico declarando estilos, ya que suelen haber problemas posteriores de que no se reconoce cierto estilo, siendo que está declarado por diferencias de peso entre éstas. Esta especificidad pienso abordarlo muy luego, ya que es un problema muy común e importante de conocer. Pero mientras mejor sigo con esto.

Selectores Hijo (no soportado por IE6)

Ejemplo Selectores Hijo

Se usa para afectar a uno hijo de determinado elemento.

ul li > a {
     color: red;
}

Hasta aquí suena igual que los selectores descendentes. La diferencia es que con los selectores hijo afectarán solamente los links que estén dentro del <li>, y no dentro de otra sub etiqueta.

<ul>
     <li><a href="">Link 1</a></li>
     <li><em><a href="">Link 1</a></em></li>
</ul>

Usando el ejemplo anterior, veremos que utilizando los selectores hijos el color rojo se aplicará sólo al <a> contenido dentro del <li>, y no al que está dentro de <em> ya que pasó a ser su hijo y no del <li> (imagina que ahora es su nieto).

Ver ejemplo 2

Selectores Hermanos Adyacentes (no soportado por IE6)

Ejemplo Selectores Hermanos Adyacentes

Son los que comparten la misma etiqueta padre y que se encuentran uno a lado del otro en la estructura HTML. Se identifica con un signo + entre los hermanos, y la etiqueta que tendrá el estilo será la última declarada luego de este +.

p a+em {
     color: red;
}

Ver ejemplo 3

Finalmente, ¿qué uso tienen estos últimos 2 selectores, si no son soportados por IE6? Bien, a través de tu framework de Javascript favorito (que suelen ser crossbrowser) puedes darles un gran uso, por ejemplo manipulando classes para tablas, que suelen tener muchos elementos anidados (para una simple celda tienes que escribir <table><tr><td></td></tr></table>).

Gracias a Carlos Cazorla por las ilustraciones

]]>
http://www.csslab.cl/2007/12/06/la-descendencia-del-css/feed/ 10
1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221| viagrea onling viagra tablets name and cost levitra and dapoxetine youtube/viagra cialis extra generic viagra accepting american express buy generic viagra online with no prescription with mastercard generic levitra 20 mg levitra pro buy viagra online in ireland is it illegal to order viagra from outside the united states cheapest generic cialis buy cheap levitra overnight delivery cialis wears off airport security generic viagra generic finasteride viagra for sale using paypal ukAccutane Online Doxycycline online Buy Cheap Lexapro Online No Prescription Prednisone Online Buy Accutane No Prescription