components/sass/init/_mixins.scss

230 lines
5.3 KiB
SCSS
Raw Normal View History

@mixin between {
display: flex;
justify-content: space-between;
}
2019-02-26 22:53:50 +01:00
@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) {
2018-11-29 00:36:23 +01:00
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;
2018-12-04 00:02:21 +01:00
// sass-lint:disable indentation
src: url("#{$relative-font-path}/#{$font-weight}.woff2") format("woff2"),
2019-11-22 22:04:03 +01:00
url("#{$relative-font-path}/#{$font-weight}.woff") format("woff");
2018-12-04 00:02:21 +01:00
// sass-lint:enable indentation
}
@font-face {
font-family: $font-name;
font-style: italic;
font-weight: $font-weight;
2018-12-04 00:02:21 +01:00
// sass-lint:disable indentation
src: url("#{$relative-font-path}/#{$font-weight}i.woff2") format("woff2"),
2019-11-22 22:04:03 +01:00
url("#{$relative-font-path}/#{$font-weight}i.woff") format("woff");
2018-12-04 00:02:21 +01:00
// sass-lint:enable indentation
}
}
2018-12-03 22:10:53 +01:00
@mixin font-mono {
2019-02-06 01:03:03 +01:00
font-family: "Fira Code", "Courier New", monospace;
2018-12-03 22:10:53 +01:00
}
@mixin font-sans {
2019-11-22 22:04:03 +01:00
font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
"Segoe UI Symbol";
2018-12-03 22:10:53 +01:00
}
@mixin font-serif {
font-family: Georgia, serif;
}
@mixin hide-text {
border: none;
color: transparent;
font: 0 / 0 a;
text-shadow: none;
}
2018-12-04 23:08:36 +01:00
// Cross-browser line-clamp support
@mixin line-clamp(
$element-height: 2rem,
$row-count: 2,
$fade-color: var(--lbry-white),
2018-12-04 23:08:36 +01:00
$computed-position: relative
) {
height: $element-height;
overflow: hidden;
position: $computed-position;
&::after {
2019-11-22 22:04:03 +01:00
width: 50%;
height: calc(#{$element-height} / #{$row-count});
right: 0;
bottom: 0;
2018-12-04 23:08:36 +01:00
2019-11-22 22:04:03 +01:00
background-image: linear-gradient(
to right,
rgba($lbry-white, 0),
#{$fade-color} 80%
);
2018-12-04 23:08:36 +01:00
content: "";
position: absolute;
}
}
@mixin no-user-select {
user-select: none;
-ms-user-select: none;
-moz-user-select: none;
-webkit-user-select: none;
}
// TODO: Make customizable
// The `background-position` in `loading-animation` is the same width as this `background-size`
// The same values can be passed to both
@mixin placeholder {
animation-duration: 4s;
animation-fill-mode: forwards;
animation-iteration-count: infinite;
animation-name: loading-animation;
animation-timing-function: linear;
background-color: transparent;
2019-11-22 22:04:03 +01:00
background-image: linear-gradient(
to right,
var(--color-gray-3) 10%,
transparent 80%,
var(--color-gray-3) 100%
);
background-repeat: repeat;
background-size: 500px;
[data-mode="dark"] & {
background-image: linear-gradient(
to right,
rgba($lbry-white, 0.1) 10%,
transparent 80%,
rgba($lbry-white, 0.1) 100%
);
}
}
2018-11-27 23:41:30 +01:00
// 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;
}
}
2019-11-22 22:04:03 +01:00
@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;
}
}
2019-11-22 22:04:03 +01:00
@mixin focus {
box-shadow: 0 0 0 3px var(--color-focus);
2019-11-20 19:52:13 +01:00
}
2019-11-22 22:04:03 +01:00
@mixin underline(
$text-color: var(--lbry-black),
$whitespace-color: var(--lbry-white)
) {
@include selection($text-color, $whitespace-color);
2019-11-22 22:04:03 +01:00
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;
2019-11-22 22:04:03 +01:00
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%;
}
}