current position:Home>[animation Xiaole] HTML + CSS pea eating animation 073

[animation Xiaole] HTML + CSS pea eating animation 073

2021-08-27 04:52:37 Haibang Pro

This is my participation 8 The fourth of the yuegengwen challenge 23 God , Check out the activity details :8 Yuegengwen challenge

Preface

Hello! buddy !

Thank you very much for reading Haihong's article , If there are mistakes in the text , You are welcome to point out ~

 

Self introduction. ଘ(੭ˊᵕˋ)੭

nickname : Sea boom

label : Program the ape |C++ player | Student

brief introduction : because C Language and programming , Then I turned to computer science , Lucky to have won the National Award 、 Provincial awards, etc , It has been insured . Currently learning C++/Linux( It's really, really hard ~)

Learning experience : Solid foundation + Take more notes + Knock more code + Think more + Learn English well !

  【 Animation Xiaole 】 It's boring to study and live at ordinary times , Inadvertently on some pages 、 Application transition / There's a lot of interest in loading animation , I want to know how to achieve it ? Learn how to use it in your spare time css Achieve some simple animation effects , This article is only for your study notes , Record your study and life , Try to understand the principles of animation , A lot of “ eliminate ” Animation !

Effect display

 Insert picture description here

Demo Code

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Document</title>
</head>
<body>
    <section><span></span></section>
</body>
</html>
 Copy code 

CSS

html,body{
  margin: 0;
  height: 100%;
}
body{
  display: flex;
  justify-content: center;
  align-items: center;
  background: #263238;
}
section {
    width: 650px;
    height: 300px;
    padding: 10px;
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    /*  The red border is just a reminder  */
    border: 2px solid red;
}

span{
    display: inline-block;
    position: relative;
    border-radius: 50%;
    border-top: 48px white solid;
    border-bottom: 48px white solid;
    border-left: 48px white solid;
    border-right: 48px transparent solid;
    color: white;
    animation: c  .5s linear infinite ;
}
@keyframes c {
  0%{
    box-shadow: 120px 0px 0 -40px rgba(255, 255, 255, .5),
    100px 0px 0 -40px rgba(255, 255, 255, .75),
    80px 0px 0 -40px rgba(255, 255, 255, 1);
  }
  100%{
    box-shadow: 100px 0px 0 -40px rgba(255, 255, 255, .5),
    80px 0px 0 -40px rgba(255, 255, 255, .75),
    60px 0px 0 -40px rgba(255, 255, 255, 1);
  }
 }
span::before{
  position: absolute;
  content: '';
  display: inline-block;
  top: -48px;
  left: -48px;
  border-top: 48px white solid;
  border-bottom: 48px transparent solid;
  border-left: 48px transparent solid;
  border-right: 48px transparent solid;
  border-radius: 50%;
   animation: a .25s linear infinite alternate;
}

span::after{
  position: absolute;
  content: '';
  top: -48px;
  left: -48px;
  border-top: 48px transparent solid;
  border-bottom: 48px white solid;
  border-left: 48px transparent solid;
  border-right: 48px transparent solid;
  border-radius: 50%;
   animation: b .25s linear infinite alternate;
}

@keyframes a {
  0% { transform: rotate(45deg) }
  100% { transform: rotate(0deg)
  }
}

@keyframes b {
  0% { transform: rotate(-45deg) }
  100% { transform: rotate(0deg)
  }
}
 Copy code 

The principle,

step 1

Use span label , Set to

  • Relative positioning
  • On 、 Next 、 The left border is 48px white Solid line solid
  • The right border is 48px transparent Solid line solid
span {
	position: relative;
	border-top: 48px white solid;
	border-bottom: 48px white solid;
	border-left: 48px white solid;
	border-right: 48px transparent solid;
}
 Copy code 

The effect is as follows  Insert picture description here

step 2

span Fillet

span {
	border-radius: 50%;
}
 Copy code 

The effect is as follows

 Insert picture description here

step 3

by span Add three shadows

	box-shadow: 120px 0px 0 -40px rgba(255, 255, 255, .5), /* shadow 1*/
				100px 0px 0 -40px rgba(255, 255, 255, .75), /* shadow 2*/
				80px 0px 0 -40px rgba(255, 255, 255, 1);/* shadow 3*/
 Copy code 

The effect is as follows

 Insert picture description here

step 4

by span Add animation to the three shadows of

The animation is very simple , It's three balls moving horizontally from the right to the left

It just needs to be modified box-shadow The horizontal offset in is done


span {
	animation: c 1s linear infinite;
}
 Copy code 
@keyframes c {
	0% {
		box-shadow: 120px 0px 0 -40px rgba(255, 255, 255, .5), 
					100px 0px 0 -40px rgba(255, 255, 255, .75), 
					80px 0px 0 -40px rgba(255, 255, 255, 1);
	}
	100% {
		box-shadow: 100px 0px 0 -40px rgba(255, 255, 255, .5), 
					80px 0px 0 -40px rgba(255, 255, 255, .75), 
					60px 0px 0 -40px rgba(255, 255, 255, 1);
	}
}
 Copy code 

 Insert picture description here The effect is as follows

 Insert picture description here

step 5

Use span::before and span::after Act as two parts of the mouth closure

The first set span::before

Set to

  • Absolute positioning (top: -48px left: -48px)
  • The top border is :48px red solid
  • Next 、 Left 、 Right margin :48px transparent solid;
span::before {
	position: absolute;
	content: '';
	top: -48px;
	left: -48px;
	border-top: 48px red solid;
	border-bottom: 48px transparent solid;
	border-left: 48px transparent solid;
	border-right: 48px transparent solid;
}
 Copy code 

The effect is as follows

 Insert picture description here Recanalization

span::before {
	border-radius: 50%;
}
 Copy code 

The effect is as follows

 Insert picture description here by span::before Add animation

The animation effect is described as : All the way around the center of the circle 0-45 degree

span::before {
	animation: a .5s linear infinite alternate;
}
 Copy code 
@keyframes a {
	0% {
		transform: rotate(45deg)
	}
	100% {
		transform: rotate(0deg)
	}
}
 Copy code 

The effect is as follows

 Insert picture description here

Empathy Use span::after

Set to

  • Absolute positioning ( top: -48px left: -48px)
  • Under the frame :48px red solid;
  • On 、 Left 、 Right margin :48px transparent solid;
  • Fillet :border-radius: 50%;
span::after {
	position: absolute;
	content: '';
	top: -48px;
	left: -48px;
	border-top: 48px transparent solid;
	border-bottom: 48px red solid;
	border-left: 48px transparent solid;
	border-right: 48px transparent solid;
	border-radius: 50%;
}
 Copy code 

The effect is as follows

 Insert picture description here Again span::after Add and before The same effect of animation

span::after {
	animation: b .5s linear infinite alternate;
}
 Copy code 
@keyframes b {
	0% {
		transform: rotate(-45deg)
	}
	100% {
		transform: rotate(0deg)
	}
} 
 Copy code 

The effect is as follows

 Insert picture description here

step 6

span::after、span::before The color in the border is red Change to white

Last span、span::after、span::before Three animations are shown together

Get the end result

 Insert picture description here

Conclusion

The article is only for study notes , Record from 0 To 1 A process of . I hope it will be of some help to you , If you have any mistakes, you are welcome to correct them ~

I'm Haihong ଘ(੭ˊᵕˋ)੭, If you think it's ok , Please like it

Writing is not easy to ,「 give the thumbs-up 」+「 Collection 」+「 forward 」

Thank you for your support ️

 Insert picture description here

copyright notice
author[Haibang Pro],Please bring the original link to reprint, thank you.
https://en.qdmana.com/2021/08/20210827045235982w.html

Random recommended