<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Selector on Commentary of Takao</title><link>https://takao.blog/es/tags/selector/</link><description>Recent content in Selector on Commentary of Takao</description><generator>Hugo -- gohugo.io</generator><language>es</language><copyright>Commentary of Takao</copyright><lastBuildDate>Sun, 12 Jul 2026 04:12:51 +0900</lastBuildDate><atom:link href="https://takao.blog/es/tags/selector/index.xml" rel="self" type="application/rss+xml"/><item><title>Recetas CSS creativas con el selector padre :has()</title><link>https://takao.blog/es/web/css-has-pseudo-selector-recipes/</link><pubDate>Tue, 10 Mar 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-has-pseudo-selector-recipes/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-has-pseudo-selector-recipes-es.png" alt="Featured image of post Recetas CSS creativas con el selector padre :has()" /&gt;&lt;h2 id="cómo-funciona-has"&gt;Cómo funciona &lt;code&gt;:has()&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;La pseudo-clase &lt;code&gt;:has()&lt;/code&gt; toma una lista de selectores y selecciona un elemento si contiene cierto descendiente o hermano. Soportada en todos los navegadores principales desde 2026.&lt;/p&gt;
&lt;h2 id="receta-1-estilos-de-validación-de-formularios"&gt;Receta 1: Estilos de validación de formularios
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;form-group&lt;/span&gt;:&lt;span style="color:#a6e22e"&gt;has&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#f92672"&gt;input&lt;/span&gt;:&lt;span style="color:#a6e22e"&gt;invalid&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;border-left&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;solid&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;#e74c3c&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Muestra/oculta mensajes de error y colorea bordes según el estado del input, sin JavaScript.&lt;/p&gt;
&lt;h2 id="receta-2-layouts-dinámicos-de-tarjetas"&gt;Receta 2: Layouts dinámicos de tarjetas
&lt;/h2&gt;&lt;p&gt;Tarjetas con imagen ajustan su padding automáticamente: &lt;code&gt;.card:has(img) { padding: 0; }&lt;/code&gt;&lt;/p&gt;</description></item></channel></rss>