docs: delete home
This commit is contained in:
parent
f2a4633788
commit
5c1337f21a
692
home.html
692
home.html
@ -1,692 +0,0 @@
|
||||
<!--
|
||||
title: 欢迎
|
||||
description:
|
||||
published: true
|
||||
date: 2024-03-16T06:40:55.541Z
|
||||
tags:
|
||||
editor: code
|
||||
dateCreated: 2023-02-19T05:55:06.863Z
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>CSS Cards</title>
|
||||
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.8.1/css/all.min.css">
|
||||
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Montserrat&display=swap"rel="stylesheet">
|
||||
<link rel="stylesheet" href="style.css" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="app">
|
||||
<div class="cardList">
|
||||
<button class="cardList__btn btn btn--left">
|
||||
<div class="icon">
|
||||
<svg>
|
||||
<use xlink:href="#arrow-left"></use>
|
||||
</svg>
|
||||
</div>
|
||||
</button>
|
||||
|
||||
<div class="cards__wrapper">
|
||||
<div class="card current--card">
|
||||
<div class="card__image">
|
||||
<img src="https://source.unsplash.com/Z8dtTatMVMw" alt="" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card next--card">
|
||||
<div class="card__image">
|
||||
<img src="https://source.unsplash.com/9dmycbFE7mQ" alt="" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card previous--card">
|
||||
<div class="card__image">
|
||||
<img src="https://source.unsplash.com/m7K4KzL5aQ8" alt="" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button class="cardList__btn btn btn--right">
|
||||
<div class="icon">
|
||||
<svg>
|
||||
<use xlink:href="#arrow-right"></use>
|
||||
</svg>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="infoList">
|
||||
<div class="info__wrapper">
|
||||
<div class="info current--info">
|
||||
<h1 class="text name">Highlands</h1>
|
||||
<h4 class="text location">Scotland</h4>
|
||||
<p class="text description">The mountains are calling</p>
|
||||
</div>
|
||||
|
||||
<div class="info next--info">
|
||||
<h1 class="text name">Machu Pichu</h1>
|
||||
<h4 class="text location">Peru</h4>
|
||||
<p class="text description">Adventure is never far away</p>
|
||||
</div>
|
||||
|
||||
<div class="info previous--info">
|
||||
<h1 class="text name">Chamonix</h1>
|
||||
<h4 class="text location">France</h4>
|
||||
<p class="text description">Let your dreams come true</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="app__bg">
|
||||
<div class="app__bg__image current--image">
|
||||
<img src="https://source.unsplash.com/Z8dtTatMVMw" alt="" />
|
||||
</div>
|
||||
<div class="app__bg__image next--image">
|
||||
<img src="https://source.unsplash.com/9dmycbFE7mQ" alt="" />
|
||||
</div>
|
||||
<div class="app__bg__image previous--image">
|
||||
<img src="https://source.unsplash.com/m7K4KzL5aQ8" alt="" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="loading__wrapper">
|
||||
<div class="loader--text">Loading...</div>
|
||||
<div class="loader">
|
||||
<span></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<svg class="icons" style="display: none;">
|
||||
<symbol id="arrow-left" xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'>
|
||||
<polyline points='328 112 184 256 328 400'
|
||||
style='fill:none;stroke:#fff;stroke-linecap:round;stroke-linejoin:round;stroke-width:48px' />
|
||||
</symbol>
|
||||
<symbol id="arrow-right" xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'>
|
||||
<polyline points='184 112 328 256 184 400'
|
||||
style='fill:none;stroke:#fff;stroke-linecap:round;stroke-linejoin:round;stroke-width:48px' />
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<script type="text/javascript" src="https://unpkg.com/imagesloaded@4/imagesloaded.pkgd.min.js"></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.3.3/gsap.min.js"></script>
|
||||
<script type="text/javascript" src="script.js"></script>
|
||||
</body>
|
||||
<script type="text/javascript">
|
||||
console.clear();
|
||||
|
||||
const { gsap, imagesLoaded } = window;
|
||||
|
||||
const buttons = {
|
||||
prev: document.querySelector(".btn--left"),
|
||||
next: document.querySelector(".btn--right"),
|
||||
};
|
||||
const cardsContainerEl = document.querySelector(".cards__wrapper");
|
||||
const appBgContainerEl = document.querySelector(".app__bg");
|
||||
|
||||
const cardInfosContainerEl = document.querySelector(".info__wrapper");
|
||||
|
||||
buttons.next.addEventListener("click", () => swapCards("right"));
|
||||
|
||||
buttons.prev.addEventListener("click", () => swapCards("left"));
|
||||
|
||||
function swapCards(direction) {
|
||||
const currentCardEl = cardsContainerEl.querySelector(".current--card");
|
||||
const previousCardEl = cardsContainerEl.querySelector(".previous--card");
|
||||
const nextCardEl = cardsContainerEl.querySelector(".next--card");
|
||||
|
||||
const currentBgImageEl = appBgContainerEl.querySelector(".current--image");
|
||||
const previousBgImageEl = appBgContainerEl.querySelector(".previous--image");
|
||||
const nextBgImageEl = appBgContainerEl.querySelector(".next--image");
|
||||
|
||||
changeInfo(direction);
|
||||
swapCardsClass();
|
||||
|
||||
removeCardEvents(currentCardEl);
|
||||
|
||||
function swapCardsClass() {
|
||||
currentCardEl.classList.remove("current--card");
|
||||
previousCardEl.classList.remove("previous--card");
|
||||
nextCardEl.classList.remove("next--card");
|
||||
|
||||
currentBgImageEl.classList.remove("current--image");
|
||||
previousBgImageEl.classList.remove("previous--image");
|
||||
nextBgImageEl.classList.remove("next--image");
|
||||
|
||||
currentCardEl.style.zIndex = "50";
|
||||
currentBgImageEl.style.zIndex = "-2";
|
||||
|
||||
if (direction === "right") {
|
||||
previousCardEl.style.zIndex = "20";
|
||||
nextCardEl.style.zIndex = "30";
|
||||
|
||||
nextBgImageEl.style.zIndex = "-1";
|
||||
|
||||
currentCardEl.classList.add("previous--card");
|
||||
previousCardEl.classList.add("next--card");
|
||||
nextCardEl.classList.add("current--card");
|
||||
|
||||
currentBgImageEl.classList.add("previous--image");
|
||||
previousBgImageEl.classList.add("next--image");
|
||||
nextBgImageEl.classList.add("current--image");
|
||||
} else if (direction === "left") {
|
||||
previousCardEl.style.zIndex = "30";
|
||||
nextCardEl.style.zIndex = "20";
|
||||
|
||||
previousBgImageEl.style.zIndex = "-1";
|
||||
|
||||
currentCardEl.classList.add("next--card");
|
||||
previousCardEl.classList.add("current--card");
|
||||
nextCardEl.classList.add("previous--card");
|
||||
|
||||
currentBgImageEl.classList.add("next--image");
|
||||
previousBgImageEl.classList.add("current--image");
|
||||
nextBgImageEl.classList.add("previous--image");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function changeInfo(direction) {
|
||||
let currentInfoEl = cardInfosContainerEl.querySelector(".current--info");
|
||||
let previousInfoEl = cardInfosContainerEl.querySelector(".previous--info");
|
||||
let nextInfoEl = cardInfosContainerEl.querySelector(".next--info");
|
||||
|
||||
gsap.timeline()
|
||||
.to([buttons.prev, buttons.next], {
|
||||
duration: 0.2,
|
||||
opacity: 0.5,
|
||||
pointerEvents: "none",
|
||||
})
|
||||
.to(
|
||||
currentInfoEl.querySelectorAll(".text"),
|
||||
{
|
||||
duration: 0.4,
|
||||
stagger: 0.1,
|
||||
translateY: "-120px",
|
||||
opacity: 0,
|
||||
},
|
||||
"-="
|
||||
)
|
||||
.call(() => {
|
||||
swapInfosClass(direction);
|
||||
})
|
||||
.call(() => initCardEvents())
|
||||
.fromTo(
|
||||
direction === "right"
|
||||
? nextInfoEl.querySelectorAll(".text")
|
||||
: previousInfoEl.querySelectorAll(".text"),
|
||||
{
|
||||
opacity: 0,
|
||||
translateY: "40px",
|
||||
},
|
||||
{
|
||||
duration: 0.4,
|
||||
stagger: 0.1,
|
||||
translateY: "0px",
|
||||
opacity: 1,
|
||||
}
|
||||
)
|
||||
.to([buttons.prev, buttons.next], {
|
||||
duration: 0.2,
|
||||
opacity: 1,
|
||||
pointerEvents: "all",
|
||||
});
|
||||
|
||||
function swapInfosClass() {
|
||||
currentInfoEl.classList.remove("current--info");
|
||||
previousInfoEl.classList.remove("previous--info");
|
||||
nextInfoEl.classList.remove("next--info");
|
||||
|
||||
if (direction === "right") {
|
||||
currentInfoEl.classList.add("previous--info");
|
||||
nextInfoEl.classList.add("current--info");
|
||||
previousInfoEl.classList.add("next--info");
|
||||
} else if (direction === "left") {
|
||||
currentInfoEl.classList.add("next--info");
|
||||
nextInfoEl.classList.add("previous--info");
|
||||
previousInfoEl.classList.add("current--info");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function updateCard(e) {
|
||||
const card = e.currentTarget;
|
||||
const box = card.getBoundingClientRect();
|
||||
const centerPosition = {
|
||||
x: box.left + box.width / 2,
|
||||
y: box.top + box.height / 2,
|
||||
};
|
||||
let angle = Math.atan2(e.pageX - centerPosition.x, 0) * (35 / Math.PI);
|
||||
gsap.set(card, {
|
||||
"--current-card-rotation-offset": `${angle}deg`,
|
||||
});
|
||||
const currentInfoEl = cardInfosContainerEl.querySelector(".current--info");
|
||||
gsap.set(currentInfoEl, {
|
||||
rotateY: `${angle}deg`,
|
||||
});
|
||||
}
|
||||
|
||||
function resetCardTransforms(e) {
|
||||
const card = e.currentTarget;
|
||||
const currentInfoEl = cardInfosContainerEl.querySelector(".current--info");
|
||||
gsap.set(card, {
|
||||
"--current-card-rotation-offset": 0,
|
||||
});
|
||||
gsap.set(currentInfoEl, {
|
||||
rotateY: 0,
|
||||
});
|
||||
}
|
||||
|
||||
function initCardEvents() {
|
||||
const currentCardEl = cardsContainerEl.querySelector(".current--card");
|
||||
currentCardEl.addEventListener("pointermove", updateCard);
|
||||
currentCardEl.addEventListener("pointerout", (e) => {
|
||||
resetCardTransforms(e);
|
||||
});
|
||||
}
|
||||
|
||||
initCardEvents();
|
||||
|
||||
function removeCardEvents(card) {
|
||||
card.removeEventListener("pointermove", updateCard);
|
||||
}
|
||||
|
||||
function init() {
|
||||
|
||||
let tl = gsap.timeline();
|
||||
|
||||
tl.to(cardsContainerEl.children, {
|
||||
delay: 0.15,
|
||||
duration: 0.5,
|
||||
stagger: {
|
||||
ease: "power4.inOut",
|
||||
from: "right",
|
||||
amount: 0.1,
|
||||
},
|
||||
"--card-translateY-offset": "0%",
|
||||
})
|
||||
.to(cardInfosContainerEl.querySelector(".current--info").querySelectorAll(".text"), {
|
||||
delay: 0.5,
|
||||
duration: 0.4,
|
||||
stagger: 0.1,
|
||||
opacity: 1,
|
||||
translateY: 0,
|
||||
})
|
||||
.to(
|
||||
[buttons.prev, buttons.next],
|
||||
{
|
||||
duration: 0.4,
|
||||
opacity: 1,
|
||||
pointerEvents: "all",
|
||||
},
|
||||
"-=0.4"
|
||||
);
|
||||
}
|
||||
|
||||
const waitForImages = () => {
|
||||
const images = [...document.querySelectorAll("img")];
|
||||
const totalImages = images.length;
|
||||
let loadedImages = 0;
|
||||
const loaderEl = document.querySelector(".loader span");
|
||||
|
||||
gsap.set(cardsContainerEl.children, {
|
||||
"--card-translateY-offset": "100vh",
|
||||
});
|
||||
gsap.set(cardInfosContainerEl.querySelector(".current--info").querySelectorAll(".text"), {
|
||||
translateY: "40px",
|
||||
opacity: 0,
|
||||
});
|
||||
gsap.set([buttons.prev, buttons.next], {
|
||||
pointerEvents: "none",
|
||||
opacity: "0",
|
||||
});
|
||||
|
||||
images.forEach((image) => {
|
||||
imagesLoaded(image, (instance) => {
|
||||
if (instance.isComplete) {
|
||||
loadedImages++;
|
||||
let loadProgress = loadedImages / totalImages;
|
||||
|
||||
gsap.to(loaderEl, {
|
||||
duration: 1,
|
||||
scaleX: loadProgress,
|
||||
backgroundColor: `hsl(${loadProgress * 120}, 100%, 50%`,
|
||||
});
|
||||
|
||||
if (totalImages == loadedImages) {
|
||||
gsap.timeline()
|
||||
.to(".loading__wrapper", {
|
||||
duration: 0.8,
|
||||
opacity: 0,
|
||||
pointerEvents: "none",
|
||||
})
|
||||
.call(() => init());
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
waitForImages();
|
||||
|
||||
</script>
|
||||
<style>
|
||||
@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@500;600;700;800&display=swap");
|
||||
:root {
|
||||
--card-width: 200px;
|
||||
--card-height: 300px;
|
||||
--card-transition-duration: 800ms;
|
||||
--card-transition-easing: ease;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
body {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background: rgba(0, 0, 0, 0.787);
|
||||
overflow: hidden;
|
||||
}
|
||||
button {
|
||||
border: none;
|
||||
background: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
button:focus {
|
||||
outline: none;
|
||||
border: none;
|
||||
}
|
||||
.app {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.app__bg {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: -5;
|
||||
filter: blur(8px);
|
||||
pointer-events: none;
|
||||
user-select: none;
|
||||
overflow: hidden;
|
||||
}
|
||||
.app__bg::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #000;
|
||||
z-index: 1;
|
||||
opacity: 0.8;
|
||||
}
|
||||
.app__bg__image {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%) translateX(var(--image-translate-offset, 0));
|
||||
width: 180%;
|
||||
height: 180%;
|
||||
transition: transform 1000ms ease, opacity 1000ms ease;
|
||||
overflow: hidden;
|
||||
}
|
||||
.app__bg__image img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
.app__bg__image.current--image {
|
||||
opacity: 1;
|
||||
--image-translate-offset: 0;
|
||||
}
|
||||
.app__bg__image.previous--image, .app__bg__image.next--image {
|
||||
opacity: 0;
|
||||
}
|
||||
.app__bg__image.previous--image {
|
||||
--image-translate-offset: -25%;
|
||||
}
|
||||
.app__bg__image.next--image {
|
||||
--image-translate-offset: 25%;
|
||||
}
|
||||
.cardList {
|
||||
position: absolute;
|
||||
width: calc(3 * var(--card-width));
|
||||
height: auto;
|
||||
}
|
||||
.cardList__btn {
|
||||
--btn-size: 35px;
|
||||
width: var(--btn-size);
|
||||
height: var(--btn-size);
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
z-index: 100;
|
||||
}
|
||||
.cardList__btn.btn--left {
|
||||
left: -5%;
|
||||
}
|
||||
.cardList__btn.btn--right {
|
||||
right: -5%;
|
||||
}
|
||||
.cardList__btn .icon {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.cardList__btn .icon svg {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.cardList .cards__wrapper {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
perspective: 1000px;
|
||||
}
|
||||
.card {
|
||||
--card-translateY-offset: 100vh;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%) translateX(var(--card-translateX-offset)) translateY(var(--card-translateY-offset)) rotateY(var(--card-rotation-offset)) scale(var(--card-scale-offset));
|
||||
display: inline-block;
|
||||
width: var(--card-width);
|
||||
height: var(--card-height);
|
||||
transition: transform var(--card-transition-duration) var(--card-transition-easing);
|
||||
user-select: none;
|
||||
}
|
||||
.card::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #000;
|
||||
z-index: 1;
|
||||
transition: opacity var(--card-transition-duration) var(--card-transition-easing);
|
||||
opacity: calc(1 - var(--opacity));
|
||||
}
|
||||
.card__image {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.card__image img {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
.card.current--card {
|
||||
--current-card-rotation-offset: 0;
|
||||
--card-translateX-offset: 0;
|
||||
--card-rotation-offset: var(--current-card-rotation-offset);
|
||||
--card-scale-offset: 1.2;
|
||||
--opacity: 0.8;
|
||||
}
|
||||
.card.previous--card {
|
||||
--card-translateX-offset: calc(-1 * var(--card-width) * 1.1);
|
||||
--card-rotation-offset: 25deg;
|
||||
}
|
||||
.card.next--card {
|
||||
--card-translateX-offset: calc(var(--card-width) * 1.1);
|
||||
--card-rotation-offset: -25deg;
|
||||
}
|
||||
.card.previous--card, .card.next--card {
|
||||
--card-scale-offset: 0.9;
|
||||
--opacity: 0.4;
|
||||
}
|
||||
.infoList {
|
||||
position: absolute;
|
||||
width: calc(3 * var(--card-width));
|
||||
height: var(--card-height);
|
||||
pointer-events: none;
|
||||
}
|
||||
.infoList .info__wrapper {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: flex-end;
|
||||
perspective: 1000px;
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
.info {
|
||||
margin-bottom: calc(var(--card-height) / 8);
|
||||
margin-left: calc(var(--card-width) / 1.5);
|
||||
transform: translateZ(2rem);
|
||||
transition: transform var(--card-transition-duration) var(--card-transition-easing);
|
||||
}
|
||||
.info .text {
|
||||
position: relative;
|
||||
font-family: "Montserrat";
|
||||
font-size: calc(var(--card-width) * var(--text-size-offset, 0.2));
|
||||
white-space: nowrap;
|
||||
color: #fff;
|
||||
width: fit-content;
|
||||
}
|
||||
.info .name, .info .location {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.info .location {
|
||||
font-weight: 800;
|
||||
}
|
||||
.info .location {
|
||||
--mg-left: 40px;
|
||||
--text-size-offset: 0.12;
|
||||
font-weight: 600;
|
||||
margin-left: var(--mg-left);
|
||||
margin-bottom: calc(var(--mg-left) / 2);
|
||||
padding-bottom: 0.8rem;
|
||||
}
|
||||
.info .location::before, .info .location::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
background: #fff;
|
||||
left: 0%;
|
||||
transform: translate(calc(-1 * var(--mg-left)), -50%);
|
||||
}
|
||||
.info .location::before {
|
||||
top: 50%;
|
||||
width: 20px;
|
||||
height: 5px;
|
||||
}
|
||||
.info .location::after {
|
||||
bottom: 0;
|
||||
width: 60px;
|
||||
height: 2px;
|
||||
}
|
||||
.info .description {
|
||||
--text-size-offset: 0.065;
|
||||
font-weight: 500;
|
||||
}
|
||||
.info.current--info {
|
||||
opacity: 1;
|
||||
display: block;
|
||||
}
|
||||
.info.previous--info, .info.next--info {
|
||||
opacity: 0;
|
||||
display: none;
|
||||
}
|
||||
.loading__wrapper {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background: #000;
|
||||
z-index: 200;
|
||||
}
|
||||
.loading__wrapper .loader--text {
|
||||
color: #fff;
|
||||
font-family: "Montserrat";
|
||||
font-weight: 500;
|
||||
margin-bottom: 1.4rem;
|
||||
}
|
||||
.loading__wrapper .loader {
|
||||
position: relative;
|
||||
width: 200px;
|
||||
height: 2px;
|
||||
background: rgba(255, 255, 255, 0.25);
|
||||
}
|
||||
.loading__wrapper .loader span {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #f00;
|
||||
transform: scaleX(0);
|
||||
transform-origin: left;
|
||||
}
|
||||
@media only screen and (min-width: 800px) {
|
||||
:root {
|
||||
--card-width: 250px;
|
||||
--card-height: 400px;
|
||||
}
|
||||
}
|
||||
.support {
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
bottom: 10px;
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
}
|
||||
.support a {
|
||||
margin: 0 10px;
|
||||
color: #fff;
|
||||
font-size: 1.8rem;
|
||||
backface-visibility: hidden;
|
||||
transition: all 150ms ease;
|
||||
}
|
||||
.support a:hover {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
</style>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user