<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bufa</title>
	<atom:link href="https://bufa.es/feed/" rel="self" type="application/rss+xml" />
	<link>https://bufa.es</link>
	<description>Snippets para Desarrollo web</description>
	<lastBuildDate>Sat, 26 Mar 2022 16:54:28 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.2</generator>
	<item>
		<title>CSS: rgba() en variables SASS + custom properties</title>
		<link>https://bufa.es/css-rgba-en-variables-sass-custom-properties/</link>
		
		<dc:creator><![CDATA[Jorge Maiden]]></dc:creator>
		<pubDate>Tue, 29 Mar 2022 18:46:58 +0000</pubDate>
				<category><![CDATA[SASS]]></category>
		<guid isPermaLink="false">http://bufa.es/?p=6922</guid>

					<description><![CDATA[Para poder usar rgba() junto a variables sass y custom properties hay que transformar el valor del color a rgb, no es válido en hexadecimal. A continuación 2 formas de usar variables SASS + custom properties en colores rgba y [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Para poder usar <code>rgba()</code> junto a <strong>variables sass</strong> y <strong>custom properties</strong> hay que transformar el valor del color a rgb, no es válido en hexadecimal.</p>
<p>A continuación 2 formas de usar variables SASS + custom properties en colores rgba y poder hacer uso de la transparencia principalmente.</p>
<h3>A). Usando solo un <strong>mixin</strong>:</h3>
<pre data-enlighter-language="css" class="EnlighterJSRAW">
@function hexToRGB($hex) { 
  @return red($hex), green($hex), blue($hex); 
}

$color-primary: #ff0000;

:root { 
  --color-primary-rgb: #{hexToRGB($color-primary)};
}

h1{
  color: rgba(var(--color-primary-rgb), 0.5);
}
</pre>
<h3>2. Haciendo uso de la <strong>función color</strong> de SASS:</h3>
<pre data-enlighter-language="css" class="EnlighterJSRAW">
@use &quot;sass:color&quot;;

$color-primary: #ff0000;

:root { 
  --color-primary-rgb: #{color.adjust($color-primary, $alpha: -0.5)};
}

h1{
  color: var(--color-primary-rgb);
}
</pre>
<p>Personalmente creo que resulta más cómoda y flexible la opción de usar un mixin.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SASS y custom properties</title>
		<link>https://bufa.es/sass-y-custom-properties/</link>
		
		<dc:creator><![CDATA[Jorge Maiden]]></dc:creator>
		<pubDate>Mon, 28 Mar 2022 15:17:17 +0000</pubDate>
				<category><![CDATA[SASS]]></category>
		<guid isPermaLink="false">http://bufa.es/?p=6918</guid>

					<description><![CDATA[Ejemplos de uso de las custom properties (o tambien conocidas como variables css) de css junto con las variables de SASS. $color-principal: #222; $color-secundario: #f02; :root { --color-uno: #{$color-principal}; --color-dos: #{$color-secundario}; } Para insertar el valor de variable SASS al [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Ejemplos de uso de las <strong>custom properties</strong> (o tambien conocidas como variables css) de css junto con las <strong>variables de SASS</strong>.</p>
<pre data-enlighter-language="css" class="EnlighterJSRAW">
$color-principal: #222;
$color-secundario: #f02;

:root {
  --color-uno: #{$color-principal};
  --color-dos: #{$color-secundario};
}
</pre>
<p>Para insertar el valor de variable SASS al de una custom property hay que usar la expresión <code>#{$nombre-de-variable}</code>.</p>
<p>Al hacer esa interpolación se eliminan las comillas de las cadenas, por lo que si tenemos una variable con algún valor entre comillas (como puede ser en una font-family&#8230;) tendríamos que usar la función <code>meta.inspect()</code> de sass:</p>
<pre data-enlighter-language="css" class="EnlighterJSRAW">
@use &quot;sass:meta&quot;;

$fuente-principal: Arial, &quot;Segoe UI&quot;, Roboto;

:root {
  --fuente-principal: #{meta.inspect($fuente-principal)};
}
</pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Eliminar la «x» de los input search</title>
		<link>https://bufa.es/eliminar-la-x-de-los-input-search/</link>
		
		<dc:creator><![CDATA[Jorge Maiden]]></dc:creator>
		<pubDate>Sat, 26 Mar 2022 15:07:36 +0000</pubDate>
				<category><![CDATA[HTML]]></category>
		<guid isPermaLink="false">http://bufa.es/?p=6916</guid>

					<description><![CDATA[Si usas chrome/safari y tienes algún input type=»search», este monstrará una «x» a la derecha (que tiene el fin de que al pinchar en ella se borre el texto que haya escrito en el input en ese momento)&#8230;. para borrarla [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Si usas chrome/safari y tienes algún input <strong>type=»search»</strong>, este monstrará una «<strong>x</strong>» a la derecha (que tiene el fin de que al pinchar en ella se  borre el texto que haya escrito en el input en ese momento)&#8230;. para borrarla puedes insertar las siguientes líneas de css:</p>
<pre data-enlighter-language="css" class="EnlighterJSRAW">
input[type=&quot;search&quot;]::::-webkit-search-decoration,
input[type=&quot;search&quot;]::::-webkit-search-cancel-button,
input[type=&quot;search&quot;]::::-webkit-search-results-button,
input[type=&quot;search&quot;]::::-webkit-search-results-decoration {
    display: none;
}
</pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>cmder: añadir acceso con botón derecho al menu de Windows</title>
		<link>https://bufa.es/cmder-anadir-acceso-con-boton-derecho-al-menu-de-windows/</link>
		
		<dc:creator><![CDATA[Jorge Maiden]]></dc:creator>
		<pubDate>Mon, 14 Mar 2022 18:31:34 +0000</pubDate>
				<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">http://bufa.es/?p=6888</guid>

					<description><![CDATA[Entremos en la carpeta de instalación de cmder ejecutar el comando: Cmder.exe /register Y a partir de ese momento ya aparecerá el icono de la aplicación de cmder la hacer click con botón derecho en el menu contextual de windows. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Entremos en la carpeta de instalación de <strong>cmder</strong> ejecutar el comando:</p>
<pre data-enlighter-language="powershell" class="EnlighterJSRAW">
Cmder.exe /register
</pre>
<p>Y a partir de ese momento ya aparecerá el icono de la aplicación de <strong>cmder</strong> la hacer <strong>click con botón derecho</strong> en el menu contextual de windows.</p>
<p>Y si quieres quitarlo del menu:</p>
<pre data-enlighter-language="powershell" class="EnlighterJSRAW">
Cmder.exe /unregister
</pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Javascript: Detectar cuando dejas de hacer scroll</title>
		<link>https://bufa.es/javascript-detectar-cuando-dejas-de-hacer-scroll/</link>
		
		<dc:creator><![CDATA[Jorge Maiden]]></dc:creator>
		<pubDate>Sun, 06 Mar 2022 16:52:01 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">http://bufa.es/?p=6898</guid>

					<description><![CDATA[Función javascript para averiguar el momento en el que el usuario dejar de scrollear en la página web, pudiéndole pasar el tiempo de refresco que más nos interese. por defecto 100 milisegundos. function noScroll (callback, refresh = 100) { if [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Función javascript para averiguar el momento en el que el usuario dejar de <strong>scrollear</strong> en la página web, pudiéndole pasar el tiempo de refresco que más nos interese. por defecto 100 milisegundos.</p>
<pre data-enlighter-language="js" class="EnlighterJSRAW">
function noScroll (callback, refresh = 100) {
  if (!callback || typeof callback !== &#039;function&#039;) return;
  let isScrolling;
  window.addEventListener(&#039;scroll&#039;, function (event) {
    window.clearTimeout(isScrolling);
    isScrolling = setTimeout(callback, refresh);
  }, false);
}
</pre>
<p>Ejemplo:</p>
<p class="codepen" data-height="296" data-default-tab="result" data-slug-hash="wvPOEWq" data-user="jorgemaiden" style="height: 296px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/jorgemaiden/pen/wvPOEWq"></p>
<p><script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Vanilla JS: FadeOut()</title>
		<link>https://bufa.es/vanilla-js-fadeout/</link>
		
		<dc:creator><![CDATA[Jorge Maiden]]></dc:creator>
		<pubDate>Fri, 18 Feb 2022 10:54:06 +0000</pubDate>
				<category><![CDATA[Vanilla JS]]></category>
		<guid isPermaLink="false">http://bufa.es/?p=6892</guid>

					<description><![CDATA[Simular el efecto FadeOut de jQuery usando solo Vanilla JS. La siguiente función javascript fadeOut() consta de 2 parámetros: elemento y duración (este ultimo opcional) para controlar el tiempo que quermeos que dure la animación. function fadeOut(element, duration = 600) [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Simular el efecto <strong>FadeOut</strong> de jQuery usando solo Vanilla JS. La siguiente función javascript fadeOut() consta de 2 parámetros: elemento y duración (este ultimo opcional) para controlar el tiempo que quermeos que dure la animación.</p>
<pre data-enlighter-language="js" class="EnlighterJSRAW">
function fadeOut(element, duration = 600) {
  element.style.display = &#039;&#039;;
  element.style.opacity = 1;
  var last = +new Date();
  var tick = function() {
    element.style.opacity = Number(+element.style.opacity - (new Date() - last) / duration).toFixed(4);
    last = +new Date();
    if (-element.style.opacity &lt;= 0) {
      (window.requestAnimationFrame &amp;&amp; requestAnimationFrame(tick)) || setTimeout(tick, 16);
    }
  };
  tick();
}
</pre>
<p>Demo:</p>
<p class="codepen" data-height="392" data-default-tab="result" data-slug-hash="bGYLweM" data-user="jorgemaiden" style="height: 392px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
<p><script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script></p>
<p>Y para el efecto contrario puedes ver: <a href="https://bufa.es/vanilla-js-fadein/">https://bufa.es/vanilla-js-fadein/</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Composer: actualizar versión en Windows</title>
		<link>https://bufa.es/composer-actualizar-version-en-windows/</link>
		
		<dc:creator><![CDATA[Jorge Maiden]]></dc:creator>
		<pubDate>Wed, 26 Jan 2022 15:38:27 +0000</pubDate>
				<category><![CDATA[Composer]]></category>
		<guid isPermaLink="false">http://bufa.es/?p=6869</guid>

					<description><![CDATA[Para actualizar composer a la última versión en Windows, puedes usar el siguiente comando: composer self-update]]></description>
										<content:encoded><![CDATA[<p>Para actualizar <strong>composer</strong> a la última versión en Windows, puedes usar el siguiente comando:</p>
<pre data-enlighter-language="powershell" class="EnlighterJSRAW">
composer self-update
</pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CSS: tema claro/oscuro en función de la configuración del usuario en su sistema operativo</title>
		<link>https://bufa.es/css-tema-claro-oscuro-en-funcion-de-la-configuracion-del-usuario-en-su-sistema-operativo/</link>
		
		<dc:creator><![CDATA[Jorge Maiden]]></dc:creator>
		<pubDate>Wed, 12 Jan 2022 18:21:22 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<guid isPermaLink="false">http://bufa.es/?p=6864</guid>

					<description><![CDATA[Para cargar los estilos light/dark automaticamwnte en función de la congifuración que tenga el usuario en su sistema operativo podemos hacer uso de la propiedad media prefers-color-scheme: A. Por medio de link en el head del documento cargando los archivos [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Para cargar los estilos light/dark automaticamwnte en función de la congifuración que tenga el usuario en su sistema operativo podemos hacer uso de la propiedad <strong>media</strong> <code>prefers-color-scheme</code>:</p>
<p>A. Por medio de <code>link</code> en el head del documento cargando los archivos de css correspondientes:</p>
<pre data-enlighter-language="html" class="EnlighterJSRAW">
&lt;link rel=&quot;stylesheet&quot; href=&quot;/light-theme.css&quot; media=&quot;(prefers-color-scheme: light)&quot; /&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;/dark-theme.css&quot; media=&quot;(prefers-color-scheme: dark)&quot; /&gt;
</pre>
<p>B. Directamente en el CSS principal:</p>
<pre data-enlighter-language="css" class="EnlighterJSRAW">
@media (prefers-color-scheme: dark) {
  /* estilos para tema oscuro */
}

@media (prefers-color-scheme: light) {
  /* estilos para tema tema claro */
}
</pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CSS: botón redondeado con borde exterior</title>
		<link>https://bufa.es/css-boton-redondeado-con-borde-exterior/</link>
		
		<dc:creator><![CDATA[Jorge Maiden]]></dc:creator>
		<pubDate>Mon, 25 Oct 2021 18:58:35 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<guid isPermaLink="false">http://bufa.es/?p=6850</guid>

					<description><![CDATA[Ahora es muy sencillo conseguir ese diseño de botón o elemento con un borde redondeado externo separado x pixeles. Usando la propiedad outline-offset podemos establecer un espacio entre un contorno outline y el límite del elemento. Antes para conseguir este [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Ahora es muy sencillo conseguir ese diseño de botón o elemento con un borde redondeado externo separado x pixeles. Usando la propiedad <code>outline-offset</code> podemos establecer un espacio entre un contorno <code>outline</code> y el límite del elemento. </p>
<p>Antes para conseguir este aspecto teníamos que recurrir a usar otras propiedades menos naturales como box-shadow, y pseudoelementos.</p>
<p>Con outline:</p>
<pre data-enlighter-language="css" class="EnlighterJSRAW">
outline: 2px solid black;
outline-offset: 3px;
</pre>
<p>Demo:</p>
<p class="codepen" data-height="300" data-default-tab="result" data-slug-hash="bGrWGJr" data-user="jorgemaiden" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
<p><script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>JavaScript: comprobar si un Array esta vacío</title>
		<link>https://bufa.es/javascript-comprobar-si-un-array-esta-vacio/</link>
		
		<dc:creator><![CDATA[Jorge Maiden]]></dc:creator>
		<pubDate>Wed, 13 Oct 2021 17:37:04 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">http://bufa.es/?p=6844</guid>

					<description><![CDATA[Para saber si un array en JavaScript esta vacío podemos hacer la siguiente expresión js: const arrayVacio = (arr) =&#62; !Array.isArray(arr) &#124;&#124; arr.length === 0; // Ejemplos arrayVacio([]); // true arrayVacio([&#039;Raúl&#039;, &#039;Marta&#039;]); // false]]></description>
										<content:encoded><![CDATA[<p>Para saber si un array en JavaScript esta <strong>vacío</strong> podemos hacer la siguiente expresión js:</p>
<pre data-enlighter-language="js" class="EnlighterJSRAW">
const arrayVacio = (arr) =&gt; !Array.isArray(arr) || arr.length === 0;

// Ejemplos
arrayVacio([]); // true
arrayVacio([&#039;Raúl&#039;, &#039;Marta&#039;]); // false
</pre>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
