Selector CSS3: ¿primero de tipo con nombre de clase?
¿Es posible usar el selector CSS3 :first-of-type
para seleccionar el primer elemento con un nombre de clase dado? No he tenido éxito con mi prueba así que estoy pensando que no lo es?
El Código (http://jsfiddle.net/YWY4L/):
p:first-of-type {color:blue}
p.myclass1:first-of-type {color:red}
.myclass2:first-of-type {color:green}
<div>
<div>This text should appear as normal</div>
<p>This text should be blue.</p>
<p class="myclass1">This text should appear red.</p>
<p class="myclass2">This text should appear green.</p>
</div>
8 answers
No, no es posible usar un solo selector. La pseudo-clase :first-of-type
selecciona el primer elemento de su tipo (div
, p
, etc). Usar un selector de clase (o un selector de tipo) con esa pseudo-clase significa seleccionar un elemento si tiene la clase dada (o es del tipo dado) y es el primero de su tipo entre sus hermanos.
Desafortunadamente, CSS no proporciona un selector :first-of-class
que solo elige la primera aparición de una clase. Como solución alternativa, puede usar algo como esto:
.myclass1 { color: red; }
.myclass1 ~ .myclass1 { color: /* default, or inherited from parent div */; }
Las explicaciones e ilustraciones para la solución alternativa se dan aquí y aquí.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:29
El borrador de Selectores CSS Nivel 4 propone agregar una gramática of <other-selector>
dentro de la :nth-child
selector . Esto le permitiría elegir el nésimo hijo que coincida con un selector dado:
:nth-child(1 of p.myclass)
Los borradores anteriores usaban una nueva pseudo-clase, :nth-match()
, así que puede ver esa sintaxis en algunas discusiones de la característica:
:nth-match(1 of p.myclass)
Esto ahora ha sido implementado en WebKit, y por lo tanto está disponible en Safari, pero parece ser el único navegador que lo soporta. Hay tickets archivados para implementarlo Blink (Chrome), Gecko (Firefox), y una solicitud para implementarlo en Edge, pero no hay progreso aparente en ninguno de estos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-22 15:45:50
Encontré una solución para su referencia. de algunos divs del grupo seleccione del grupo de dos divs de la misma clase el primero
p[class*="myclass"]:not(:last-of-type) {color:red}
p[class*="myclass"]:last-of-type {color:green}
Por cierto, no se por qué :last-of-type
funciona, pero :first-of-type
no funciona.
Mis experimentos en jsfiddle... https://jsfiddle.net/aspanoz/m1sg4496 /
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-26 14:49:02
Este es un hilo antiguo, pero estoy respondiendo porque todavía aparece alto en la lista de resultados de búsqueda. Ahora que el futuro ha llegado, puede usar el pseudo-selector: nth-child.
p:nth-child(1) { color: blue; }
p.myclass1:nth-child(1) { color: red; }
p.myclass2:nth-child(1) { color: green; }
El pseudo-selector :nth-child es poderoso - los paréntesis aceptan fórmulas así como números.
Más aquí: https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-child
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-22 13:27:17
This It not posible usar el selector CSS3 : first-of-type para seleccionar el primer elemento con un nombre de clase dado.
Sin embargo, si el elemento objetivo tiene un elemento hermano anterior, puede combinar la pseudo-clase CSS de negación y los selectores hermanos adyacentes para que coincida con un elemento que no tiene inmediatamente un elemento anterior con el mismo nombre de clase:
:not(.myclass1) + .myclass1
Código de trabajo completo ejemplo:
p:first-of-type {color:blue}
p:not(.myclass1) + .myclass1 { color: red }
p:not(.myclass2) + .myclass2 { color: green }
<div>
<div>This text should appear as normal</div>
<p>This text should be blue.</p>
<p class="myclass1">This text should appear red.</p>
<p class="myclass2">This text should appear green.</p>
</div>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-02 21:59:34
Como una solución alternativa, podría envolver sus clases en un elemento padre como este:
<div>
<div>This text should appear as normal</div>
<p>This text should be blue.</p>
<div>
<!-- first-child / first-of-type starts from here -->
<p class="myclass1">This text should appear red.</p>
<p class="myclass2">This text should appear green.</p>
</div>
</div>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-28 14:30:31
No estoy seguro de cómo explicar esto, pero me encontré con algo similar hoy.
No poder establecer .user:first-of-type{}
mientras que .user:last-of-type{}
funcionó bien.
Esto se arregló después de que los envolví dentro de un div sin ninguna clase o estilo:
Https://codepen.io/adrianTNT/pen/WgEpbE
<style>
.user{
display:block;
background-color:#FFCC00;
}
.user:first-of-type{
background-color:#FF0000;
}
</style>
<p>Not working while this P additional tag exists</p>
<p class="user">A</p>
<p class="user">B</p>
<p class="user">C</p>
<p>Working while inside a div:</p>
<div>
<p class="user">A</p>
<p class="user">B</p>
<p class="user">C</p>
</div>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-05 14:39:21
Simplemente :first
funciona para mí, ¿por qué no se menciona esto todavía?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-09 15:47:46