Maison > interface Web > tutoriel CSS > Comment utiliser du CSS pur pour obtenir l'effet d'animation de l'ouverture et de la fermeture d'un parapluie (code source ci-joint)

Comment utiliser du CSS pur pour obtenir l'effet d'animation de l'ouverture et de la fermeture d'un parapluie (code source ci-joint)

不言
Libérer: 2018-10-18 13:44:33
avant
3965 Les gens l'ont consulté

Le contenu de cet article explique comment utiliser du CSS pur pour réaliser l'effet d'animation de l'ouverture et de la fermeture d'un parapluie (code source ci-joint). Les amis dans le besoin peuvent s'y référer. j'espère que cela vous aidera.

Aperçu de l'effet

Comment utiliser du CSS pur pour obtenir leffet danimation de louverture et de la fermeture dun parapluie (code source ci-joint)

Téléchargement du code source

https://github.com/comehope/front- défis-de-fin-quotidienne

Interprétation du code

définit dom, le conteneur .umbralla contient 2 éléments, .canopy représente la housse du parapluie, .shaft poignée du parapluie :

<figure>
    <div></div>
    <div></div>
</figure>
Copier après la connexion

Affichage centré :

body {
    margin: 0;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(skyblue, lightblue);
}
Copier après la connexion

Définissez les attributs communs du pseudo-élément :

.umbrella *::before,
.umbrella *::after {
    content: '';
    position: absolute;
}
Copier après la connexion

Dessinez d'abord un parapluie ouvert.
Définissez la taille du conteneur. La valeur de l'attribut font-size sera utilisée plus tard, donc une variable est définie :

:root {
    --font-size: 10px;
}

.umbrella {
    position: relative;
    width: 25em;
    height: 26em;
    font-size: var(--font-size);
}
Copier après la connexion

Définissez la taille de la housse du parapluie :

.umbrella .canopy {
    position: absolute;
    width: inherit;
    height: 5.5em;
    top: 2.5em;
}
Copier après la connexion

Utilisez le pseudo élément ::before pour dessiner la partie supérieure de la housse du parapluie. Dessinez d'abord un demi-cercle puis compressez-le dans le sens vertical :

.umbrella .canopy::before {
    width: inherit;
    height: 12.5em;
    background: rgb(100, 100, 100);
    border-radius: 12.5em 12.5em 0 0;
    transform: scaleY(0.4);
    top: -4em;
}
Copier après la connexion

Utilisez le pseudo élément ::after. pour dessiner la partie inférieure du couvercle du parapluie. Demi-partie :

.umbrella .canopy::after {
    width: inherit;
    height: 1.5em;
    background-color: #333;
    top: 4em;
    border-radius: 50%;
}
Copier après la connexion

Dessinez le long mât du manche du parapluie :

.umbrella .shaft {
    position: absolute;
    width: 0.8em;
    height: 18em;
    background-color: rgba(100, 100, 100, 0.7);
    top: 5.5em;
    left: calc((100% - 0.8em) / 2);
}
Copier après la connexion

Utilisez des pseudo-éléments pour dessiner la pointe du haut. du mât du parapluie exposant la housse du parapluie. La méthode est la même que pour dessiner sur la housse du parapluie. La moitié est similaire, dessinez d'abord le demi-cercle, puis compressez-le dans le sens horizontal :

.umbrella .shaft::before {
    width: 6em;
    height: 3em;
    background-color: rgba(100, 100, 100, 0.7);
    left: calc((100% - 6em) / 2);
    top: -5.5em;
    border-radius: 6em 6em 0 0;
    transform: scaleX(0.1);
}
Copier après la connexion

. Dessinez la poignée en forme de crochet du parapluie :

.umbrella .shaft::after {
    box-sizing: border-box;
    width: 4em;
    height: 2.5em;
    border: 1em solid #333;
    top: 100%;
    left: calc(50% - 4em + 1em / 2);
    border-radius: 0 0 2.5em 2.5em;
    border-top: none;
}
Copier après la connexion

À ce stade, le parapluie est ouvert. Ensuite, dessinez la forme du parapluie lorsqu'il est fermé par déformation.
Fermez d'abord la verrière en la comprimant dans le sens horizontal et en l'étirant dans le sens vertical :

.umbrella .canopy {
    transform-origin: top;
    transform: scale(0.08, 4);
}
Copier après la connexion

Cachez la partie inférieure de la verrière :

.umbrella .canopy::after {
    transform: scaleY(0);
}
Copier après la connexion

Laissez le inclinaison du parapluie, car le parapluie vertical est un peu terne, alors ajoutez un peu de changement :

.umbrella {
    transform: rotate(-30deg);
}
Copier après la connexion

À ce stade, le parapluie ressemble à ce qu'il est lorsqu'il est fermé. Ensuite, il doit être transformé en bascule. contrôle. .
Ajoutez un contrôle checkbox dans le dom :

<input>
<figure>
    <!-- 略 -->
</figure>
Copier après la connexion

Réglez le contrôle pour qu'il soit aussi grand que le parapluie et placez-le au-dessus du calque du parapluie :

.toggle {
    position: absolute;
    filter: opacity(0);
    width: 25em;
    height: 26em;
    font-size: var(--font-size);
    cursor: pointer;
    z-index: 2;
}
Copier après la connexion

checkbox L'état non sélectionné du champ correspond à l'apparence du parapluie à la fermeture, qui est l'apparence actuelle du parapluie, il vous suffit donc de préciser l'apparence du parapluie à l'ouverture correspondant à l'apparence sélectionnée. état du contrôle. La fermeture du parapluie étant obtenue par déformation de plusieurs éléments, le passage à l'état ouvert du parapluie annule la déformation.
Tout d'abord, laissez le parapluie avancer :

.toggle:checked ~ .umbrella {
    transform: rotate(0deg);
}
Copier après la connexion

Puis ouvrez le couvercle du parapluie :

.toggle:checked ~ .umbrella .canopy {
    transform: scale(1, 1);
}
Copier après la connexion

Montrez ensuite la partie inférieure du couvercle du parapluie :

.toggle:checked ~ .umbrella .canopy::after {
    transform: scaleY(1);
}
Copier après la connexion

Enfin, définissez les effets d'assouplissement des éléments ci-dessus :

.umbrella,
.umbrella .canopy,
.umbrella .canopy::after {
    transition: 0.3s cubic-bezier(0.5, -0.25, 0.5, 1.25);
}
Copier après la connexion

Vous avez terminé !


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal