From d61c6362949ecb49d81e608af698a5e0fa4643fe Mon Sep 17 00:00:00 2001 From: Volpeon Date: Mon, 21 Jul 2025 22:14:31 +0200 Subject: Improved card --- src/objects/_card.scss | 106 +++++++++++++++++++++++++------------------------ 1 file changed, 54 insertions(+), 52 deletions(-) (limited to 'src/objects/_card.scss') diff --git a/src/objects/_card.scss b/src/objects/_card.scss index aaf46b6..d5d300d 100644 --- a/src/objects/_card.scss +++ b/src/objects/_card.scss @@ -15,28 +15,18 @@ display: flex; flex-direction: column; background-color: props.get(vars.$bg-color); - background-clip: content-box; border: props.get(vars.$border-width) solid transparent; border-color: props.get(vars.$border-color); border-radius: props.get(vars.$rounding); - transition: transform .2s, border-color .2s; + transition: transform .2s, background-color .2s, border-color .2s; @include bem.multi('&:link, &:visited, &:enabled', 'modifier' 'interactive') { &:hover, &:active, &:focus-visible { - transform: translateY(props.get(vars.$hover--offset-b)); - border-color: props.get(vars.$hover--border-color); - - @include bem.elem('body') { - @include bem.modifier('hidden') { - visibility: visible; - opacity: 1; - transition: - opacity .2s ease, - visibility .2s linear; - } - } + transform: translateY(props.get(vars.$hover--offset-b)); + background-color: props.get(vars.$hover--bg-color); + border-color: props.get(vars.$hover--border-color); } &:focus-visible { @@ -60,20 +50,19 @@ position: relative; display: block; flex: 0 0 auto; - inline-size: calc(100% + 2 * props.get(vars.$border-width)); - margin: calc(-1 * props.get(vars.$border-width)); + inline-size: 100%; overflow: hidden; object-fit: cover; transition: background-color .2s, transform .2s, opacity .2s; &:first-child { - border-start-start-radius: props.get(vars.$rounding); - border-start-end-radius: props.get(vars.$rounding); + border-start-start-radius: calc(props.get(vars.$rounding) - props.get(vars.$border-width)); + border-start-end-radius: calc(props.get(vars.$rounding) - props.get(vars.$border-width)); } &:last-child { - border-end-start-radius: props.get(vars.$rounding); - border-end-end-radius: props.get(vars.$rounding); + border-end-start-radius: calc(props.get(vars.$rounding) - props.get(vars.$border-width)); + border-end-end-radius: calc(props.get(vars.$rounding) - props.get(vars.$border-width)); } @include bem.next-elem('avatar') { @@ -106,26 +95,6 @@ margin-block: -100em 100em; content: ''; } - - @include bem.modifier('hidden') { - position: absolute; - inset-block-end: calc(-1 * props.get(vars.$border-width)); - inset-inline: calc(-1 * props.get(vars.$border-width)); - z-index: 10; - visibility: hidden; - background-color: props.get(vars.$bg-color); - border-end-start-radius: props.get(vars.$rounding); - border-end-end-radius: props.get(vars.$rounding); - opacity: 0; - transition: - opacity .2s ease, - visibility 0s .2s linear; - - @include bem.next-elem('image') { - border-start-start-radius: props.get(vars.$rounding); - border-start-end-radius: props.get(vars.$rounding); - } - } } @include bem.elem('content') { @@ -157,19 +126,14 @@ &:hover, &:active, &:focus-visible { - transform: none; + transform: none; + background-color: transparent; @include bem.elem('image') { background-color: props.get(vars.$quiet--hover--image-color); opacity: .75; transform: translateY(props.get(vars.$hover--offset-b)); } - - @include bem.elem('body') { - @include bem.modifier('hidden') { - transform: translateY(props.get(vars.$hover--offset-b)); - } - } } &:focus-visible { @@ -205,11 +169,6 @@ @include bem.elem('body') { padding: 0; padding-block-start: props.get(vars.$spacing); - - @include bem.modifier('hidden') { - padding-block: props.get(vars.$pad-b); - padding-inline: props.get(vars.$pad-i); - } } @include bem.elem('footer') { @@ -217,6 +176,49 @@ } } + @include bem.modifier('thumbnail') { + @include bem.elem('image') { + inline-size: calc(100% + 2 * props.get(vars.$border-width)); + margin: calc(-1 * props.get(vars.$border-width)); + border-radius: props.get(vars.$rounding); + } + + @include bem.elem('body') { + position: absolute; + inset-block-end: calc(-1 * props.get(vars.$border-width)); + inset-inline: calc(-1 * props.get(vars.$border-width)); + z-index: 10; + visibility: hidden; + background-color: props.get(vars.$bg-color); + border-width: 0 props.get(vars.$border-width) props.get(vars.$border-width); + border-color: transparent; + border-style: solid; + border-end-start-radius: calc(props.get(vars.$rounding) - props.get(vars.$border-width)); + border-end-end-radius: calc(props.get(vars.$rounding) - props.get(vars.$border-width)); + opacity: 0; + transition: + border-color .2s ease, + opacity .2s ease, + visibility 0s .2s linear; + } + + @include bem.multi('&:link, &:visited, &:enabled', 'modifier' 'interactive') { + &:hover, + &:active, + &:focus-visible { + @include bem.elem('body') { + border-color: props.get(vars.$hover--border-color); + visibility: visible; + opacity: 1; + transition: + border-color .2s ease, + opacity .2s ease, + visibility .2s linear; + } + } + } + } + @include bem.modifier('horizontal') { flex-direction: row; align-items: center; -- cgit v1.2.3-70-g09d2