HTML·CSS·JS puro·Ingeniería ágil

Experiencias rápidas, seguras y elegantes

Front-end con estándares web. Código claro, animaciones fluidas y rendimiento primero.

fr1day@lab:~$ curl -s https://fr1day.es | head -n 5
<!doctype html>
<html lang="es">
  <head>...</head>
  <body>
    <!-- ingeniería que se ve y se siente -->

Diseño

Interfaz, rendimiento y seguridad. Diseño responsable con el usuario y la máquina.

Interfaz

Jerarquía clara y microinteracciones.

Rendimiento

CSS y JS mínimos. Vitals en verde.

Seguridad

CSP, HSTS, HTTPS estricto.

Código de ejemplo

Patrones en HTML, CSS y JS. Ejecuta la demo para verlos en acción.

<!-- Dialog accesible + foco -->
<button id="openDialog" class="btn">Abrir</button>
<dialog id="dlg" aria-labelledby="dlgTitle">
  <h3 id="dlgTitle">Suscripción</h3>
  <form method="dialog">
    <input type="email" required placeholder="email" />
    <menu>
      <button value="cancel">Cancelar</button>
      <button value="ok" class="btn">Guardar</button>
    </menu>
  </form>
</dialog>

<!-- Tabs semánticos -->
<div role="tablist" aria-label="Lenguajes">
  <button role="tab" aria-controls="p-html" aria-selected="true">HTML</button>
  <button role="tab" aria-controls="p-css">CSS</button>
</div>

HTML: estructura semántica

Etiquetas correctas, accesibilidad y SEO técnico. Menos divitis, más significado.

Buenas prácticas

  • Landmarks: <header>, <main>, <nav>, <section>, <article>, <footer>.
  • Un h1 por página. Jerarquía clara.
  • Texto alternativo y aria-* coherente.
  • Formularios con <label for> y validación nativa.

Snippet semántico

<article itemscope itemtype="https://schema.org/Article">
  <h2 itemprop="headline">Guía rápida</h2>
  <p itemprop="description">Resumen.</p>
</article>

CSS: diseño y rendimiento

Arquitectura escalable con variables, layout moderno y animaciones suaves.

Layout

  • Grid para macroestructura. Flex para alineación.
  • Tipografía fluida con clamp().
  • Animar transform y opacity para 60fps.

Snippet de utilidades

:root{--gap:16px}
.stack{display:flex;flex-direction:column;gap:var(--gap)}
.cluster{display:flex;flex-wrap:wrap;gap:var(--gap);align-items:center}

JavaScript: interacción mínima y clara

DOM directo, módulos pequeños y eventos bien delimitados.

Patrones

  • Progressive enhancement: funciona sin JS.
  • Delegación de eventos para listas y grids.
  • Evita dependencias si el navegador ya lo soporta.

Snippet accesible

const q = (s,p=document)=>p.querySelector(s);
const acc = q('#faq-list');
acc.addEventListener('click', e=>{
  const btn = e.target.closest('[data-acc]');
  if(!btn) return;
  const panel = document.getElementById(btn.getAttribute('aria-controls'));
  const open = btn.getAttribute('aria-expanded') === 'true';
  btn.setAttribute('aria-expanded', String(!open));
  panel.hidden = open;
});

Laboratorio

Prototipos y experimentos. Clic en una tarjeta para abrir el proyecto.

Preguntas frecuentes

Detalles técnicos y procesos.

Contacto

¿Proyecto o colaboración? Escríbeme.