Preguntas para entrevista de Desarrollador Frontend Junior: Fundamentos de HTML, CSS y JavaScript

Milad Bonakdar
Autor
Domina los fundamentos esenciales con 32 preguntas clave para entrevistas que abarcan HTML, CSS y JavaScript. Preparación perfecta para entrevistas de desarrollador frontend junior en 2024-2025.
Introducción
Esta guía exhaustiva contiene 32 preguntas de entrevista cuidadosamente seleccionadas que cubren los fundamentos básicos del desarrollo frontend: HTML, CSS y JavaScript. Estas son las preguntas que los desarrolladores frontend junior realmente encuentran en las entrevistas de 2024-2025. Cada pregunta incluye una respuesta detallada, una evaluación de rareza y una calificación de dificultad basada en el análisis de cientos de entrevistas reales de las principales empresas tecnológicas y startups.
Esta es la Parte 1 de nuestra guía completa de entrevistas. Para preguntas sobre React, herramientas de construcción, optimización del rendimiento, depuración, accesibilidad, pruebas y habilidades blandas, consulta la Parte 2: React, Herramientas y Temas Avanzados.
Fundamentos de HTML (7 preguntas)
1. ¿Qué son los elementos HTML semánticos y por qué son importantes?
Respuesta: Los elementos HTML semánticos describen claramente su significado y propósito tanto para los navegadores como para los desarrolladores. Algunos ejemplos son <header>, <nav>, <main>, <article>, <section>, <aside> y <footer>. Son importantes porque mejoran la accesibilidad para los lectores de pantalla y las tecnologías de asistencia, mejoran el SEO al ayudar a los motores de búsqueda a comprender la estructura del contenido y hacen que el código sea más mantenible y legible. A diferencia de los elementos genéricos <div> y <span>, que no proporcionan contexto, los elementos semánticos comunican el rol y el significado del contenido.
Rareza: Común Dificultad: Fácil
2. Explica la diferencia entre elementos inline, block e inline-block
Respuesta:
- Los elementos block comienzan en una nueva línea y ocupan todo el ancho disponible (por ejemplo,
<div>,<p>,<h1>). Puedes establecer propiedades de ancho y alto. - Los elementos inline permanecen en la misma línea y solo ocupan el ancho necesario (por ejemplo,
<span>,<a>,<strong>). No puedes establecer ancho ni alto. - Los elementos inline-block permanecen en línea pero te permiten establecer ancho y alto como los elementos block. Esto combina el flujo de inline con las capacidades de dimensionamiento de block.
Rareza: Común Dificultad: Fácil
3. ¿Qué son los elementos void (autocierre) en HTML?
Respuesta: Los elementos void son elementos HTML que no tienen etiquetas de cierre y no pueden contener contenido. Algunos ejemplos comunes son: <img>, <br>, <hr>, <input>, <meta>, <link>, <area>, <base>, <col>, <embed> y <source>. Estos elementos se completan solo con su etiqueta de apertura y sus atributos. Por ejemplo, <img src="photo.jpg" alt="description"> no necesita una etiqueta de cierre </img>.
Rareza: Común Dificultad: Fácil
4. ¿Cómo haces que un sitio web sea accesible? ¿Qué atributos HTML mejoran la accesibilidad?
Respuesta: Para hacer que los sitios web sean accesibles:
- Utiliza elementos HTML semánticos (
<nav>,<main>,<header>,<footer>) - Proporciona atributos
altpara todas las imágenes que describan su contenido - Mantén una jerarquía de encabezados adecuada (H1-H6) sin saltar niveles
- Etiqueta las entradas de formulario con elementos
<label>utilizando el atributofor - Asegura la accesibilidad del teclado con un orden de tabulación adecuado
- Utiliza atributos ARIA cuando el HTML semántico no sea suficiente:
aria-label,aria-describedby,aria-hidden,aria-live - Agrega atributos
rolepara widgets complejos - Asegura un contraste de color suficiente (4.5:1 para texto normal)
- Haz que los elementos interactivos sean enfocables y proporciona indicadores de enfoque visibles
Rareza: Común Dificultad: Media
5. Explica la diferencia entre los métodos GET y POST en los formularios
Respuesta:
- GET: Agrega los datos del formulario a la URL como parámetros de consulta, haciendo que los datos sean visibles en el navegador. Tiene limitaciones de longitud (~2000 caracteres), se puede almacenar en caché y marcar, es inseguro para datos confidenciales. Se utiliza para recuperar datos donde la solicitud no modifica el estado del servidor (búsquedas, filtros).
- POST: Envía los datos en el cuerpo de la solicitud, no visible en la URL. No hay restricciones de longitud, no se puede almacenar en caché de forma predeterminada, es más seguro para la información confidencial. Se utiliza para enviar datos que modifican el estado del servidor (formularios de inicio de sesión, cargas de archivos, creación de registros).
Ejemplo: Los formularios de búsqueda suelen utilizar GET para que los resultados puedan marcarse, mientras que los formularios de inicio de sesión utilizan POST para ocultar las credenciales.
Rareza: Común Dificultad: Fácil-Media
6. ¿Cuál es el propósito de la etiqueta <meta>?
Respuesta: La etiqueta <meta> proporciona metadatos sobre el documento HTML que no se muestran en la página, pero que son utilizados por los navegadores, los motores de búsqueda y otros servicios web. Los usos comunes incluyen:
- Codificación de caracteres:
<meta charset="UTF-8"> - Configuración de la ventana gráfica para el diseño responsivo:
<meta name="viewport" content="width=device-width, initial-scale=1.0"> - Descripciones de SEO:
<meta name="description" content="Descripción de la página"> - Información del autor:
<meta name="author" content="Nombre"> - Palabras clave (menos relevantes ahora):
<meta name="keywords" content="palabra clave 1, palabra clave 2">
Rareza: Común Dificultad: Fácil
7. ¿Cuál es la diferencia entre <script>, <script async> y <script defer>?
Respuesta:
<script>regular: Bloquea el análisis de HTML mientras la secuencia de comandos se descarga y se ejecuta. La representación de la página se detiene hasta que se completa la secuencia de comandos.<script async>: Descarga la secuencia de comandos en paralelo con el análisis de HTML, pero se ejecuta inmediatamente cuando está lista (lo que podría bloquear el análisis). El orden de ejecución no está garantizado. Es bueno para secuencias de comandos independientes como el análisis.<script defer>: Se descarga en paralelo, pero se ejecuta solo después de que se completa el análisis de HTML, manteniendo el orden de la secuencia de comandos. Es mejor para secuencias de comandos que dependen del DOM u otras secuencias de comandos.
Mejor práctica: Coloca <script defer> en el <head> para un rendimiento óptimo y, al mismo tiempo, asegurar un orden de ejecución adecuado.
Rareza: Poco común Dificultad: Media
Fundamentos de CSS (10 preguntas)
8. Explica el Modelo de Caja CSS
Respuesta: El Modelo de Caja CSS describe cómo se representan los elementos con cuatro componentes (de adentro hacia afuera):
- Contenido: El contenido real (texto, imágenes)
- Padding: Espacio entre el contenido y el borde (interior)
- Border: El borde que rodea el padding
- Margin: Espacio fuera del borde (entre elementos)
La propiedad box-sizing afecta los cálculos:
box-sizing: content-box(predeterminado): El ancho/alto se aplica solo al contenido; se agregan padding y borderbox-sizing: border-box: El ancho/alto incluye contenido + padding + border (más intuitivo)
Ejemplo: Con box-sizing: border-box, un elemento con width: 100px; padding: 10px; border: 2px; permanece exactamente 100px de ancho.
Rareza: Común Dificultad: Fácil-Media
9. Explica la especificidad de CSS y cómo funciona
Respuesta: La especificidad de CSS determina qué estilos se aplican cuando varias reglas apuntan al mismo elemento. La especificidad se calcula contando los selectores:
- Estilos en línea: 1000 puntos
- IDs: 100 puntos cada uno
- Clases, atributos, pseudo-clases: 10 puntos cada uno
- Elementos, pseudo-elementos: 1 punto cada uno
Ejemplos:
#nav .button= 110 (1 ID + 1 clase).header .nav a= 21 (2 clases + 1 elemento)div p= 2 (2 elementos)
Cuando la especificidad es igual, la última regla gana (cascada). !important anula todo, pero debe evitarse. Mejor práctica: Utiliza clases para el estilo, evita los IDs y !important.
Rareza: Común Dificultad: Media
10. ¿Qué es Flexbox y cuándo lo usarías?
Respuesta: Flexbox es un sistema de diseño unidimensional para organizar elementos a lo largo de un solo eje (fila o columna).
Propiedades del padre (contenedor flexible):
display: flex- habilita flexboxflex-direction- row, column, row-reverse, column-reversejustify-content- alineación a lo largo del eje principal (center, space-between, space-around)align-items- alineación a lo largo del eje transversal (center, flex-start, flex-end, stretch)flex-wrap- controla el ajuste (nowrap, wrap)
Propiedades del hijo (elemento flexible):
flex-grow- cuánto crece el elemento en relación con los demásflex-shrink- cuánto se reduce el elementoflex-basis- tamaño inicial antes de crecer/reduciralign-self- anula align-items para un elemento individual
Usa Flexbox para: Barras de navegación, diseños de tarjetas, centrado de elementos, distribución uniforme del espacio, alineación de elementos dentro de los contenedores.
Rareza: Común Dificultad: Media
11. ¿Qué es CSS Grid y en qué se diferencia de Flexbox?
Respuesta: CSS Grid es un sistema de diseño bidimensional para crear diseños complejos con filas Y columnas simultáneamente.
Diferencias clave:
- Grid: Bidimensional (filas + columnas), mejor para diseños de página
- Flexbox: Unidimensional (eje único), mejor para componentes
Propiedades de Grid:
Cuándo usar:
- Grid: Diseños generales de página, diseños de estilo revista, estructuras de cuadrícula complejas
- Flexbox: Barras de navegación, tarjetas, componentes dentro de las celdas de la cuadrícula
- Ambos juntos: Grid para el diseño macro, Flexbox para el diseño micro
Rareza: Común Dificultad: Media
12. ¿Cómo centras un div horizontal y verticalmente?
Respuesta:
Enfoques modernos (preferidos):
Enfoques heredados:
Flexbox y Grid son ahora las soluciones estándar, ya que son más limpias y flexibles.
Rareza: Común Dificultad: Fácil-Media
13. Explica el posicionamiento CSS: static, relative, absolute, fixed y sticky
Respuesta:
- Static (predeterminado): Flujo de documento normal, sin posicionamiento especial
- Relative: Posicionado en relación con su posición normal usando top/right/bottom/left. El espacio original en el flujo del documento se conserva. A menudo se utiliza como contexto de posicionamiento para hijos absolutos.
- Absolute: Eliminado del flujo, posicionado en relación con el ancestro posicionado más cercano (o la ventana gráfica si no hay ninguno). No afecta a otros elementos.
- Fixed: Eliminado del flujo, posicionado en relación con la ventana gráfica. Permanece en su lugar al desplazarse.
- Sticky: Híbrido de relative y fixed. Actúa relative hasta el umbral de desplazamiento, luego se vuelve fixed. Útil para encabezados sticky que comienzan en el flujo.
Ejemplo: La navegación que se vuelve fixed después de desplazarse utiliza position: sticky; top: 0;
Rareza: Común Dificultad: Media
14. ¿Cuál es la diferencia entre display: none, visibility: hidden y opacity: 0?
Respuesta:
display: none: El elemento se elimina por completo del flujo del documento, no ocupa espacio, no es accesible para los lectores de pantalla, no hay eventos de punterovisibility: hidden: El elemento es invisible pero mantiene el espacio en el diseño, todavía está en el DOM, no es accesible para los lectores de pantalla, no hay eventos de punteroopacity: 0: El elemento es invisible pero mantiene el espacio, todavía está en el DOM, TODAVÍA es accesible para los lectores de pantalla, TODAVÍA recibe eventos de puntero
Casos de uso:
display: none- alternar la visibilidad (modales, menús desplegables)visibility: hidden- mantener el diseño mientras se ocultaopacity: 0- animaciones de fundido, mantener el elemento interactivo
Rareza: Común Dificultad: Fácil-Media
15. ¿Qué son las pseudo-clases y los pseudo-elementos de CSS? Proporciona ejemplos.
Respuesta:
Pseudo-clases (un solo colon) - Selecciona elementos según el estado o la posición:
Otros ejemplos: :active, :checked, :first-child, :last-child, :nth-of-type()
Pseudo-elementos (doble colon) - Estiliza partes específicas o inserta contenido:
Los pseudo-elementos son excelentes para elementos decorativos sin agregar HTML.
Rareza: Común Dificultad: Media
16. ¿Cómo creas diseños responsivos? Explica las media queries.
Respuesta: Los diseños responsivos se adaptan a diferentes tamaños de pantalla utilizando:
Media Queries:
Puntos de interrupción comunes:
- 320px: Móvil pequeño
- 768px: Tableta
- 1024px: Escritorio
- 1440px: Escritorio grande
Otras técnicas responsivas:
- Diseños fluidos (porcentajes, unidades
vw/vh) - Flexbox y Grid flexibles
- Imágenes responsivas (
max-width: 100%, atributosrcset) - Consultas
min-width(mobile-first) vsmax-width(desktop-first)
Rareza: Común Dificultad: Media
17. ¿Qué es z-index y cómo funciona?
Respuesta: z-index controla el orden de apilamiento de los elementos posicionados (relative, absolute, fixed, sticky) a lo largo del eje z (de adelante hacia atrás).
Puntos clave:
- Solo funciona en elementos posicionados (no static)
- Los valores más altos aparecen al frente
- Puede usar valores negativos
- El valor predeterminado es
auto(efectivamente 0) - Crea un "contexto de apilamiento" que afecta la forma en que se apilan los hijos
Error común:
El hijo con z-index 9999 no puede aparecer por encima de otro elemento con z-index 2 que esté fuera del contexto de apilamiento del padre.
Rareza: Común Dificultad: Media
Fundamentos de JavaScript (15 preguntas)
18. Explica la diferencia entre var, let y const
Respuesta:
var: Ámbito de función, elevado e inicializado conundefined, se puede volver a declarar, en gran parte obsoleto en el código modernolet: Ámbito de bloque, elevado pero en la Zona Muerta Temporal (TDZ) hasta la declaración, no se puede volver a declarar en el mismo ámbitoconst: Ámbito de bloque, elevado pero en la TDZ, debe inicializarse en la declaración, no se puede reasignar (pero el contenido de objetos/matrices puede mutarse)
Mejores prácticas:
- Usa
constde forma predeterminada - Usa
letcuando necesites reasignar - Nunca uses
varen JavaScript moderno
Ejemplo:
Rareza: Común Dificultad: Fácil
19. ¿Qué son los closures y proporciona un ejemplo práctico?
Respuesta: Un closure es cuando una función interna tiene acceso a las variables del ámbito de su función externa (circundante), incluso después de que la función externa haya regresado. La función interna "se cierra sobre" estas variables.
Ejemplo:
La función interna mantiene el acceso a count aunque createCounter haya terminado de ejecutarse. Esto permite la privacidad de los datos: count no se puede acceder directamente desde fuera.
Casos de uso: Privacidad de datos, fábricas de funciones, callbacks, patrones de módulos, controladores de eventos
Rareza: Común Dificultad: Media
20. Explica == vs === en JavaScript
Respuesta:
==(igualdad flexible): Realiza la coerción de tipo antes de la comparación, convierte los tipos para que coincidan===(igualdad estricta): Comprueba tanto el valor COMO el tipo, sin coerción de tipo
Ejemplos:
Mejor práctica: Utiliza siempre === y !== para evitar errores inesperados de la coerción de tipo.
Rareza: Común Dificultad: Fácil
21. ¿Qué es el hoisting en JavaScript?
Respuesta: El hoisting es el comportamiento de JavaScript de mover las declaraciones de variables y funciones a la parte superior de su ámbito durante la fase de compilación, antes de la ejecución del código.
Diferentes comportamientos de hoisting:
Puntos clave:
- Las declaraciones
varse elevan e inicializan conundefined let/constse elevan pero permanecen sin inicializar (Zona Muerta Temporal)- Las declaraciones de funciones se elevan por completo (incluida la implementación)
- Las expresiones de función no se elevan por completo
Rareza: Común Dificultad: Media
22. Explica la palabra clave this y cómo difiere en las funciones de flecha
Respuesta: this se refiere al contexto en el que se ejecuta una función. Su valor depende de CÓMO se llama a la función.
Funciones regulares:
Funciones de flecha:
Diferencias clave:
- Funciones regulares:
thisdeterminado por el sitio de llamada - Funciones de flecha:
thisheredado léxicamente del ámbito circundante - Las funciones de flecha no tienen su propio
this,argumentsosuper
Caso de uso: Las funciones de flecha son excelentes para callbacks donde deseas preservar el this externo:
Rareza: Común Dificultad: Media-Difícil
23. ¿Qué son los template literals y cuáles son sus beneficios?
Respuesta: Los template literals son literales de cadena que utilizan comillas inversas (`) que admiten la interpolación de cadenas y las cadenas multilínea.
Características:
Beneficios:
- Sintaxis más limpia que la concatenación de cadenas
- No es necesario
\npara los saltos de línea - Puede insertar cualquier expresión de JavaScript con
${} - Mejor para la generación de HTML/CSS
Rareza: Común Dificultad: Fácil
24. Explica las Promesas y sus tres estados
Respuesta: Una Promesa representa la eventual finalización (o fallo) de una operación asíncrona y su valor resultante.
Tres estados:
- Pending: Estado inicial, operación no completa
- Fulfilled: Operación completada con éxito
- Rejected: Operación fallida
Ejemplo:
Beneficios sobre los callbacks:
- Evita el infierno de los callbacks
- Encadenable con
.then() - Mejor manejo de errores con
.catch() - Puede usar Promise.all() para operaciones paralelas
Rareza: Común Dificultad: Media
25. ¿Qué es async/await y cómo mejora la legibilidad del código?
Respuesta: async/await es azúcar sintáctico construido sobre Promesas que hace que el código asíncrono se vea y se comporte más como código síncrono.
Ejemplo:
Puntos clave:
- La función
asyncsiempre devuelve una Promesa awaitpausa la ejecución hasta que la Promesa se resuelva- Usa
try/catchpara el manejo de errores - Hace que las operaciones secuenciales sean más claras
- Manejo de errores más natural que
.catch()
Rareza: Común Dificultad: Media
26. Explica el Event Loop y cómo JavaScript maneja las operaciones asíncronas
Respuesta: JavaScript es de un solo hilo, pero maneja las operaciones asíncronas a través del mecanismo del Event Loop.
Componentes:
- Call Stack: Ejecuta código síncrono (LIFO)
- Web APIs: Maneja operaciones asíncronas (setTimeout, fetch, eventos DOM)
- Callback Queue (Task Queue): Contiene callbacks de Web APIs
- Microtask Queue: Contiene callbacks de Promesas (mayor prioridad)
- Event Loop: Mueve tareas de las colas a la pila de llamadas cuando la pila está vacía
Orden de ejecución:
Orden de ejecución: Call Stack → Microtask Queue → Callback Queue (Macrotasks)
Rareza: Común Dificultad: Difícil
27. ¿Cómo seleccionas y manipulas elementos DOM?
Respuesta:
Métodos de selección:
Manipulación:
Rareza: Común Dificultad: Fácil
28. Explica la delegación de eventos y por qué es útil
Respuesta: La delegación de eventos es adjuntar un solo listener de eventos a un elemento padre en lugar de múltiples listeners a elementos hijos, aprovechando el event bubbling.
Sin delegación (ineficiente):
Con delegación (eficiente):
Beneficios:
- Mejor rendimiento: Un solo listener vs muchos
- Funciona con elementos dinámicos: Maneja automáticamente los elementos agregados más tarde
- Menor uso de memoria: Menos listeners de eventos
- Código más limpio: Manejo de eventos centralizado
Caso de uso: Listas donde los elementos se pueden agregar/eliminar dinámicamente (listas de tareas, carritos de compra, secciones de comentarios)
Rareza: Común Dificultad: Media
29. ¿Qué es event bubbling? ¿Cómo detienes la propagación?
Respuesta: Event bubbling es cuando un evento activado en un elemento hijo "asciende" a través de sus ancestros hasta la raíz del documento.
Tres fases:
- Capturing Phase: El evento viaja desde la ventana hasta el objetivo
- Target Phase: El evento llega al elemento objetivo
- Bubbling Phase: El evento asciende desde el objetivo hasta la ventana (predeterminado)
Ejemplo:
Detener la propagación:
Rareza: Común Dificultad: Media
30. Explica la desestructuración para objetos y matrices
Respuesta: La desestructuración extrae valores de matrices o propiedades de objetos en variables distintas.
Desestructuración de matrices:
Desestructuración de objetos:
Parámetros de función:
Rareza: Común Dificultad: Fácil-Media
31. Explica el operador spread y los parámetros rest
Respuesta:
Operador spread (...) - Expande iterables:
Parámetros rest (...) - Recopila múltiples elementos:


