<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Css on Commentary of Takao</title><link>https://takao.blog/es/tags/css/</link><description>Recent content in Css 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/css/index.xml" rel="self" type="application/rss+xml"/><item><title>CSS Containment: Aislamiento de renderizado para rendimiento</title><link>https://takao.blog/es/web/performance-css-contain-property/</link><pubDate>Mon, 15 Jun 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/performance-css-contain-property/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/performance-css-contain-property-es.png" alt="Featured image of post CSS Containment: Aislamiento de renderizado para rendimiento" /&gt;&lt;p&gt;La propiedad CSS &lt;code&gt;contain&lt;/code&gt; permite aislar subárboles del DOM para que el navegador pueda optimizar el renderizado independientemente del resto de la página.&lt;/p&gt;
&lt;h2 id="valores-de-contain"&gt;Valores de contain
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;layout&lt;/code&gt;: el layout interno no afecta al exterior. &lt;code&gt;style&lt;/code&gt;: los estilos no se escapan. &lt;code&gt;paint&lt;/code&gt;: el elemento pinta dentro de sus bounds. &lt;code&gt;size&lt;/code&gt;: el elemento necesita dimensiones explícitas.&lt;/p&gt;
&lt;h2 id="content-visibility"&gt;content-visibility
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;content-visibility: auto&lt;/code&gt; combina containment con lazy rendering. Los elementos fuera de pantalla no se renderizan hasta que se acercan al viewport. Mejora drásticamente LCP en páginas largas.&lt;/p&gt;</description></item><item><title>Optimización de carga de fuentes web</title><link>https://takao.blog/es/web/performance-fonts-loading-optimization/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/performance-fonts-loading-optimization/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/performance-fonts-loading-optimization-es.png" alt="Featured image of post Optimización de carga de fuentes web" /&gt;&lt;p&gt;Las fuentes web pueden causar FOIT (Flash of Invisible Text) o FOUT (Flash of Unstyled Text). Optimizar su carga mejora LCP y la experiencia de lectura.&lt;/p&gt;
&lt;h2 id="font-display"&gt;font-display
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;font-display: swap&lt;/code&gt;: muestra texto con fuente del sistema mientras carga. &lt;code&gt;font-display: optional&lt;/code&gt;: no descarga si la red es lenta. &lt;code&gt;font-display: block&lt;/code&gt;: período de bloqueo corto.&lt;/p&gt;
&lt;h2 id="subset-de-fuentes"&gt;Subset de fuentes
&lt;/h2&gt;&lt;p&gt;Incluye solo los caracteres necesarios (latino básico, no todos los glifos). Herramientas: &lt;code&gt;glyphhanger&lt;/code&gt;, &lt;code&gt;fonttools&lt;/code&gt;. Reduce drásticamente el tamaño de archivos.&lt;/p&gt;</description></item><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><item><title>Tailwind CSS v4: Novedades y cambios</title><link>https://takao.blog/es/web/tailwind-css-v4-release-changes/</link><pubDate>Thu, 05 Feb 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/tailwind-css-v4-release-changes/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/tailwind-css-v4-release-changes-es.png" alt="Featured image of post Tailwind CSS v4: Novedades y cambios" /&gt;&lt;p&gt;Tailwind CSS v4 es un rediseño completo. Usa el motor CSS nativo de Cascade Layers, configuración via CSS en lugar de JS, y nuevas utilidades.&lt;/p&gt;
&lt;h2 id="configuración-via-css"&gt;Configuración via CSS
&lt;/h2&gt;&lt;p&gt;Adiós a &lt;code&gt;tailwind.config.js&lt;/code&gt;. La configuración se hace en CSS con &lt;code&gt;@theme&lt;/code&gt;, &lt;code&gt;@utility&lt;/code&gt;, &lt;code&gt;@variant&lt;/code&gt;. &lt;code&gt;@import &amp;quot;tailwindcss&amp;quot;&lt;/code&gt; reemplaza las directivas anteriores.&lt;/p&gt;
&lt;h2 id="rendimiento"&gt;Rendimiento
&lt;/h2&gt;&lt;p&gt;Engine de CSS nativo sin PostCSS. Compilación 10x más rápida. Cero dependencias de JavaScript en tiempo de ejecución.&lt;/p&gt;
&lt;h2 id="nuevas-utilidades"&gt;Nuevas utilidades
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;inset-*&lt;/code&gt;, &lt;code&gt;field-sizing-*&lt;/code&gt;, &lt;code&gt;@starting-style&lt;/code&gt; para animaciones de entrada. &lt;code&gt;color-mix()&lt;/code&gt;, &lt;code&gt;light-dark()&lt;/code&gt;. Soporte mejorado para contenedores.&lt;/p&gt;</description></item><item><title>Previniendo el Cumulative Layout Shift con CSS aspect-ratio</title><link>https://takao.blog/es/web/css-aspect-ratio-cumulative-layout-shift/</link><pubDate>Wed, 10 Dec 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-aspect-ratio-cumulative-layout-shift/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-aspect-ratio-cumulative-layout-shift-es.png" alt="Featured image of post Previniendo el Cumulative Layout Shift con CSS aspect-ratio" /&gt;&lt;h2 id="entendiendo-cumulative-layout-shift"&gt;Entendiendo Cumulative Layout Shift
&lt;/h2&gt;&lt;p&gt;CLS es una métrica de Core Web Vitals que mide la estabilidad visual. Un CLS alto daña la experiencia de usuario y el SEO. La causa principal son elementos multimedia que cargan sin espacio reservado.&lt;/p&gt;
&lt;h2 id="cómo-funciona-aspect-ratio"&gt;Cómo funciona aspect-ratio
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;aspect-ratio&lt;/code&gt; declara la proporción ancho/alto de un elemento. El navegador reserva espacio, evitando saltos de layout.&lt;/p&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;responsive-video&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;aspect-ratio&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;16&lt;/span&gt; &lt;span style="color:#f92672"&gt;/&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;9&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;%&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;auto&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="uso-con-imágenes"&gt;Uso con imágenes
&lt;/h2&gt;&lt;p&gt;Reemplaza el viejo truco de padding-bottom. Combina con &lt;code&gt;max-width&lt;/code&gt; y &lt;code&gt;object-fit&lt;/code&gt; para resultados óptimos.&lt;/p&gt;</description></item><item><title>Implementando modo oscuro simple con CSS light-dark()</title><link>https://takao.blog/es/web/css-light-dark-color-scheme/</link><pubDate>Fri, 10 Oct 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-light-dark-color-scheme/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-light-dark-color-scheme-es.png" alt="Featured image of post Implementando modo oscuro simple con CSS light-dark()" /&gt;&lt;h2 id="el-problema-del-modo-oscuro-tradicional"&gt;El problema del modo oscuro tradicional
&lt;/h2&gt;&lt;p&gt;Tradicionalmente requería reglas CSS duplicadas en &lt;code&gt;@media (prefers-color-scheme: dark)&lt;/code&gt;. &lt;code&gt;light-dark()&lt;/code&gt; elimina esta duplicación.&lt;/p&gt;
&lt;h2 id="la-función-light-dark"&gt;La función light-dark()
&lt;/h2&gt;&lt;p&gt;Acepta dos colores y retorna el que coincide con el esquema actual del usuario: &lt;code&gt;color: light-dark(black, white)&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="configuración-de-color-scheme"&gt;Configuración de color-scheme
&lt;/h2&gt;&lt;p&gt;Requiere declarar los esquemas soportados: &lt;code&gt;color-scheme: light dark;&lt;/code&gt; en &lt;code&gt;:root&lt;/code&gt; o mediante &lt;code&gt;&amp;lt;meta name=&amp;quot;color-scheme&amp;quot;&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="variables-de-tema-simplificadas"&gt;Variables de tema simplificadas
&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;root&lt;/span&gt; { --bg: &lt;span style="color:#a6e22e"&gt;light-dark&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;#ffffff&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;#1a1a2e&lt;/span&gt;); --text: &lt;span style="color:#a6e22e"&gt;light-dark&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;#111111&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;#e0e0e0&lt;/span&gt;); }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sin media queries. El navegador maneja el cambio automáticamente.&lt;/p&gt;</description></item><item><title>Sintaxis estándar de anidamiento CSS sin preprocesadores</title><link>https://takao.blog/es/web/css-nesting-standard-syntax/</link><pubDate>Fri, 15 Aug 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-nesting-standard-syntax/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-nesting-standard-syntax-es.png" alt="Featured image of post Sintaxis estándar de anidamiento CSS sin preprocesadores" /&gt;&lt;h2 id="introducción"&gt;Introducción
&lt;/h2&gt;&lt;p&gt;El anidamiento CSS ahora es nativo en todos los navegadores modernos, sin necesidad de Sass, Less o PostCSS.&lt;/p&gt;
&lt;h2 id="sintaxis-básica"&gt;Sintaxis básica
&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;card&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;#fff&lt;/span&gt;; &lt;span style="color:#960050;background-color:#1e0010"&gt;.card-title&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;{&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;font-size&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1.5&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;rem&lt;/span&gt;; } &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt;:&lt;span style="color:#a6e22e"&gt;hover&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;box-shadow&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; rgba(&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0.1&lt;/span&gt;); } &lt;span style="color:#960050;background-color:#1e0010"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ya no se requiere el prefijo &lt;code&gt;&amp;amp;&lt;/code&gt; para anidar selectores de clase o elemento.&lt;/p&gt;
&lt;h2 id="diferencia-clave-con-sass"&gt;Diferencia clave con Sass
&lt;/h2&gt;&lt;p&gt;CSS nativo NO soporta concatenación de sufijos tipo BEM (&lt;code&gt;&amp;amp;--large&lt;/code&gt; es inválido). En su lugar, escribe la clase completa: &lt;code&gt;&amp;amp;.button--large&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="posicionamiento-del-"&gt;Posicionamiento del &amp;amp;
&lt;/h2&gt;&lt;p&gt;Puedes usar &lt;code&gt;&amp;amp;&lt;/code&gt; al final o en medio de un selector para estilos contextuales: &lt;code&gt;.dark-mode &amp;amp; { color: #fff; }&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Diseñando layouts modulares con CSS Container Queries</title><link>https://takao.blog/es/web/css-container-queries-vs-media-queries/</link><pubDate>Thu, 10 Jul 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-container-queries-vs-media-queries/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-container-queries-vs-media-queries-es.png" alt="Featured image of post Diseñando layouts modulares con CSS Container Queries" /&gt;&lt;h2 id="introducción"&gt;Introducción
&lt;/h2&gt;&lt;p&gt;Las Media Queries (&lt;code&gt;@media&lt;/code&gt;) cambian estilos según el viewport. CSS Container Queries (&lt;code&gt;@container&lt;/code&gt;) permiten estilar componentes según el ancho de su contenedor padre, ideal para componentes reutilizables.&lt;/p&gt;
&lt;h2 id="viewport-vs-container"&gt;Viewport vs Container
&lt;/h2&gt;&lt;p&gt;Media queries dependen del ancho de la ventana. Container queries dependen del contenedor padre inmediato, permitiendo que un mismo componente se adapte a diferentes contextos.&lt;/p&gt;
&lt;h2 id="configuración-básica"&gt;Configuración básica
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Registrar el padre con &lt;code&gt;container-type: inline-size&lt;/code&gt; 2. Escribir reglas con &lt;code&gt;@container (min-width: 400px)&lt;/code&gt;&lt;/li&gt;
&lt;/ol&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;card-wrapper&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;container-type&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;inline&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;size&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#66d9ef"&gt;container&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#f92672"&gt;min-width&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#f92672"&gt;400px&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; { .&lt;span style="color:#a6e22e"&gt;my-card&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;flex-direction&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;row&lt;/span&gt;; } }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="unidades-de-container-query"&gt;Unidades de container query
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;cqw&lt;/code&gt; (1% del ancho), &lt;code&gt;cqh&lt;/code&gt; (1% del alto), &lt;code&gt;cqmin&lt;/code&gt;, &lt;code&gt;cqmax&lt;/code&gt;. Útiles para tipografía dinámica: &lt;code&gt;font-size: clamp(1rem, 5cqw, 2rem)&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Alineación perfecta con CSS Grid Subgrid</title><link>https://takao.blog/es/web/css-subgrid-grid-nesting/</link><pubDate>Sat, 10 May 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-subgrid-grid-nesting/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-subgrid-grid-nesting-es.png" alt="Featured image of post Alineación perfecta con CSS Grid Subgrid" /&gt;&lt;h2 id="introducción"&gt;Introducción
&lt;/h2&gt;&lt;p&gt;Alinear componentes anidados entre columnas en layouts de tarjetas es un desafío común. CSS Grid subgrid resuelve esta limitación permitiendo que grids anidados hereden los tracks del padre.&lt;/p&gt;
&lt;h2 id="la-limitación-de-los-grids-anidados"&gt;La limitación de los grids anidados
&lt;/h2&gt;&lt;p&gt;Con Flexbox, los contenedores de tarjetas se alinean en altura pero los elementos internos (títulos, descripciones, botones) no se alinean entre tarjetas hermanas.&lt;/p&gt;
&lt;h2 id="solución-con-subgrid"&gt;Solución con subgrid
&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;card&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;display&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;grid&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;grid-template-rows&lt;/span&gt;: subgrid; &lt;span style="color:#66d9ef"&gt;grid-row&lt;/span&gt;: span &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;card-title&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;grid-row&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;; } .&lt;span style="color:#a6e22e"&gt;card-desc&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;grid-row&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;; } .&lt;span style="color:#a6e22e"&gt;card-btn&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;grid-row&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Los títulos, descripciones y botones se alinean perfectamente entre tarjetas, independientemente de la longitud del contenido.&lt;/p&gt;</description></item><item><title>Transiciones de página suaves con View Transitions API</title><link>https://takao.blog/es/web/css-view-transitions-single-page-api/</link><pubDate>Sat, 05 Apr 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-view-transitions-single-page-api/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-view-transitions-single-page-api-es.png" alt="Featured image of post Transiciones de página suaves con View Transitions API" /&gt;&lt;h2 id="introducción"&gt;Introducción
&lt;/h2&gt;&lt;p&gt;La View Transitions API permite al navegador capturar estados de la página antes y después de una modificación del DOM, ejecutando una transición acelerada por hardware.&lt;/p&gt;
&lt;h2 id="configuración-básica-spa"&gt;Configuración básica (SPA)
&lt;/h2&gt;&lt;p&gt;Envuelve tu función de actualización DOM en &lt;code&gt;document.startViewTransition()&lt;/code&gt;. El navegador captura los estados saliente y entrante, ejecutando un crossfade de 0.25 segundos por defecto.&lt;/p&gt;
&lt;h2 id="personalización-css"&gt;Personalización CSS
&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;view-transition-old&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#f92672"&gt;root&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;animation&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;0.3&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;s&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;ease-out&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;both&lt;/span&gt; slide-out; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;::&lt;span style="color:#a6e22e"&gt;view-transition-new&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#f92672"&gt;root&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;animation&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;0.3&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;s&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;ease-out&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;both&lt;/span&gt; slide-in; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Crea transiciones de deslizamiento, fundido, o cualquier animación personalizada.&lt;/p&gt;</description></item><item><title>Introducción al posicionamiento con anclajes CSS</title><link>https://takao.blog/es/web/css-anchor-positioning-guide/</link><pubDate>Mon, 10 Feb 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-anchor-positioning-guide/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-anchor-positioning-guide-es.png" alt="Featured image of post Introducción al posicionamiento con anclajes CSS" /&gt;&lt;h2 id="introducción"&gt;Introducción
&lt;/h2&gt;&lt;p&gt;Posicionar elementos flotantes (tooltips, popovers, menús) respecto a un elemento de referencia ha sido un desafío complejo. Tradicionalmente se requería JavaScript con cálculos continuos de coordenadas usando &lt;code&gt;getBoundingClientRect()&lt;/code&gt;. La &lt;strong&gt;API de Posicionamiento con Anclajes CSS&lt;/strong&gt; resuelve esto manejando coordenadas flotantes de forma nativa en el navegador.&lt;/p&gt;
&lt;h2 id="qué-es-css-anchor-positioning"&gt;¿Qué es CSS Anchor Positioning?
&lt;/h2&gt;&lt;p&gt;Es un estándar que permite anclar un elemento con posición absoluta o fija directamente a otro elemento usando solo CSS. Beneficios: cero JavaScript, rendimiento superior (compositor thread), y aislamiento de diseño evitando restricciones de recorte del padre.&lt;/p&gt;</description></item><item><title>Estilos con alcance CSS: @scope y estrategias de encapsulación</title><link>https://takao.blog/es/web/css-scoped-styles/</link><pubDate>Sun, 15 Dec 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-scoped-styles/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-scoped-styles-es.png" alt="Featured image of post Estilos con alcance CSS: @scope y estrategias de encapsulación" /&gt;&lt;p&gt;El alcance de CSS ha sido un desafío constante. &lt;code&gt;@scope&lt;/code&gt; introduce control de cascada basado en proximidad, aplicado por el navegador.&lt;/p&gt;
&lt;h2 id="la-regla-scope"&gt;La regla @scope
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;@scope (.card) { .title { font-size: 1.25rem; } }&lt;/code&gt; limita estilos a un elemento raíz y sus descendientes. La novedad clave es la &lt;strong&gt;proximidad de alcance&lt;/strong&gt;: estilos más cercanos al elemento tienen prioridad. Puedes definir límites con &lt;code&gt;to (.card__footer)&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="shadow-dom"&gt;Shadow DOM
&lt;/h2&gt;&lt;p&gt;Aislamiento total de estilos, marcado y comportamiento. Esencial para bibliotecas de widgets distribuidos, pero añade sobrecarga de ejecución.&lt;/p&gt;</description></item><item><title>Funciones trigonométricas CSS: Matemáticas en tus hojas de estilo</title><link>https://takao.blog/es/web/css-trig-functions/</link><pubDate>Tue, 05 Nov 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-trig-functions/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-trig-functions-es.png" alt="Featured image of post Funciones trigonométricas CSS: Matemáticas en tus hojas de estilo" /&gt;&lt;p&gt;CSS ha evolucionado para incluir funciones trigonométricas: &lt;code&gt;sin()&lt;/code&gt;, &lt;code&gt;cos()&lt;/code&gt;, &lt;code&gt;tan()&lt;/code&gt;, &lt;code&gt;atan2()&lt;/code&gt;, &lt;code&gt;asin()&lt;/code&gt;, &lt;code&gt;acos()&lt;/code&gt;. Soportadas en Chrome 111+, Firefox 108+, Safari 15.4+.&lt;/p&gt;
&lt;h2 id="patrones-de-onda-y-oscilaciones"&gt;Patrones de onda y oscilaciones
&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;wave&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;transform&lt;/span&gt;: translateY(calc(&lt;span style="color:#a6e22e"&gt;sin&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;var&lt;/span&gt;(&lt;span style="color:#f92672"&gt;--&lt;/span&gt;phase)) &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;)); }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Crea efectos de onda puramente CSS. Combinado con &lt;code&gt;@property&lt;/code&gt; para iterar ángulos.&lt;/p&gt;
&lt;h2 id="layouts-circulares"&gt;Layouts circulares
&lt;/h2&gt;&lt;p&gt;Las fórmulas &lt;code&gt;x = cx + r * cos(angle)&lt;/code&gt; y &lt;code&gt;y = cy + r * sin(angle)&lt;/code&gt; permiten layouts circulares sin JavaScript. Power menús radiales, gráficos de donut, órbitas.&lt;/p&gt;</description></item><item><title>CSS Popover API: Superposiciones nativas sin JavaScript</title><link>https://takao.blog/es/web/css-popover-api/</link><pubDate>Tue, 20 Aug 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-popover-api/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-popover-api-es.png" alt="Featured image of post CSS Popover API: Superposiciones nativas sin JavaScript" /&gt;&lt;h2 id="introducción"&gt;Introducción
&lt;/h2&gt;&lt;p&gt;Construir tooltips, menús y modales requería JavaScript. La CSS Popover API proporciona una forma declarativa nativa con manejo de posición, toggle, foco y cierre.&lt;/p&gt;
&lt;h2 id="atributos-básicos"&gt;Atributos básicos
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;popover&lt;/code&gt; marca un elemento como superposición. &lt;code&gt;popovertarget&lt;/code&gt; vincula un botón al popover. Modos: &lt;code&gt;auto&lt;/code&gt; (cierre al hacer clic fuera o Escape) y &lt;code&gt;manual&lt;/code&gt; (cierre programático).&lt;/p&gt;
&lt;h2 id="api-toggle"&gt;API Toggle
&lt;/h2&gt;&lt;p&gt;Métodos: &lt;code&gt;showPopover()&lt;/code&gt;, &lt;code&gt;hidePopover()&lt;/code&gt;, &lt;code&gt;togglePopover()&lt;/code&gt;. Eventos: &lt;code&gt;beforetoggle&lt;/code&gt; y &lt;code&gt;toggle&lt;/code&gt; con &lt;code&gt;oldState&lt;/code&gt; y &lt;code&gt;newState&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="light-dismiss"&gt;Light dismiss
&lt;/h2&gt;&lt;p&gt;Los popovers auto se cierran al hacer clic fuera, presionar Escape o abrir otro popover.&lt;/p&gt;</description></item><item><title>Animaciones CSS basadas en scroll: El futuro de los efectos de desplazamiento</title><link>https://takao.blog/es/web/css-scroll-driven-animations/</link><pubDate>Tue, 25 Jun 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-scroll-driven-animations/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-scroll-driven-animations-es.png" alt="Featured image of post Animaciones CSS basadas en scroll: El futuro de los efectos de desplazamiento" /&gt;&lt;h2 id="el-problema-de-los-eventos-scroll-en-javascript"&gt;El problema de los eventos scroll en JavaScript
&lt;/h2&gt;&lt;p&gt;Los efectos basados en scroll tradicionalmente usaban listeners de JavaScript en el hilo principal, causando jank y mala experiencia. CSS Scroll-Driven Animations mueven el tracking al compositor thread.&lt;/p&gt;
&lt;h2 id="conceptos-clave"&gt;Conceptos clave
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;scroll-timeline&lt;/code&gt; vincula una animación a la posición de scroll. &lt;code&gt;view-timeline&lt;/code&gt; la vincula a la visibilidad de un elemento. &lt;code&gt;animation-timeline&lt;/code&gt; asigna una animación a un timeline.&lt;/p&gt;
&lt;h2 id="scroll-progress-timelines"&gt;Scroll Progress Timelines
&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;progress-bar&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;animation&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;fill&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;progress&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;linear&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;animation-timeline&lt;/span&gt;: &lt;span style="color:#a6e22e"&gt;scroll&lt;/span&gt;(); }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La función &lt;code&gt;scroll()&lt;/code&gt; crea un timeline anónimo en el contenedor de scroll más cercano.&lt;/p&gt;</description></item><item><title>CSS @layer: Gestión de la cascada con arquitectura de capas</title><link>https://takao.blog/es/web/css-layer-architecture/</link><pubDate>Tue, 11 Jun 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-layer-architecture/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-layer-architecture-es.png" alt="Featured image of post CSS @layer: Gestión de la cascada con arquitectura de capas" /&gt;&lt;p&gt;&lt;code&gt;@layer&lt;/code&gt; da control explícito sobre el orden de la cascada, independientemente de la especificidad o el orden de las fuentes.&lt;/p&gt;
&lt;h2 id="el-problema-de-la-cascada-antes-de-layer"&gt;El problema de la cascada antes de @layer
&lt;/h2&gt;&lt;p&gt;Antes, la gestión de la cascada se basaba en convenciones (BEM, SMACSS, ITCSS) que no eran aplicadas por el navegador.&lt;/p&gt;
&lt;h2 id="cómo-funciona-layer"&gt;Cómo funciona @layer
&lt;/h2&gt;&lt;p&gt;Agrupa estilos en capas con nombre y define su precedencia. Las capas posteriores sobrescriben a las anteriores, sin importar la especificidad.&lt;/p&gt;</description></item><item><title>Propiedades personalizadas CSS: Patrones estratégicos para estilos escalables</title><link>https://takao.blog/es/web/css-custom-properties/</link><pubDate>Tue, 09 Apr 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-custom-properties/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-custom-properties-es.png" alt="Featured image of post Propiedades personalizadas CSS: Patrones estratégicos para estilos escalables" /&gt;&lt;p&gt;CSS Custom Properties (variables CSS) han cambiado fundamentalmente cómo escribimos y mantenemos hojas de estilo. A diferencia de las variables de preprocesadores, son dinámicas, participan en la cascada y la herencia.&lt;/p&gt;
&lt;h2 id="gestión-de-design-tokens"&gt;Gestión de design tokens
&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;root&lt;/span&gt; { --color-primary-500: &lt;span style="color:#ae81ff"&gt;#3b82f6&lt;/span&gt;; --space-md: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;rem&lt;/span&gt;; --font-sans: &lt;span style="color:#e6db74"&gt;&amp;#34;Inter&amp;#34;&lt;/span&gt;, system-ui, &lt;span style="color:#66d9ef"&gt;sans-serif&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Usa nomenclatura BEM-inspirada: &lt;code&gt;--bloque__elemento--modificador&lt;/code&gt; para tokens de componente y &lt;code&gt;--categoria-propiedad-variante&lt;/code&gt; para globales.&lt;/p&gt;
&lt;h2 id="cambio-de-tema"&gt;Cambio de tema
&lt;/h2&gt;&lt;p&gt;Define tema claro en &lt;code&gt;:root&lt;/code&gt; y sobreescribe en &lt;code&gt;[data-theme=&amp;quot;dark&amp;quot;]&lt;/code&gt;. Añade &lt;code&gt;prefers-color-scheme&lt;/code&gt; para respetar la preferencia del sistema.&lt;/p&gt;</description></item><item><title>Patrones avanzados de CSS Grid: Layouts complejos simplificados</title><link>https://takao.blog/es/web/css-grid-advanced/</link><pubDate>Fri, 15 Dec 2023 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-grid-advanced/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-grid-advanced-es.png" alt="Featured image of post Patrones avanzados de CSS Grid: Layouts complejos simplificados" /&gt;&lt;p&gt;CSS Grid ha transformado el diseño de layouts web. Más allá de &lt;code&gt;grid-template-columns: 1fr 1fr 1fr&lt;/code&gt; hay un potente conjunto de características.&lt;/p&gt;
&lt;h2 id="named-grid-areas"&gt;Named Grid Areas
&lt;/h2&gt;&lt;p&gt;Define layouts que se leen como un wireframe directamente en CSS. El reordenamiento responsivo es trivial cambiando &lt;code&gt;grid-template-areas&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="auto-fill-vs-auto-fit"&gt;Auto-Fill vs Auto-Fit
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;auto-fill&lt;/code&gt; preserva tracks vacíos como espacio; &lt;code&gt;auto-fit&lt;/code&gt; los colapsa a cero. Usa &lt;code&gt;auto-fill&lt;/code&gt; para columnas predecibles y &lt;code&gt;auto-fit&lt;/code&gt; para layouts fluidos.&lt;/p&gt;
&lt;h2 id="dense-packing"&gt;Dense Packing
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;grid-auto-flow: dense&lt;/code&gt; rellena huecos moviendo elementos a filas anteriores. Cuidado con el orden de lectura para accesibilidad.&lt;/p&gt;</description></item></channel></rss>