マテリアルデザインのCSSコンポーネント「Matter」のCSSローディングスピナーの動きが求めていたものに近かったのでテストとして少しカスタマイズしてみました。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Document</title>
<link rel="stylesheet" href="https://yarnpkg.com/en/package/normalize.css">
<style>
*,*::before,*::after {
box-sizing: inherit;
}
body {
box-sizing: border-box;
}
/* spinner */
.loading-spinner {
overflow: hidden;
width: 4em;
height: 4em;
border: none;
border-radius: 50%;
background-color: transparent;
color: #00f;
font-size: 1em;
-webkit-mask-image: linear-gradient(transparent 50%, black 50%), linear-gradient(to right, transparent 50%, black 50%);
mask-image: linear-gradient(transparent 50%, black 50%), linear-gradient(to right, transparent 50%, black 50%);
animation: loading-spinner-mask 6s infinite cubic-bezier(0.3, 0.6, 1, 1);
}
.loading-spinner::before {
display: block;
width: 100%;
height: 100%;
border: solid 0.357em currentColor;
border-right-color: transparent;
border-radius: 50%;
background-color: transparent;
content: "";
animation: loading-spinner 0.75s infinite linear alternate;
}
:-ms-lang(x), .loading-spinner::before {/* hack for IE11 */
animation: none;
}
@keyframes loading-spinner-mask {
0% {
transform: rotate(0deg);
}
12.5% {
transform: rotate(180deg);
}
25% {
transform: rotate(630deg);
}
37.5% {
transform: rotate(810deg);
}
50% {
transform: rotate(1260deg);
}
62.5% {
transform: rotate(1440deg);
}
75% {
transform: rotate(1890deg);
}
87.5% {
transform: rotate(2070deg);
}
100% {
transform: rotate(2520deg);
}
}
@keyframes loading-spinner {
0% {
border-left-color: transparent;
border-bottom-color: transparent;
border-top-color: currentColor;
transform: rotate(-30deg);
}
29.4% {
border-left-color: transparent;
}
29.41% {
border-left-color: currentColor;
}
64.7% {
border-bottom-color: transparent;
}
64.71% {
border-bottom-color: currentColor;
}
100% {
border-left-color: currentColor;
border-bottom-color: currentColor;
transform: rotate(225deg);
}
}
</style>
</head>
<body>
<div class="loading-spinner"></div>
</body>
</html>
実際に表示される円とマスクの絶妙な時間差が参考になります。
動きを研究してオリジナルのローダーアニメーションも作ってみたいですね。
参考
- Matter
- Pure CSS Material Components Showcase
- Pure CSS Material Circular Progress
- Animated Google Loader with SVG and CSS
以上、ありがとうございました。