Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

115
Visualizações
Cree una barra lateral izquierda que envíe contenido sin bibliotecas CSS o JS

Estoy tratando de crear una barra lateral izquierda que alterna el estado (mostrar/ocultar)

estados

  1. Oculto: la barra lateral está oculta. El contenido llena el ancho de la página.
  2. Mostrando: la barra lateral empuja el contenido hacia la derecha.
  3. Se muestra: la barra lateral tiene un ancho x y el contenido tiene un ancho calc(100vw - x)
  4. Ocultar: el contenido empuja la barra lateral hacia la izquierda

Esto es lo que he hecho, pero esa transición parece un poco fuera de lugar y parece que margin-left no es el camino a seguir con la transición.

 document.addEventListener('DOMContentLoaded', function () { const WIDTH = '250px'; let opened = false; const button = document.querySelector('#toggleSidebar'); const sidebar = document.querySelector('.sidebar__container .sidebar'); const sidebarContent = document .querySelector('.sidebar__container .sidebar__content'); button.addEventListener('click', function () { opened = !opened; if (opened) { sidebar.style.width = WIDTH; sidebarContent.style.marginLeft = WIDTH; sidebar.classList.add('sidebar--open'); } else { sidebar.style.width = '0px'; sidebarContent.style.marginLeft = '0px'; sidebar.classList.remove('sidebar--open'); } }); });
 .sidebar__container { display: flex; height: 150px; position: relative; } .sidebar__container .sidebar { position: absolute; left: -100px; height: 100%; background: lightblue; transition: 0.6s; } .sidebar__container .sidebar--open { transition: 0.6s; left: 0; } .sidebar__container .sidebar__content { background-color: lightcoral; flex: 1; transition: 0.6s; }
 <button id="toggleSidebar">Toggle</button> <div class="sidebar__container"> <aside class="sidebar"> Side Bar Menu </aside> <section class="sidebar__content"> Main Content </section> </div>

Cualquier sugerencia sobre cómo hacerlo será útil.

PD: no puedo establecer el ancho en CSS porque estoy tratando de convertirlo en un componente compartible

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Jugó un poco, y esto parece más suave (Chrome):

 document.addEventListener('DOMContentLoaded', function () { const WIDTH = '250px'; let opened = false; const button = document.querySelector('#toggleSidebar'); const sidebar = document.querySelector('.sidebar__container .sidebar'); button.addEventListener('click', function () { opened = !opened; sidebar.style.flexBasis = opened ? WIDTH : '0px'; }); });
 .sidebar__container { display: flex; height: 150px; position: relative; } .sidebar__container .sidebar { flex: 0; height: 100%; background: lightblue; overflow:hidden; transition: 0.6s; } .sidebar__container .sidebar__content { background-color: lightcoral; flex: 1; transition: 0.6s; }
 <button id="toggleSidebar">Toggle</button> <div class="sidebar__container"> <aside class="sidebar"> Side Bar Menu </aside> <section class="sidebar__content"> Main Content </section> </div>

La clave es usar flex-basis en lugar de left / margin-left , ya que su container ya es flex .

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda