Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

WagnerFilho

CSS - Position: Sticky

Recommended Posts

Olá,

Seguindo exatamente o exemplo abaixo, alguém pode me ajudar a trabalhar o position:sticky

Hoje, a próxima data está se posicionando em cima da data atual.

Desta forma, a opacidade e a sombra da data está ficando em 100%, gerando uma visão grotesca, caso haja muitas datas.

Eu quero que a data anterior, suba com o scroll e dê lugar para a próxima data.

Se eu adicionar a data e os diálogos em um container, dá certo, porém, preciso trabalhar com o que tenho abaixo.


Javascript também é aceito para este trabalho

o que tenho até agora jsfiddle

 

<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title></title>
    <meta name="description" content="sticky">
    <meta name="viewport" content="width=device-width">
</head>

<body>
    <div class="chat">
        <div class="data">05/03/2019</div>
        <div class="box recebido">Olá</div>
        <div class="box enviado">Oi, tudo bem ?</div>
        <div class="data">06/03/2019</div>
        <div class="box recebido">Tudo bem!</div>
        <div class="box recebido">e voce ?</div>
        <div class="box enviado">Tudo bem tambem</div>
        <div class="box recebido">preciso de ajuda</div>
        <div class="box recebido">Voce pode me ajudar</div>
        <div class="data">07/03/2019</div>
        <div class="box enviado">Talvez sim</div>
        <div class="box enviado">O que voce precisa</div>
        <div class="box recebido">Como posso utilizar o position:sticky ?</div>
        <div class="box enviado">Deixe-me ver</div>
        <div class="box enviado">Acho que posso te ajudar</div>
        <div class="box recebido">Certo</div>
    </div>
</body>
<style>
    * {
        margin: 0px;
        padding: 0px;
    }
    
    .chat {
        overflow: auto;
        border: solid 1px black;
        position: fixed;
        left: 50%;
        top: 50%;
        background-color: #e5ddd5;
        z-index: 100;
        height: 500px;
        margin-top: -200px;
        width: 500px;
        margin-left: -300px;
    }
    
    .box {
        width: 300px;
        margin: 30px auto;
        padding: 20px;
        text-align: center;
        font-weight: 400;
        color: black;
        font-family: arial;
        position: relative;
        border-radius: 20px;
    }
    
    .box.enviado {
        background: #dcf8c6;
    }
    
    .box.recebido {
        background: white;
    }
    
    .recebido:before {
        content: "";
        width: 0px;
        height: 0px;
        position: absolute;
        border-left: 10px solid white;
        border-right: 10px solid transparent;
        border-top: 10px solid white;
        border-bottom: 10px solid transparent;
        left: 19px;
        bottom: -19px;
    }
    
    .enviado:before {
        content: "";
        width: 0px;
        height: 0px;
        position: absolute;
        border-left: 10px solid transparent;
        border-right: 10px solid #dcf8c6;
        border-top: 10px solid #dcf8c6;
        border-bottom: 10px solid transparent;
        right: 19px;
        bottom: -19px;
    }
    
    .data {
        background-color: rgba(225, 245, 254, 0.92);
        color: rgba(69, 90, 100, 0.95)!important;
        padding: 5px 12px 6px 12px!important;
        border-radius: 7.5px!important;
        box-shadow: 0 1px 0.5px rgba(0, 0, 0, 0.13)!important;
        text-shadow: 0 1px 0 rgba(255, 255, 255, 0.4)!important;
        margin-bottom: 8px!important;
        margin-top: 8px!important;
        margin-right: auto!important;
        margin-left: auto!important;
        max-width: 75px;
        opacity: 0.8;
        z-index: 2;
    }
    
    .data {
        top: 10px;
        position: sticky;
    }
</style>

</html>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso resolveria o seu problema:

 

JS:

const wrap = $(".chat");

wrap.on("scroll", function(e) {
  let data = $('.data');
  
  for(let i = 0; i < data.length; i++) {
    if(i > 0) {
      if(data[i-1].offsetTop === data[i].offsetTop) {
        $(data[i-1]).addClass("none-visible");
      } else {
        $(data[i-1]).removeClass("none-visible");
      }
    }
  }
});

CSS:

.none-visible {
  visibility: hidden;
}

link: https://jsfiddle.net/ebthd1gj/3/

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá.
      Estou atualizando meu conhecimento com Front-End e me deparei com o seguinte problema.
      Criei um sistema para fazer o upload de imagens e alguns campos text.
      Algo bem simples para depois começar a estudar javascript para mostrar a miniatura....
      Mas quando saio do navegador Chrome ou da aba por mais de 3 minutos, ao retornar o navegador as vezes atualiza ou nem chega atualizar mas limpa os campos.
      Estou usando um Smart Motorola com Android, mas um amigo testou no iPhone e acontece a mesma coisa.
      Gostaria de saber se há como usar javascript para evitar isso?
      Agradeço desde já.

      <!DOCTYPE html>
      <html>
      <head>
          <meta charset="utf-8">
          <meta name="viewport" content="width=device-width, initial-scale=1">
          <title>Uploader</title>
      </head>
      <body>
          <form action="?" method="post" enctype="multipart/form-data">
              <br><br>
              <div>selecione a imagem 1</div>
              <input type="file" name="foto1" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem1">
              
              <br><br>
              <input type="file" name="foto2" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem2">
              
              <br><br>

              <input type="file" name="foto3" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem3">
              
              <br><br>
              <input type="submit" value="Enviar">
              <br><br>
          </form>
      <?php
      if ($_SERVER['REQUEST_METHOD'] == 'POST')
      {
          vardump ($_FILES);
      }
      ?>
      </body>
      </html>
       
       
       
    • Por belann
      Olá!
       
      Estou usando o nextjs versão 15.2.3 e criei uma navbar que quando é carregado o programa aparece com a home, mas na hora de clicar na página produtos desaparece a navbar.
      A navbar esta sendo chamada no layout.tsx estou usando typescript
      e fica dessa forma
      <div>           <Navbar/>             <main>{children}</main>             </div>  
    • Por ILR master
      Fala pessoal, tudo bem?
       
      Eu tenho o seguinte código:
       
      <script>
         $(function(){
      var jElement = $('.fixar_banner');
      $(window).scroll(function(){
          if ( $(this).scrollTop() > 120 ){
              jElement.css({
                  'position':'fixed',
                  'top':'10px'
              });
          }else{
              jElement.css({
                  'position':'relative',
                  'top':'auto'
              });
          }
      });
      });
      </script>
       
      Porém, eu quero que a div fique fixa até que outro elemento apareça na tela, tipo o rodapé da página por exemplo. É mais ou menos como a página de notícia do uol.
      https://noticias.uol.com.br/internacional/ultimas-noticias/2025/01/19/sonho-americano-brasileiros-moram-em-carro-e-buscam-comida-no-lixo-nos-eua.htm
       
      Espero ter sido claro.
       
      Obrigado :)
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.