Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

219
Vistas
Encabezado fijo con Javascript: problemas con el cambio de tamaño

Estoy tratando de hacer un encabezado fijo. Agrego un valor superior de relleno al cuerpo igual a la altura del encabezado para evitar saltos (debido a que se pasa de la posición relativa a la fija). Pero dado que la altura del encabezado cambia después del punto de interrupción 992 debido al ícono de hamburguesa, necesito actualizar este valor de relleno en consecuencia. Pero no pude lograr hacerlo. No estoy seguro de dónde y cómo debo agregar el detector de eventos de cambio de tamaño. Tenga en cuenta que la altura del encabezado fijo también es diferente, pero no debería afectar este valor superior del relleno del cuerpo. Este es mi código hasta ahora: https://codepen.io/penplaycode/pen/YzEWJGB

Para comprender el problema, en el ejemplo de codepen, primero verifique la vista del escritorio, desplácese un poco hacia abajo, notará que el encabezado se fija en la parte superior después de desplazarse 100 px, sin saltos, todo funciona bien. Pero si cambia el tamaño de la ventana hasta que vea el ícono de la hamburguesa y luego se desplaza 100 px para habilitar el encabezado fijo, verá un ligero salto en el contenido. Debido a que la altura del encabezado se calcula de acuerdo con la vista del escritorio, por lo tanto, el valor de relleno del cuerpo que se agrega es este valor, pero lo necesito para volver a calcular la altura del encabezado después de cambiar el tamaño y aplicar este nuevo valor al cuerpo como parte superior del relleno.

 var navbar = document.querySelector(".navbar"); var navbarClass = navbar.classList; var navbarH = navbar.offsetHeight; var scrollOffset = 500; function setPadding(e) { if (e.currentTarget.pageYOffset > scrollOffset) { document.body.style.paddingTop = navbarH + "px"; } else { document.body.style.paddingTop = ""; } } window.addEventListener("scroll", (e) => { if ( navbarClass.contains("transparent") && navbarClass.contains("navbar-light") ) { if (e.currentTarget.pageYOffset > scrollOffset) { navbar.classList.add("fixed"); } else { navbar.classList.remove("fixed"); } if (!navbarClass.contains("position-absolute")) { setPadding(e); } } else { if (e.currentTarget.pageYOffset > scrollOffset) { navbar.classList.add("fixed"); } else { navbar.classList.remove("fixed"); } setPadding(e); } });
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede usar este código para encabezados fijos simples.
Este código es muy fácil de entender.

 window.onscroll = function () { myFunction() }; var header = document.getElementById("header"); function myFunction() { if (window.pageYOffset >= 30) { header.classList.add("sticky") } else { header.classList.remove("sticky"); } }
 *{ margin:0; padding:0; } body{ height:1500px; width:800px; background:Black; } header{ position: fixed; width: 100%; padding: 20px 100px; z-index: 1000; display: flex; justify-content: space-between; align-items: center; transition: 0.75s; } header .logo{ color: rgb(255, 255, 255); font-weight: 700; font-size: 2.5rem; text-decoration: none; } header .nav{ position: relative; display: flex; } header .nav li{ list-style: none; margin-left: 50px; height:100%; } header .nav li a{ text-decoration: none; color: #fff; font-weight: 300; font-size: 1.5rem; } header.sticky{ background: rgba(255,255,255,0.85); padding-top:0px; padding-bottom:0px; box-shadow: 0 5px 20px rgba(0,0,0,0,0.5); height:3.75rem; } header.sticky .logo{ color: rgb(0, 0, 0); } header.sticky ul{ height:100%; } header.sticky ul li{ height:100%; display:flex; align-items: center; } header.sticky ul li a{ color:rgb(204, 34, 34); } header.sticky .nav li:hover{ border-bottom: 5px solid #ff0157; } @media only screen and (max-width:600px){ body{ width:600px; } }
 <header id="header"> <a href="#ban" class="logo">Avenger</a> <ul class="nav"> <li><a href="#ban">Home</a></li> <li><a href="#about">About</a></li> <li><a href="#menu">Menu</a></li> <li><a href="#expert">Expert</a></li> <li><a href="#contact">contact</a></li> </ul> </header>

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda