header ¡dios mio, esta lleno de estrellas..!

Publicidad




Hijos, descencientes, hermanos y demás familia.

Siempre me he hecho un poco de lio con la gran cantidad de tipos de selectores que tenemos disponibles en CSS. Así que me tirando de las especificaciones del estandar de CSS2 he tratado de estructurarlo todo un poco, a ver si de este modo me aclaro un poco.

Empezaremos, como no, por lo mas divertido, los selectores de tipos.

Relaciones entre etiquetas

Lo primero que tenemos que saber que en nuestro marcado en XHTML, algunas etiquetas servirán de contenedores de otras, así:

HTML:
  1.   <p>
  2.     &nbsp;
  3.   </p>
  4. </div>

Entonces decimos que la etiqueta div es padre de la etiqueta p, o lo que es lo mismo, la etiqueta p es hija de div.

Podemos tener varios niveles de anidamiento en nuestro marcado, como aqui:

HTML:
  1.   <p>
  2.     <span>&nbsp;</span>
  3.   </p>
  4. </div>

Entonces la etiqueta div es padre de p, y que p es padre de span, por lo tanto podríamos decir que div es "abuela" de span.

Bueno, resulta que en CSS no se habla de abuelos, bisabuelos ni cosas asi, se dice, simplemente que la etiqueta span es descendiente de div, o que div es ascendiente de span, que lo mismo da y da lo mismo.

Y como no, tambien podemos tener cosas como esta:

HTML:
  1.   <p>
  2.     <span>&nbsp;</span>
  3.     <a>&nbsp;</a>
  4.     <acronym>&nbsp;</acronym>
  5.   </p>
  6. </div>

Donde todo lo dicho antes para la etiqueta span es aplicable a las etiquetas a y acronym.

Con esto surge una nueva relación entre nuestros elementos de marcado, a ver, span, a y acronym son hijas de p, por lo tanto tienen el mismo padre y claro esta son etiquetas hermanas.

Ahora es importante prestar atención al orden en el que aparecen las etiquetas en nuestro código, se dice que la etiqueta a es hermana adyacente de span por que ambas tienen el mismo padre y está justo a continuación de su hermana mayor.

Pero ojo, span NO es hermana adyacente de a, por que aparece en primer lugar. Cosas de familia.

Selectores de tipo

Sabiendo lo anterior, el uso de selectores de tipo en CSS en mucho más sencillo, primero un marcado sencillito para hacer pruebas:

HTML:
  1.     <div id="juan">
  2.         juan
  3.         <div id="maria">
  4.             maria
  5.             <div id="luis">
  6.                 luis
  7.             </div>
  8.             <div id="jose">
  9.                 jose
  10.             </div>           
  11.             <div id="rosa">
  12.                 rosa
  13.                 <div id="sofia">
  14.                     sofia
  15.                 </div>
  16.                 <div id="jesus">
  17.                     jesus
  18.                 </div>         
  19.             </div>           
  20.         </div>
  21.         <div id="marta">
  22.             marta
  23.         </div>
  24.     </div>
  25. </body>

y una regla para todas las capas div, simplemente para verlo bien.

CSS:
  1. div{
  2.     width:50%;
  3.     border:solid 1px #000;
  4.     text-align:center;
  5.     margin:auto;
  6.     padding:3%;
  7.     font-family:courier, arial, monospace;
  8.     background-color:#FFF;
  9.  
  10. }

esto nos muestra algo asi:


ejemplo 1

Ahora podemos acceder a los distintos elementos de marcado mediante selectores de tipo en CSS, mejor con unos ejemplos.

Selector de descencientes

Un selector con la forma A B, equivale cuando el elemento B es descendiente del elemento A.

Selecciona todas las capas div que esten dentro de otra capa div

CSS:
  1. div div{
  2. background-color:red;
  3. }


Ejemplo 2

Selector de hijos

Un selector con la forma A>B equivale cuando B es hijo de A.

Selecciona todos las capas div hijas de maria

CSS:
  1. div#maria>div{
  2. background-color:red;
  3. }


Ejemplo 3

Selectores de hermanos adyacentes

Un selector con la forma A+B equivale cuando B es hermano adyacente de A.

Selecciona todas las capas div que sean hermanas adyacentes de otra capa div

CSS:
  1. div+div{
  2. background-color:red;
  3. }


Ejemplo 4

Selectores de tipo combinados

Tambien podemos usar combinaciones de los distintos selectores de tipo que hemos visto hasta ahora, y asi, complicar la cosa todo lo necesario.

Selecciona todas las capas hijas de otra capa que a su vez sea hermana adyacente de una capa

CSS:
  1. div+div>div{
  2. background-color:red;
  3. }


Ejemplo 5

Selecciona todas las capas hijas de otra capa que a su vez sea hija de una capa, es decir, selecciona a los nietos.

CSS:
  1. div div div{
  2. background-color:red;
  3. }


Ejemplo 6

Luis, Jose y Rosa son nietos de Juan, mientras que Sofia y Jesus lo son de Maria.

Problemas con IE

Lo comentado arriba es lo que dice el estandar sobre CSS del W3C, lo que casi equivale a decir que en Internet Explorer no funciona, o funciona a medias.

De hecho, IE solo reconoce los selectores de descendientes, ni hijos ni hermanos adyacentes, esto es lo que hay. En realidad tampoco reconoce los selectores de atributo de los hablaré en otra ocasión.

Cuando explico esto en clase, la gente suele alucinar con la potencia de todo esto, y con la cantidad de cosas que podemos hacer, y luego tengo que pasar la verguenza de decirles que si quieren que sus páginas sean visualizadas correctamente por el 80% de sus potenciales visitantes se tienen que apañar con la mitad de las herramientas posibles.

Se me parte el corazón.

archivado por hari en css, webdesign
el 18 dEurope/Berlin Agosto dEurope/Berlin 2006
puedes escribir un comentario
o leer el que ya existe

Comentarios

  1. 1

    […] Hace unos dias hablamos sobre los selectores de tipo en CSS2, que sin duda pueden resultar muy útiles para simplificar nuestro código. […]

Añade tu opinión

*

*