Files
zulip/static/styles/reactions.css
Aman Agrawal 26011c98fd css: Use grid layout for messages.
Using grid layout moves us away from fixed widths
and position for items where possible, which will
make it easier to make messagebox changes without
breaking formatting.

Visual changes expected in this commit:
- When the action buttons overlap the message content,
it will no longer visually overlap but completely cut off
the content — which is good, but means the messages can’t
be as wide on narrow width views. There’s a slight improvement
to this in an upcoming commit.

Also removes the `last_message` CSS, which was busted due to the
`last_message` calculation not correctly being updated for new
messages arriving, and didn't improve styling.
2023-01-10 17:03:37 -08:00

309 lines
7.1 KiB
CSS

.message_reactions {
overflow: hidden;
user-select: none;
.message_reaction {
display: flex;
float: left;
margin: 0.15em;
padding: 0 2px 0 0;
cursor: pointer;
background-color: hsl(0, 0%, 100%);
border: 1px solid hsl(194, 37%, 84%);
border-radius: 4px;
align-items: center;
&.reacted {
background-color: hsl(195, 50%, 95%);
}
&:hover {
border: 1px solid hsl(200, 100%, 40%);
}
+ .reaction_button {
visibility: hidden;
pointer-events: none;
margin: 2px 0.1em 3px;
padding: 3px;
height: 13px;
border-radius: 4px;
padding-left: 0.3em;
border: 1px solid hsl(0, 0%, 73%);
padding-right: 0.3em;
float: left;
}
.emoji {
display: inline-block;
flex-shrink: 0;
vertical-align: top;
top: 0;
margin: 1px 3px;
height: 17px;
width: 17px;
position: relative;
}
}
.message_reaction_count {
position: relative;
top: 1px;
font-size: 90%;
display: flex;
margin: 0 3px;
padding: 2px 0;
line-height: 1em;
}
.message_reaction:hover .message_reaction_count {
color: hsl(200, 100%, 40%);
}
i {
font-size: 1.3em;
float: left;
color: hsl(0, 0%, 33%);
}
&:hover .message_reaction + .reaction_button {
visibility: visible;
pointer-events: all;
background-color: hsl(0, 0%, 98%);
}
.reaction_button {
display: flex;
align-items: center;
i {
font-size: 1em;
}
&:hover i {
color: hsl(200, 100%, 40%);
}
/* Configure the reaction button to appear if and only if there's an
existing reaction to the message. We reference first-child
rather than only-child because tooltips may be appended to
the DOM after this element, whereas actual reactions are
appended before it. */
&:first-child {
display: none;
}
&:hover {
border: 1px solid hsl(200, 100%, 40%);
background-color: hsl(195, 50%, 95%);
cursor: pointer;
opacity: 1;
color: hsl(200, 100%, 40%);
}
.message_reaction_count {
font-size: 1.1em;
color: hsl(0, 0%, 33%);
margin-right: 0;
}
&:hover .message_reaction_count {
color: hsl(200, 100%, 40%);
}
}
}
.private-message .message_reactions .message_reaction {
background-color: hsl(192, 20%, 95%);
&.reacted {
background-color: hsl(196, 51%, 93%);
border-color: hsl(193, 38%, 70%);
}
}
.reaction_button_visible {
visibility: visible !important;
pointer-events: all !important;
opacity: 1 !important;
}
.emoji-info-popover {
padding: 0;
height: 370px;
user-select: none;
.popover-content {
padding: 0;
}
&.bottom .arrow {
border-bottom-color: hsl(0, 0%, 93%);
}
&.top .arrow {
border-top-color: hsl(0, 0%, 93%);
}
.emoji-popover {
display: block;
width: 250px;
.reacted {
background-color: hsl(195, 50%, 95%);
border-color: hsl(195, 52%, 79%);
}
.emoji-popover-top {
position: relative;
padding: 8px 10px;
margin-bottom: 0;
background-color: hsl(0, 0%, 93%);
border-radius: 5px 5px 0 0;
.fa-search {
position: absolute;
color: hsl(0, 0%, 73%);
top: 15px;
left: 17px;
z-index: 3;
}
.emoji-popover-filter {
margin: auto;
padding-left: 22px;
width: calc(100% - 22px - 8px);
font-size: 90%;
}
}
.emoji-popover-category-tabs {
/* Flex needed here to work around #7511 (90% zoom issues in firefox) */
display: flex;
background-color: hsl(0, 0%, 93%);
width: 100%;
box-sizing: border-box;
overflow: hidden;
.emoji-popover-tab-item {
display: inline-block;
padding-top: 8px;
width: 25px;
height: 25px;
text-align: center;
font-size: 16px;
cursor: pointer;
/* Flex needed here to work around #7511 (90% zoom issues in firefox) */
flex-grow: 1;
&.active {
background-color: hsla(0, 0%, 100%, 0.2);
}
}
}
.emoji-popover-emoji-map,
.emoji-search-results-container {
padding: 0;
position: relative;
overflow-x: hidden;
overflow-y: auto;
display: block;
width: 247px;
padding-left: 3px;
}
.emoji-search-results-container {
height: 283px;
.emoji-popover-results-heading {
font-weight: 600;
padding: 5px 3px 3px 5px;
font-size: 17px;
}
}
.emoji-popover-emoji-map {
height: 250px;
.emoji-popover-subheading {
font-weight: 600;
padding: 5px 3px;
}
}
.emoji-popover-emoji {
display: inline-block;
margin: 0;
padding: 6px;
cursor: pointer;
border-radius: 0.5em;
height: 25px;
width: 25px;
&.reacted.reaction:focus {
background-color: hsl(195, 55%, 88%);
outline: none;
}
&:not(.reacted):focus {
background-color: hsl(0, 0%, 93%);
outline: none;
}
&.hide {
display: none;
}
.emoji {
top: 6px;
}
}
}
.emoji-showcase-container {
position: relative;
background-color: hsl(0, 0%, 93%);
min-height: 44px;
width: 250px;
.emoji-preview {
position: absolute;
width: 32px;
height: 32px;
left: 5px;
top: 6px;
margin-top: 0;
}
.emoji-canonical-name {
position: relative;
top: 12px;
margin-left: 50px;
font-size: 16px;
font-weight: 600;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
}
}
.emoji_alt_code {
position: relative;
top: 4px;
font-size: 0.8em;
display: inline-block;
vertical-align: top;
margin: 0 1px 0 0;
line-height: 1em;
}
.typeahead .emoji {
top: 2px;
}