Saya mencoba membuat elipsis beranimasi, dan bertanya-tanya apakah itu mungkin dengan animasi CSS ...
Jadi mungkin seperti itu
Loading...
Loading..
Loading.
Loading...
Loading..
Dan pada dasarnya teruskan seperti itu. Ada ide?
Edit: seperti ini: http://playground.magicrising.de/demo/ellipsis.html
css
css-animations
Rey
sumber
sumber
Jawaban:
Bagaimana dengan versi jawaban @ xec yang sedikit dimodifikasi : http://codepen.io/thetallweeks/pen/yybGra
HTML
Satu kelas ditambahkan ke elemen:
<div class="loading">Loading</div>
CSS
Animasi yang menggunakan
steps
. Lihat dokumen MDN.loading:after { overflow: hidden; display: inline-block; vertical-align: bottom; -webkit-animation: ellipsis steps(4,end) 900ms infinite; animation: ellipsis steps(4,end) 900ms infinite; content: "\2026"; /* ascii code for the ellipsis character */ width: 0px; } @keyframes ellipsis { to { width: 20px; } } @-webkit-keyframes ellipsis { to { width: 20px; } }
Jawaban @ xec memiliki lebih banyak efek slide-in pada titik-titik, sementara ini memungkinkan titik-titik tersebut muncul secara instan.
sumber
margin-right
(atau padding?) Dari20px
dan menganimasikannya0px
jika Anda tidak ingin teks Anda bergeser selama animasi.1em
di tempat20px
mungkin bekerja lebih baik untuk CSS dalam jawaban iniAnda dapat mencoba menggunakan
animation-delay property
waktu dan setiap karakter elipsis. Dalam hal ini saya telah meletakkan setiap karakter elipsis<span class>
sehingga saya dapat menganimasikannya secara terpisah.Saya membuat demo , yang tidak sempurna, tetapi setidaknya menunjukkan apa yang saya maksud :)
Kode dari contoh saya:
HTML
Loading<span class="one">.</span><span class="two">.</span><span class="three">.</span>
CSS
.one { opacity: 0; -webkit-animation: dot 1.3s infinite; -webkit-animation-delay: 0.0s; animation: dot 1.3s infinite; animation-delay: 0.0s; } .two { opacity: 0; -webkit-animation: dot 1.3s infinite; -webkit-animation-delay: 0.2s; animation: dot 1.3s infinite; animation-delay: 0.2s; } .three { opacity: 0; -webkit-animation: dot 1.3s infinite; -webkit-animation-delay: 0.3s; animation: dot 1.3s infinite; animation-delay: 0.3s; } @-webkit-keyframes dot { 0% { opacity: 0; } 50% { opacity: 0; } 100% { opacity: 1; } } @keyframes dot { 0% { opacity: 0; } 50% { opacity: 0; } 100% { opacity: 1; } }
sumber
Bahkan solusi yang lebih sederhana, bekerja dengan cukup baik!
<style> .loading:after { display: inline-block; animation: dotty steps(1,end) 1s infinite; content: ''; } @keyframes dotty { 0% { content: ''; } 25% { content: '.'; } 50% { content: '..'; } 75% { content: '...'; } 100% { content: ''; } } </style> <div class="loading">Loading</div>
Baru saja mengedit konten dengan animasi alih-alih menyembunyikan beberapa titik ...
Demo di sini: https://jsfiddle.net/f6vhway2/1/
Edit: Terima kasih kepada @BradCollins karena telah menunjukkan bahwa
content
itu bukan properti yang dapat dianimasikan.https://www.w3.org/TR/css3-transitions/#animatable-css
Jadi ini adalah solusi hanya WebKit / Blink / Electron. (Tapi ini juga berfungsi di versi FF saat ini)
sumber
content
. Untuk mendapatkan irama animasi yang merata, Anda harus menggunakansteps(1)
dan menentukan satu bingkai kunci tambahan. Fungsi langkah menentukan jumlah langkah di antara bingkai kunci dan karena kami menentukan setiap bingkai, kami hanya ingin satu langkah di antara mereka. codepen.io/anon/pen/VmEdXjcontent
properti. (Tidak tahu tentang Edge.)Jawaban singkatnya adalah "tidak juga". Namun, Anda dapat bermain-main dengan animasi lebar dan luapan tersembunyi, dan mungkin mendapatkan efek yang "cukup dekat". (kode di bawah ini disesuaikan hanya untuk firefox, tambahkan prefiks vendor sesuai kebutuhan).
html
<div class="loading">Loading</div>
css
.loading:after { overflow: hidden; display: inline-block; vertical-align: bottom; -moz-animation: ellipsis 2s infinite; content: "\2026"; /* ascii code for the ellipsis character */ } @-moz-keyframes ellipsis { from { width: 2px; } to { width: 15px; } }
demo: http://jsfiddle.net/MDzsR/1/
edit
Tampaknya chrome mengalami masalah dengan menganimasikan elemen semu. Perbaikan yang mudah adalah membungkus elipsis dalam elemennya sendiri. Lihat http://jsfiddle.net/MDzsR/4/
sumber
-webkit
dari-moz
).Tambahan terlambat tetapi saya menemukan cara untuk melakukan ini yang mendukung teks tengah.
<element>:after { content: '\00a0\00a0\00a0'; animation: progress-ellipsis 5s infinite; } @keyframes progress-ellipsis { 0% { content: '\00a0\00a0\00a0'; } 30% { content: '.\00a0\00a0'; } 60% { content: '..\00a0'; } 90% { content: '...'; } }
sumber
Anda dapat menganimasikan
clip
(atau lebih baikclip-path
jika Anda tidak membutuhkan dukungan IE)div { position: relative; display: inline-block; font-size: 1.4rem; } div:after { position: absolute; margin-left: .1rem; content: ' ...'; display: inline-block; animation: loading steps(4) 2s infinite; clip: rect(auto, 0px, auto, auto); } @keyframes loading { to { clip: rect(auto, 20px, auto, auto); } }
<div>Loading</div>
sumber
Sebenarnya ada cara CSS murni untuk melakukan ini.
Saya mendapat contoh dari CSS Tricks, tetapi membuatnya juga didukung di Internet Explorer (saya telah mengujinya di 10+).
Periksa Demo: http://jsfiddle.net/Roobyx/AT6v6/2/
HTML:
<h4 id="searching-ellipsis"> Searching <span>.</span> <span>.</span> <span>.</span> </h4>
CSS:
@-webkit-keyframes opacity { 0% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); opacity: 1; } 100% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; } } @-moz-keyframes opacity { 0% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); opacity: 1; } 100% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; } } @-webkit-keyframes opacity { 0% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); opacity: 1; } 100% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; } } @-moz-keyframes opacity { 0% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); opacity: 1; } 100% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; } } @-o-keyframes opacity { 0% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); opacity: 1; } 100% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; } } @keyframes opacity { 0% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); opacity: 1; } 100% { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; } } #searching-ellipsis span { -webkit-animation-name: opacity; -webkit-animation-duration: 1s; -webkit-animation-iteration-count: infinite; -moz-animation-name: opacity; -moz-animation-duration: 1s; -moz-animation-iteration-count: infinite; -ms-animation-name: opacity; -ms-animation-duration: 1s; -ms-animation-iteration-count: infinite; } #searching-ellipsis span:nth-child(2) { -webkit-animation-delay: 100ms; -moz-animation-delay: 100ms; -ms-animation-delay: 100ms; -o-animation-delay: 100ms; animation-delay: 100ms; } #searching-ellipsis span:nth-child(3) { -webkit-animation-delay: 300ms; -moz-animation-delay: 300ms; -ms-animation-delay: 300ms; -o-animation-delay: 300ms; animation-delay: 300ms; }
sumber
-webkit-keyframes
hanya akan berlaku untuk webkit, dan di dalamnya Anda memiliki kode khusus IE. Kode ini hanya membuang-buang ruang.Inilah solusi saya dengan css murni https://jsfiddle.net/pduc6jx5/1/ dijelaskan: https://medium.com/@lastseeds/create-text-ellipsis-animation-with-pure-css-7f61acee69cc
scss
.dot1 { animation: visibility 3s linear infinite; } @keyframes visibility { 0% { opacity: 1; } 65% { opacity: 1; } 66% { opacity: 0; } 100% { opacity: 0; } } .dot2 { animation: visibility2 3s linear infinite; } @keyframes visibility2 { 0% { opacity: 0; } 21% { opacity: 0; } 22% { opacity: 1; } 65% { opacity: 1; } 66% { opacity: 0; } 100% { opacity: 0; } } .dot3 { animation: visibility3 3s linear infinite; } @keyframes visibility3 { 0% { opacity: 0; } 43% { opacity: 0; } 44% { opacity: 1; } 65% { opacity: 1; } 66% { opacity: 0; } 100% { opacity: 0; } }
html
Loading <span class="dot dot1">.</span><span class="dot dot2">.</span><span class="dot dot3">.</span>
sumber