f5cce18a55
## Issue https://www.notion.so/Performance-Fixes-927f825a5d674bd09323830be1d263af#1beab2fee011421492b56b88f68681a3 We currently lazy-load the tiles in the category sections (but not the sections themselves, because we want to retain scroll position on Back action). This puts gray placeholders until the section is visible on screen. which turns out to be quite expensive, because the placeholders are animated, so we have a perpetual animation in the background after the homepage loads + user did not scroll. ## Change Just disable the barely-noticeable animation for now. There are alternatives, but probably not worth polluting the code with: - Just like the thumbnails, use intersection observer to decide when to animate. - Find solution to the "lazy load section + need to retain scroll position".
237 lines
5.6 KiB
SCSS
237 lines
5.6 KiB
SCSS
@mixin between {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
@mixin breakpoint-max($breakpoint) {
|
|
@media (max-width: #{$breakpoint}px) {
|
|
@content;
|
|
}
|
|
}
|
|
|
|
@mixin breakpoint-min($breakpoint) {
|
|
@media (min-width: #{$breakpoint}px) {
|
|
@content;
|
|
}
|
|
}
|
|
|
|
@mixin center {
|
|
align-items: center;
|
|
display: inline-flex;
|
|
justify-content: center;
|
|
}
|
|
|
|
@mixin clearfix {
|
|
clear: both;
|
|
content: '';
|
|
display: block;
|
|
}
|
|
|
|
// (Smart) text truncation
|
|
// Pass in a width to customize how much text is allowed
|
|
// Omit value for basic text truncation
|
|
@mixin constrict($value: null) {
|
|
@if ($value) {
|
|
max-width: $value;
|
|
}
|
|
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
@mixin create-grid($items-per-row: 4) {
|
|
grid-template: repeat(1, 1fr) / repeat($items-per-row, 1fr);
|
|
}
|
|
|
|
// Smart font include
|
|
// Simply pass in the font-weight you want to use and the normal/italicized versions will be added
|
|
// No more weighing down the front-end with references to unused weights
|
|
@mixin font-face($font-weight, $relative-font-path, $font-name) {
|
|
@font-face {
|
|
font-family: $font-name;
|
|
font-style: normal;
|
|
font-weight: $font-weight;
|
|
// sass-lint:disable indentation
|
|
src: url('#{$relative-font-path}/#{$font-weight}.woff2') format('woff2'),
|
|
url('#{$relative-font-path}/#{$font-weight}.woff') format('woff');
|
|
// sass-lint:enable indentation
|
|
}
|
|
|
|
@font-face {
|
|
font-family: $font-name;
|
|
font-style: italic;
|
|
font-weight: $font-weight;
|
|
// sass-lint:disable indentation
|
|
src: url('#{$relative-font-path}/#{$font-weight}i.woff2') format('woff2'),
|
|
url('#{$relative-font-path}/#{$font-weight}i.woff') format('woff');
|
|
// sass-lint:enable indentation
|
|
}
|
|
}
|
|
|
|
@mixin font-mono {
|
|
font-family: 'Fira Code', 'Courier New', monospace;
|
|
}
|
|
|
|
@mixin font-sans {
|
|
font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif,
|
|
'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
|
|
}
|
|
|
|
@mixin font-serif {
|
|
font-family: Georgia, serif;
|
|
}
|
|
|
|
@mixin hide-text {
|
|
border: none;
|
|
color: transparent;
|
|
font: 0 / 0 a;
|
|
text-shadow: none;
|
|
}
|
|
|
|
// Cross-browser line-clamp support
|
|
@mixin line-clamp($element-height: 2rem, $row-count: 2, $fade-color: var(--lbry-white), $computed-position: relative) {
|
|
height: $element-height;
|
|
overflow: hidden;
|
|
position: $computed-position;
|
|
|
|
&::after {
|
|
width: 50%;
|
|
height: calc(#{$element-height} / #{$row-count});
|
|
right: 0;
|
|
bottom: 0;
|
|
|
|
background-image: linear-gradient(to right, rgba($lbry-white, 0), #{$fade-color} 80%);
|
|
content: '';
|
|
position: absolute;
|
|
}
|
|
}
|
|
|
|
@mixin no-user-select {
|
|
user-select: none;
|
|
|
|
-ms-user-select: none;
|
|
-moz-user-select: none;
|
|
-webkit-user-select: none;
|
|
}
|
|
|
|
// Use CSS variables without upsetting Sass-Lint
|
|
// https://github.com/sasstools/sass-lint/issues/1161#issuecomment-390537190
|
|
@mixin root-prop($prop: null, $value: null) {
|
|
@if ($prop and $value) {
|
|
#{$prop}: $value;
|
|
}
|
|
}
|
|
|
|
@mixin selection($background-color: var(--lbry-white), $text-color: var(--lbry-black)) {
|
|
&::selection {
|
|
background-color: $background-color;
|
|
color: $text-color;
|
|
text-shadow: none;
|
|
}
|
|
|
|
&::-moz-selection {
|
|
background-color: $background-color;
|
|
color: $text-color;
|
|
text-shadow: none;
|
|
}
|
|
}
|
|
|
|
@mixin thumbnail {
|
|
&::before,
|
|
&::after {
|
|
content: '';
|
|
}
|
|
|
|
&::before {
|
|
float: left;
|
|
padding-top: var(--aspect-ratio-standard);
|
|
}
|
|
|
|
&::after {
|
|
clear: both;
|
|
display: block;
|
|
}
|
|
}
|
|
|
|
@mixin focus {
|
|
box-shadow: 0 0 0 3px var(--color-focus);
|
|
}
|
|
|
|
@mixin linkFocus {
|
|
background-color: var(--color-link-focus-bg);
|
|
box-shadow: 0 0 0 5px var(--color-link-focus-bg);
|
|
}
|
|
|
|
@mixin underline($text-color: var(--lbry-black), $whitespace-color: var(--lbry-white)) {
|
|
@include selection($text-color, $whitespace-color);
|
|
|
|
background-image: linear-gradient($whitespace-color, $whitespace-color),
|
|
linear-gradient($whitespace-color, $whitespace-color), linear-gradient($text-color, $text-color);
|
|
background-position: 0 88%, 100% 88%, 0 88%;
|
|
background-repeat: no-repeat, no-repeat, repeat-x;
|
|
background-size: 0.05rem 1px, 0.05rem 1px, 1px 1px;
|
|
box-decoration-break: clone;
|
|
display: inline;
|
|
text-decoration: none;
|
|
text-shadow: 0.03rem 0 $whitespace-color, -0.03rem 0 $whitespace-color, 0 0.03rem $whitespace-color,
|
|
0 -0.03rem $whitespace-color, 0.06rem 0 $whitespace-color, -0.06rem 0 $whitespace-color, 0.09rem 0 $whitespace-color,
|
|
-0.09rem 0 $whitespace-color, 0.12rem 0 $whitespace-color, -0.12rem 0 $whitespace-color, 0.15rem 0 $whitespace-color,
|
|
-0.15rem 0 $whitespace-color;
|
|
|
|
@-moz-document url-prefix() {
|
|
// sass-lint:disable-line empty-args
|
|
background-position: 0 90%, 100% 90%, 0 90%;
|
|
}
|
|
}
|
|
|
|
@mixin placeholder {
|
|
// animation: pulse 2s infinite ease-in-out;
|
|
background-color: var(--color-placeholder-background);
|
|
border-radius: var(--card-radius);
|
|
border-width: 0;
|
|
}
|
|
|
|
@mixin mediaThumbHoverZoom {
|
|
.media__thumb,
|
|
img {
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
&:hover {
|
|
.media__thumb,
|
|
img {
|
|
transform: scale(1.05);
|
|
}
|
|
}
|
|
}
|
|
|
|
@mixin handleClaimTileGifThumbnail($width) {
|
|
.ff-canvas,
|
|
.freezeframe-img {
|
|
height: calc(#{$width} * (9 / 16)) !important;
|
|
width: $width;
|
|
border-bottom-left-radius: 0;
|
|
border-bottom-right-radius: 0;
|
|
}
|
|
}
|
|
|
|
@mixin handleClaimListGifThumbnail($width) {
|
|
.ff-canvas,
|
|
.freezeframe-img {
|
|
height: calc(#{$width} * (9 / 16)) !important;
|
|
width: $width;
|
|
}
|
|
}
|
|
|
|
@mixin handleChannelGif($size) {
|
|
height: $size;
|
|
width: $size;
|
|
|
|
.ff-canvas,
|
|
.freezeframe-img {
|
|
border-radius: var(--border-radius);
|
|
height: $size !important;
|
|
width: $size !important;
|
|
}
|
|
}
|