Использование CSS 'position: sticky;
Вам нужно будет заключить каждую датированную группу сообщений в отдельный div. Ниже я заключил датированные группы в div с class="date-area"
, просто чтобы идентифицировать их. Я применил только стили к .divider
. Вы можете видеть, что я добавил position: sticky;
и top: 10px
, чтобы прикрепить дату в десяти пикселях от верхней части окна просмотра при прокрутке:
Редактировать: Я добавил .spacer
divs в нижней части группы дат, затем сместите метки даты к вершине на ту же высоту, что и проставки. Таким образом, метки даты полностью перекрываются, чтобы создать ощущение «замены» даты. Я не вижу никакой выгоды в клонировании метки даты, как это делает WhatsApp. Единственный способ, которым я могу придумать, чтобы полностью имитировать c это поведение, это использовать JS, и я не считаю хорошей практикой использовать JS для чисто презентационных целей, если нет какой-либо ощутимой выгоды. В чем выгода от полного дублирования дизайна WhatsApp?
#messages {
border: 1px solid;
max-height: 200px;
overflow-y: scroll;
}
#messages > div {
margin-bottom: 15px;
padding-left: 3%;
padding-right: 3%;
}
.message.right {
text-align: right;
}
.divider {
text-align: center;
position: sticky;
top: 10px;
}
.divider span {
padding: 6px 12px;
text-align: center;
line-height: 1;
background: gray;
color: #fff;
border-radius: 6px;
}
.date-area {
margin-top: -35px;
}
.spacer {
height: 35px;
}
<div id="messages">
<div class="date-area">
<div class="message left">Testnachricht</div>
<div class="message left">Testnachricht</div>
<div class="message left">Testnachricht</div>
<div class="spacer"> </div>
</div>
<div class="date-area">
<div class="divider">
<span>22.02.2020</span>
</div>
<div class="message right">Testnachricht</div>
<div class="message right">Testnachricht</div>
<div class="message right">Testnachricht</div>
<div class="message right">Testnachricht</div>
<div class="message left">Testnachricht</div>
<div class="spacer"> </div>
</div>
<div class="date-area">
<div class="divider">
<span>Heute</span>
</div>
<div class="message right">Testnachricht</div>
<div class="message right">Testnachricht</div>
<div class="message left">Testnachricht</div>
<div class="message left">Testnachricht</div>
<div class="message left">Testnachricht</div>
<div class="message right">Testnachricht</div>
<div class="message right">Testnachricht</div>
<div class="message right">Testnachricht</div>
<div class="message left">Testnachricht</div>
<div class="message left">Testnachricht</div>
<div class="message left">Testnachricht</div>
<div class="message right">Testnachricht</div>
<div class="message right">Testnachricht</div>
<div class="message right">Testnachricht</div>
<div class="message left">Testnachricht</div>
<div class="message left">Testnachricht</div>
<div class="message left">Testnachricht</div>
<div class="message right">Testnachricht</div>
<div class="spacer"> </div>
</div>
</div>