Foros del Web » Creando para Internet » CSS »

clases en div's anidados

Estas en el tema de clases en div's anidados en el foro de CSS en Foros del Web. Hola, tengo dos DIV anidados , y en cada uno de ellos tengo etiquetas h1. Pretendo que la definición de h1 en el div "padre" ...
  #1 (permalink)  
Antiguo 24/02/2014, 09:14
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 1
clases en div's anidados

Hola, tengo dos DIV anidados , y en cada uno de ellos tengo etiquetas h1.
Pretendo que la definición de h1 en el div "padre" sea distinta del div "hijo", por decirlo así.

para ello defino dos clases distintas para h1 y asigno cada clase a cada div.

pero me encuentro con una cosa muy curiosa. Esto funciona si la declaracion de las clases esta en el mismo orden en que luego las asigno en los div. Si le cambio el orden deja de funcionar... raro no?
pongo el codigo para que se entienda:

Código CSS:
Ver original
  1. .info_tabla h1 {
  2. color: #FFFFFF;
  3. background-color:#000000;
  4. font-family: "Times New Roman", Times, serif;
  5. font-size: 25px;
  6. height:50px;
  7. width:100px;
  8. }
  9. .datos_tabla h1 {
  10. color: #33CC00;
  11. background-color: #0066CC;
  12. font-family: "Times New Roman", Times, serif;
  13. font-size: 15px;
  14. height:20px;
  15. width:100px;
  16.  
  17. }

Código HTML:
Ver original
  1. <div id="divpagina" class="info_tabla">
  2.  
  3. <h1> de info tabla</h1>
  4. <div class="datos_tabla">
  5. <h1> de datos tabla</h1>
  6. </div>
  7. </div>

tal cual esta aqui funciona correctamente, pero si invierto el orden en la declaracion de las clases deja de funcionar:

Código CSS:
Ver original
  1. .datos_tabla h1 {
  2. color: #33CC00;
  3. background-color: #0066CC;
  4. font-family: "Times New Roman", Times, serif;
  5. font-size: 15px;
  6. height:20px;
  7. width:100px;
  8.  
  9. }
  10.  
  11. .info_tabla h1 {
  12. color: #FFFFFF;
  13. background-color:#000000;
  14. font-family: "Times New Roman", Times, serif;
  15. font-size: 25px;
  16. height:50px;
  17. width:100px;
  18. }

Alguien sabe a que es debido? no debería ser indiferente el orden en que se declara si luego se hace referencia a la clase por el nombre de la misma?

Gracias ....

Última edición por pzin; 25/02/2014 a las 01:58 Razón: formato código
  #2 (permalink)  
Antiguo 24/02/2014, 09:48
 
Fecha de Ingreso: julio-2010
Ubicación: A Coruña
Mensajes: 505
Antigüedad: 13 años, 8 meses
Puntos: 60
Respuesta: clases en div's anidados

Los archivos css se leen siempre hacia abajo, por lo tanto cualquier elemento situado en la parte inferior del archivo va a sobreescribir otro elemento, aunque se llame igual, situado en la parte superior.

Lo que pasa en tu archivo es que las dos clases llaman al mismo elemento, es decir, al h1 que hay dentro de ".info_tabla". Lo explico:

Si pones en la parte superior del css:
.datos_tabla h1
Lo que sucede es que a todos los h1 que aparezcan dentro de .datos_tabla tengan unos estilos...

Y si luego más abajo en el css pones:
.info_tabla h1
Lo que se le está diciendo es que a todos los h1 que aparezcan dentro de ".info_tabla" tengan unos estilos... es decir, se está llamando a los mismos h1 a los que se llamaban en los westilos de antes, por eso se sobreescriben.

Para que los estilos de la clase ".info_tabla h1" solo afectaran al primer h1 que aparece, tendrias que llamarlos así:
.info_tabla > h1

Con lo que le estarias diciendo que solo aplique estilos al primer h1 que sea hijo de .info_tabla

No se si me expliqué bien xD, si no te intento poner un ejemplo más claro :)
__________________
http://zeromm.es/
Diseñador Web | Experto en Responsive Design, CSS3 y Optimización Web.
  #3 (permalink)  
Antiguo 24/02/2014, 09:51
Avatar de Rafael
Modegráfico
 
Fecha de Ingreso: marzo-2003
Mensajes: 9.028
Antigüedad: 21 años, 1 mes
Puntos: 1826
Respuesta: clases en div's anidados

Trata con esto:
Código CSS:
Ver original
  1. .datos_tabla > h1 {}

Aparte de eso, no te conviene usar más de un h1. Usa los h2 que gustes.
  #4 (permalink)  
Antiguo 24/02/2014, 10:03
 
Fecha de Ingreso: julio-2010
Ubicación: A Coruña
Mensajes: 505
Antigüedad: 13 años, 8 meses
Puntos: 60
Respuesta: clases en div's anidados

Cita:
Iniciado por Rafael Ver Mensaje
Trata con esto:
Código CSS:
Ver original
  1. .datos_tabla > h1 {}

Aparte de eso, no te conviene usar más de un h1. Usa los h2 que gustes.
De esa forma, al poner debajo ".info_tabla h1" quedarían sobreescritos los estilos igualmente, porque seguirían apuntando al mismo h1.

Tendria que ponerlo ".info_tabla > h1"

Y lo de no poner más de un h1. Es cierto que en el tipo de código que tiene no estaría muy correcto, pero si usa html5 con la semantica correcta si que se pueden usar varios h1.
__________________
http://zeromm.es/
Diseñador Web | Experto en Responsive Design, CSS3 y Optimización Web.
  #5 (permalink)  
Antiguo 24/02/2014, 10:27
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: clases en div's anidados

Ok, gracias, funciona correctamente.

No sabía lo del simbolo > .
Pero cuando dices:
Con lo que le estarias diciendo que solo aplique estilos al primer h1 que sea hijo de .info_tabla

te refieres a que solo lo aplica al div que tenga asignada esa clase? o hay mas consideraciones....

Lo de no utilizar mas de un h1 es por algo en particular? por buscadores... o algo asi?

si utilizo h2 no hay problema?

gracias por la pronta respuesta...
  #6 (permalink)  
Antiguo 24/02/2014, 10:39
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: clases en div's anidados

Cita:
Iniciado por Zeromm Ver Mensaje
De esa forma, al poner debajo ".info_tabla h1" quedarían sobreescritos los estilos igualmente, porque seguirían apuntando al mismo h1.

Tendria que ponerlo ".info_tabla > h1"


La respuesta de Rafael es correcta. El selector > no selecciona "al primer hijo", sino a todos los hijos. Pero sólo a los hijos, ningún otro elemento descendiente.

Para seleccionar a primeros elementos hay que usar :first-of-type o :first-child.
  #7 (permalink)  
Antiguo 24/02/2014, 12:15
 
Fecha de Ingreso: julio-2010
Ubicación: A Coruña
Mensajes: 505
Antigüedad: 13 años, 8 meses
Puntos: 60
Respuesta: clases en div's anidados

Cita:
Iniciado por pzin Ver Mensaje


La respuesta de Rafael es correcta. El selector > no selecciona "al primer hijo", sino a todos los hijos. Pero sólo a los hijos, ningún otro elemento descendiente.

Para seleccionar a primeros elementos hay que usar :first-of-type o :first-child.
No es por discutir, pero no es correcta, y aquí puedes comprobarlo.

http://codepen.io/zeromm/pen/qcngv

No funciona, y es lógico, ya que de esta forma solo le dice que el hijo de ".datos_tabla" tenga un estilo... pero luego aplicandole estilos a ".info_tabla h1" le estás dando estilos al mismo h1, por eso se sobreescriben.

Pero en cambio si le indicas, como dije, ".info_tabla > h1", selecciona solo los h1 que sean hijos directos de .info_tabla, que no es el caso del <h1> que está dentro de ".datos_tabla" que no es hijo directo de ".info_tabla". Y así si funciona

http://codepen.io/zeromm/pen/kxbgq

Y en este caso sería totalmente innecesario añadir un ":first-of-type" o ":first-child", que además no son compatibles con ie8 sin librerias externas, ya que con un simple selector ">" que si es compatible con esas versiones queda solucionado.
__________________
http://zeromm.es/
Diseñador Web | Experto en Responsive Design, CSS3 y Optimización Web.

Última edición por Zeromm; 24/02/2014 a las 12:20
  #8 (permalink)  
Antiguo 24/02/2014, 12:40
 
Fecha de Ingreso: julio-2010
Ubicación: A Coruña
Mensajes: 505
Antigüedad: 13 años, 8 meses
Puntos: 60
Respuesta: clases en div's anidados

Cita:
Iniciado por bouinho Ver Mensaje


Pero cuando dices:
Con lo que le estarias diciendo que solo aplique estilos al primer h1 que sea hijo de .info_tabla

te refieres a que solo lo aplica al div que tenga asignada esa clase? o hay mas consideraciones....

En este caso solo le aplica estilos a los h1 que sean hijos directos de esa clase, a todos sus hijos (antes puse que solo hacia referencia al primero pero no, es a todos sus hijps).


Cita:
Iniciado por bouinho Ver Mensaje
Lo de no utilizar mas de un h1 es por algo en particular? por buscadores... o algo asi?

si utilizo h2 no hay problema?

gracias por la pronta respuesta...
En html4 y versiones anteriores, a google no le parecía buena practica usar más de un h1 por cada página, por eso se consideraba erroneo. Pero desde que salió el html5 con sus "sections" y sus "articles", se pueden usar varios h1 sin problema (siempre que estén correctamente puestos a nivel semantico). Pero si vas a usar html4 o inferior Rafael tiene razón, y no debes usar más de un h1
__________________
http://zeromm.es/
Diseñador Web | Experto en Responsive Design, CSS3 y Optimización Web.

Última edición por Zeromm; 24/02/2014 a las 12:46
  #9 (permalink)  
Antiguo 24/02/2014, 14:32
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: clases en div's anidados

Cita:
Iniciado por Zeromm Ver Mensaje
No es por discutir, pero no es correcta, y aquí puedes comprobarlo.
Bueno, no miré lo que pedía, andaba con el móvil. Pero era más que nada por lo de que > sirve para seleccionar el primer hijo.

Y eso de hijos directos en realidad no existe; son hijos o no los son.

Cita:
Iniciado por Zeromm Ver Mensaje
Y en este caso sería totalmente innecesario añadir un ":first-of-type" o ":first-child", que además no son compatibles con ie8 sin librerias externas, ya que con un simple selector ">" que si es compatible con esas versiones queda solucionado.
A mi IE8... :poopsmiley:

Edito, mirando bien el problema, la solución de Rafael si que es válida, sólo hay que invertir los selectores:

Código CSS:
Ver original
  1. .info_tabla h1 {}
  2. .datos_tabla > h1 {}

Que además ese orden también es más lógico, ya que sigue el del HTML.

Última edición por pzin; 24/02/2014 a las 14:37
  #10 (permalink)  
Antiguo 24/02/2014, 14:53
 
Fecha de Ingreso: julio-2010
Ubicación: A Coruña
Mensajes: 505
Antigüedad: 13 años, 8 meses
Puntos: 60
Respuesta: clases en div's anidados

Cita:
Iniciado por pzin Ver Mensaje
Y eso de hijos directos en realidad no existe; son hijos o no los son.
Cierto, mezclé el que fueran siempre elementos internos, sin incluir los que están dentro de otros... xD

Cita:
Iniciado por pzin Ver Mensaje

A mi IE8... :poopsmiley:
A ti... pero a muchos clientes no, por lo tanto yo prefiero un sistema más optimizado que además es igual o incluso "más sencillo" de codear y que da soporte a navegadores antiguos y a los modernos... que otro que es "más dificil" codear y que no da ese soporte, y que por lo tanto no es tan optimizado.

Cita:
Iniciado por pzin Ver Mensaje
Edito, mirando bien el problema, la solución de Rafael si que es válida, sólo hay que invertir los selectores:
Claro, pero la pregunta de bouinho era buscar una solución teniendo un orden concreto en el css... y con el orden que tenía él no funcionaba. Es más, si se pudiera modificar el orden no habría que añadir ni el ">".
__________________
http://zeromm.es/
Diseñador Web | Experto en Responsive Design, CSS3 y Optimización Web.

Etiquetas: anidados, background, clases, color
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:24.