xmpp.chapril.org-conversejs/sass/_messages.scss
JC Brand dd91d3cc55 Use flexbox to keep the chat scrolled down
By using `display: flex` and `flex-direction: column-reverse`, the chat
now automatically scrolls down when loaded, without requiring any
extra JavaScript.

We still need to scroll down with JavaScript when sending a message.

By using `column-reverse`, the messages container now works in reverse.
So the newest message is the first element in the container and the
oldest message is the last. This is the reverse of before.

Due to this, this change will likely break some plugins.
2019-06-18 11:37:07 +02:00

346 lines
9.6 KiB
SCSS

#conversejs {
.older-msg {
time {
font-weight: bold;
}
}
.message {
.mention {
font-weight: bold;
}
.mention--self {
font-weight: normal;
}
&.date-separator {
height: 2em;
margin: 0;
position: relative;
text-align: center;
z-index: 0;
.separator {
border-top: 0px;
border-bottom: var(--chat-separator-border-bottom);
margin: 0 1em;
position: relative;
top: 1em;
z-index: 5;
}
.separator-text {
background: white;
bottom: 1px; // Offset needed due to .separator border size
color: var(--separator-text-color);
display: inline-block;
line-height: 2em;
position: relative;
z-index: 5;
}
}
&.chat-info {
color: var(--chat-head-color);
font-size: var(--message-font-size);
line-height: var(--line-height-small);
font-size: 90%;
padding: 0.17rem 0;
&.badge {
color: var(--chat-head-text-color);
}
&.chat-state-notification {
font-style: italic;
}
&.chat-event {
clear: left;
font-style: italic;
}
&.chat-error {
color: var(--error-color);
font-weight: bold;
}
}
.chat-image {
height: auto;
width: auto;
max-height: 15em;
max-width: 100%;
}
&.chat-msg--action {
font-style: italic;
.chat-msg__author {
padding-right: 0.2em;
}
}
&.chat-msg {
display: flex;
width: 100%;
flex-direction: row;
padding: 0.125rem 0;
&.onload {
animation: colorchange-chatmessage 1s;
-webkit-animation: colorchange-chatmessage 1s;
}
&:hover {
background-color: rgba(0, 0, 0, 0.035);
.chat-msg__actions {
.chat-msg__action {
opacity: 1;
}
}
}
&.correcting {
&.groupchat {
background-color: var(--chatroom-correcting-color);
}
&:not(.groupchat) {
background-color: var(--chat-correcting-color);
}
}
.spoiler {
margin-top: 0.5em;
}
.spoiler-hint {
margin-bottom: 0.5em;
}
.spoiler-toggle {
color: white;
i {
color: white;
padding-right: 0.5em;
}
&:before {
padding-right: 0.25em;
whitespace: nowrap;
}
}
.chat-msg__content {
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: stretch;
margin-left: 0.5rem;
width: calc(100% - var(--message-avatar-width));
}
.chat-msg__content--me {
.chat-msg__body--groupchat {
.chat-msg__text {
color: var(--subdued-color);
}
&.chat-msg__body--delayed .chat-msg__text,
&.chat-msg__body--received .chat-msg__text {
color: var(--message-text-color);
}
}
}
.chat-msg__content--action {
width: 100%;
margin-left: 0;
}
.chat-msg__body {
display: flex;
flex-direction: row;
justify-content: space-between;
}
.chat-msg__message {
display: inline-flex;
flex-direction: column;
width: 100%;
overflow-wrap: break-word;
}
.chat-msg__edit-modal {
cursor: pointer;
padding-right: 0.5em;
}
&.headline {
.chat-msg__body {
margin-left: 0;
}
}
.chat-msg__subject {
font-weight: bold;
clear: right;
}
.chat-msg__text {
color: var(--message-text-color);
padding: 0;
width: 100%;
white-space: pre-wrap;
a {
word-wrap: break-word;
word-break: break-all;
display: inline-block;
}
img {
&.emoji {
height: 1.5em;
width: 1.5em;
margin: 0 .05em 0 .1em;
vertical-align: -0.1em;
}
}
.emojione {
margin-bottom: -6px;
}
}
.chat-msg__text--larger {
font-size: 1.6em;
padding-top: 0.25em;
padding-bottom: 0.25em;
}
.chat-msg__media {
margin-top: 0.25rem;
word-break: break-all;
a {
word-wrap: break-word;
}
audio {
width: 100%;
}
}
.chat-msg__actions {
.chat-msg__action {
height: var(--message-font-size);
font-size: var(--message-font-size);
padding: 0;
border: none;
opacity: 0;
background: transparent;
cursor: pointer;
&:focus {
display: block;
}
}
}
.chat-msg__avatar {
margin-top: 0.5em;
vertical-align: middle;
height: var(--message-avatar-height);
width: var(--message-avatar-width);
min-height: var(--message-avatar-height);
min-width: var(--message-avatar-width);
}
.chat-msg__heading {
width: 100%;
margin-top: 0.5em;
padding-right: 0.25rem;
padding-bottom: 0.25rem;
display: flex;
.chat-msg__author {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-family: var(--heading-font);
font-size: 115%;
font-weight: bold;
padding-bottom: 1px; // Hack to avoid cutting of text on the button
}
.badge {
margin-left: 0.5em;
font-family: var(--normal_font);
}
.chat-msg__time {
padding-left: 0.25em;
padding-right: 0.25em;
color: var(--text-color-lighten-15-percent);
}
}
&.chat-msg--action {
.chat-msg__content {
flex-wrap: wrap;
flex-direction: row;
justify-content: flex-start;
}
.chat-msg__text {
width: auto;
}
.chat-msg__heading {
margin-top: 0;
padding-bottom: 0;
width: auto;
.fa {
margin-left: 0.5em;
}
}
.chat-msg__author {
font-size: var(--message-font-size);
}
.chat-msg__time {
margin-left: 0;
}
}
&.chat-msg--followup {
.chat-msg__heading,
.chat-msg__avatar {
display: none;
}
.chat-msg__content {
margin-left: 2.75rem;
width: 100%;
}
}
.chat-msg__receipt {
margin-right: 0.5em;
color: var(--message-receipt-color);
}
}
}
.chatroom-body .message {
&.onload {
animation: colorchange-chatmessage-muc 1s;
-webkit-animation: colorchange-chatmessage-muc 1s;
}
.separator {
border-top: 0px;
border-bottom: var(--chatroom-separator-border-bottom);
}
}
}
#conversejs.converse-overlayed {
.message {
&.chat-msg {
&.chat-msg--followup {
.chat-msg__content {
margin-left: 0;
}
}
}
}
}
@media screen and (max-width: 767px) {
#conversejs:not(.converse-embedded) {
.message {
&.chat-msg {
.chat-msg__author {
white-space: normal;
}
}
}
}
}