Jadual Kandungan
Satu perkara terakhir ...
Rumah hujung hadapan web tutorial css Gunakan dan gunakan semula segala -galanya dalam SVG ... walaupun animasi!

Gunakan dan gunakan semula segala -galanya dalam SVG ... walaupun animasi!

Apr 12, 2025 am 09:36 AM

Gunakan dan gunakan semula segala -galanya dalam SVG ... walaupun animasi!

Jika anda sudah biasa dengan animasi SVG dan CSS dan mula bekerja dengan mereka, berikut adalah beberapa idea yang mungkin anda ingin ingat sebelum melompat ke dalam pekerjaan. Artikel ini akan mempelajari bagaimana untuk membina dan mengoptimumkan kod anda dengan elemen, pembolehubah CSS dan animasi CSS.

Bahagian 1: Elemen SVG

Jika anda seorang pemaju yang suka menyimpan kod anda kering atau peminat besar pembolehubah SASS/CSS, ada peluang yang baik bahawa anda akan menyukai tag ini.

Katakan anda mempunyai elemen yang diulangi berkali -kali dalam grafik anda. Daripada mempunyai bahagian kompleks kod anda yang diulangi berkali -kali dalam SVG anda, anda boleh menentukan bahagian ini sekali dan kemudian mengklonkannya di tempat lain dalam dokumen anda dengan elemen . Ini bukan sahaja akan mengurangkan sejumlah besar kod, tetapi juga akan menjadikan markup anda lebih mudah dan mudah dimanipulasi.

Untuk mula melaksanakan elemen , pergi ke SVG anda dan ikuti langkah -langkah ini:

  1. Kenal pasti bahagian kod yang anda mahu klon
  2. Tambahkan ID ke bahagian itu
  3. Pautkannya di dalam tag anda seperti ini:

Itu sahaja! Klon baru anda sudah siap, kini anda boleh menukar atributnya (contohnya kedudukan X dan Y) agar sesuai dengan keperluan anda.

Mari kita menyelam ke dalam contoh yang sangat mudah

Saya ingin berkongsi kes sebenar ini di mana saya perlu menghidupkan kiub besar yang diperbuat daripada unit kiub kecil. (Bayangkan kiub Rubik klasik.)

Kami akan mulakan dengan melukis unit kiub dalam SVG menggunakan bentuk asas dan mengubah:

 <svg viewbox=" -130 -20 300 100">
  <g>
    <rect width="21" ketinggian="24" transform="skewy (30)"></rect>
    <rect width="21" ketinggian="24" transform="Skewy (-30) Terjemahan (21 24.3)"></rect>
    <rect width="21" height="21" transform="Skala (1.41, .81) Putar (45) Terjemahan (0 -21)"></rect>
  </g>
</svg>
Salin selepas log masuk

Perhatikan bahawa bentuk dikumpulkan dalam elemen supaya kita dapat menambah ID ke seluruh angka.

Seterusnya, mari kita bina pengklonan kiub yang lebih besar unit ini. Pertama, kita perlu membungkus kiub dari contoh sebelumnya di dalam tag di dalam SVG. Dalam elemen kita boleh meletakkan apa sahaja yang kita mahu gunakan semula, yang boleh menjadi satu bentuk, satu kumpulan, kecerunan .. hampir mana -mana elemen SVG. Mereka tidak akan menjadikan mana -mana melainkan jika kita menggunakannya di luar tag ini.

Kemudian kita boleh menghubungkan unit seberapa banyak yang kita mahu menggunakan IDnya dan menukar kedudukan X dan Y pada setiap klon seperti ini:

 <gunakan xlink: href="#cube" x="142" y="124"></gunakan>
<gunakan xlink: href="#cube" x="100" y="124"></gunakan>
Salin selepas log masuk

Sekarang kita perlu meletakkan setiap kiub mengingati bahawa elemen terakhir akan muncul di bahagian depan, selepas itu kita akan mempunyai kiub besar pertama kita siap!

XLink: HREF ditutup sejak SVG2, tetapi lebih baik menggunakannya untuk tujuan keserasian. Dalam pelayar moden, anda hanya boleh menggunakan HREF tetapi saya mengujinya di Safari dan pada masa penulisan tidak berfungsi di sana. Jika anda menggunakan xlink: href pastikan anda memasukkan ruang nama ini dalam tag SVG anda: xmlns: xlink = "http://www.w3.org/1999/xlink" (anda tidak perlu jika anda memutuskan untuk menggunakan HREF).

Bahagian 2: Menggunakan pembolehubah CSS untuk menggunakan gaya yang berbeza untuk grafik yang digunakan semula

Saya memilih warna utama untuk kiub, yang lebih ringan dan naungan yang lebih gelap untuk sisi dan warna strok. Tetapi bagaimana jika kita mahu membuat kiub kedua warna yang berbeza?

Kita boleh menggantikan pengisian dan strok dengan pembolehubah CSS untuk menjadikan atribut ini lebih fleksibel. Dengan cara itu, kami akan dapat menggunakan semula unit kiub yang sama dengan palet lain (bukannya menentukan unit kedua dengan warna yang berbeza untuk kiub kedua).

Mengapa tidak menambah kelas ke kiub baru dan menukar warna isi dengan CSS? Kami akan berbuat demikian, tetapi pertama, cuba periksa elemen . Anda akan perasan ia menjadikan dalam bayang -bayang dom. Yang bermaksud ia tidak terdedah kepada skrip dan gaya, seperti unsur -unsur dalam DOM biasa. Apa sahaja nilai yang anda tentukan dalam angka di dalam akan diwarisi oleh semua contohnya dan anda tidak akan dapat menulis semula mereka dengan CSS. Tetapi jika anda menggantikan nilai -nilai tersebut dengan pembolehubah, maka anda dapat mengawalnya dalam CSS.

Dalam unit kiub kami, kami akan melalui setiap sisi dan menggantikan nilai mengisi dan strok dengan nama pembolehubah semantik.

Sebagai contoh, ini:

 <rect fill="#00affa" stroke="#0079AD"></rect>
Salin selepas log masuk

... boleh digantikan dengan ini:

 <rect fill="var (-mainColor)" stroke="var (-strokecolor)"></rect>
Salin selepas log masuk

Dari sini, kita mesti menduplikasi SVG untuk membina kiub kedua. Walau bagaimanapun, kita tidak perlu menduplikasi jika kita menyimpan kedua -duanya dalam dokumen yang sama. Kami boleh menambah kelas kepada setiap SVG dan mengawal palet warna melalui CSS, mentakrifkan semula nilai pembolehubah.

Mari buat palet untuk kiub biru dan satu lagi untuk kiub merah jambu:

 .blue-cube {
  -Maincolor: #009CDE;
  --strokecolor: #0079AD;
  --lightColor: #00affa;
  -DarkColor: #008BC7;
}

.pink-cube {
  -Maincolor: #DE0063;
  --StrokeColor: #AD004E;
  --lightColor: #FA0070;
  -DarkColor: #C7005A;
}
Salin selepas log masuk

Dengan cara ini, kita boleh menambah seberapa banyak kiub yang kita mahu dan menukar semua warna dari satu tempat.

Bahagian 3: Menggunakan semula animasi

Idea untuk contoh ini adalah untuk memecahkan kiub pada hover - sesuatu seperti pandangan yang meletup sehingga beberapa keping akan bergerak dari pusat apabila kita meletakkan kursor di atas kiub.

Mari kita mulakan dengan menentukan dua pergerakan, satu untuk setiap paksi: bergerak Y dan bergerak X. Dengan membahagikan animasi dalam pergerakan, kita akan dapat menggunakannya semula dalam setiap kiub. Animasi akan terdiri daripada menggerakkan kiub dari kedudukan awalnya hingga 30px atau 50px dalam satu arah. Kita boleh menggunakan transform translate (x atau y) untuk mencapai itu. Contohnya:

 @keyframes Movex {
  ke {transform: translateX (-35px); }
}
Salin selepas log masuk

Tetapi jika kita mahu dapat menggunakan semula animasi ini, lebih baik menggantikan nilai angka dengan pembolehubah, seperti ini:

 @keyframes Movex {
  kepada {transform: translateX (var (-diterjemahkan, 35px)); }
}
Salin selepas log masuk

Jika pembolehubah tidak ditakrifkan, nilai lalai akan menjadi 35px.

Sekarang kita memerlukan sekurang -kurangnya satu kelas untuk mengikat animasi. Walau bagaimanapun, dalam kes ini, kita memerlukan dua kelas untuk memindahkan kiub dalam paksi-x: .m-kiri dan .m-kanan.

 .m-kiri, .m-kanan { 
  Animasi: 2S Movex Alternate Infinite; 
}
Salin selepas log masuk

Bagi kiub untuk bergerak ke kiri, kita memerlukan nilai negatif, tetapi kita juga boleh mengisytiharkan nombor yang berbeza. Kita boleh menentukan pemboleh ubah kita seperti ini di dalam kelas .m-kiri:

 .m -left {--translate: -50px; }
Salin selepas log masuk

Apa yang berlaku di sini ialah kita menyatakan bahawa, apabila kita menambah kelas .m-kiri ke satu elemen, ini akan memainkan Animation Movex (yang ditakrifkan dalam @Keyframes) yang akan bertahan dua saat untuk diterjemahkan dalam paksi x dan mencapai kedudukan baru iaitu -50px tersisa. Kemudian, animasi menggantikan arahan supaya ia bergerak dari kedudukan terakhir dan mengambil dua saat lagi untuk pergi ke keadaan asalnya. Dan sebagainya, kerana ia adalah gelung tak terhingga.

Kita boleh mengisytiharkan pembolehubah lain ke kelas .m-kanan tetapi jika kita tidak, ingatlah bahawa ia akan mengambil 35px yang kita nyatakan pada mulanya.

Nilai animasi-play-play lalai berjalan tetapi mungkin kita tidak mahu kiub bergerak sepanjang masa. Ia akan menjadi sangat mengganggu dan menjengkelkan untuk digunakan di tapak dengan beberapa kandungan berdekatan. Oleh itu, mari kita cuba memainkan animasi hanya pada hover dengan menambahkan ini:

 svg: hover .m-left {
  Animasi: 2S Movex Alternate Infinite;
}
Salin selepas log masuk

Anda boleh mencubanya sendiri dan akan mendapati bahawa animasi melompat dengan cepat ke keadaan awal setiap kali kita meletakkan kursor keluar dari kiub. Untuk mengelakkannya, kita boleh menambah nilai yang dijeda pada akhir animasi secara langsung:

 .m-left {
  Animasi: 2S Movex Alternate Infinite Jeda;
}
Salin selepas log masuk

Sekarang animasi dijeda tetapi akan berjalan di hover dengan menambahkan garis CSS ini:

 svg: hover * { 
  Animasi-Play-State: Running; 
}
Salin selepas log masuk

Kita boleh memohon setiap kelas untuk elemen yang berbeza dalam SVG. Dalam kiub biru pertama, kita bergerak kiub tunggal; Pada yang kedua, kami menggunakan kelas tersebut kepada kumpulan kiub.

Satu perkara terakhir ...

Tidak sampai kemudian saya menyedari bahawa saya dapat menggunakan semula satu unit untuk membina mereka semua. Saya bekerja di kubus kecil untuk menjadikannya cukup isometrik supaya ia dapat diselaraskan dengan mudah dengan yang lain di sebelahnya. Pada ketika ini, unit saya adalah , tetapi saya memutuskan untuk menggantikannya dengan bentuk SVG untuk mengurangkan kod dan mendapatkan markup bersih.

Saya belajar bahawa lebih baik mengambil sedikit masa untuk menganalisis apa yang boleh dilakukan dengan SVG sebelum melukis setiap bentuk dan berurusan dengan jumlah kod yang besar. Ia mungkin mengambil lebih banyak masa pada mulanya, tetapi akan menjimatkan banyak masa dan usaha dalam jangka masa panjang.

Atas ialah kandungan terperinci Gunakan dan gunakan semula segala -galanya dalam SVG ... walaupun animasi!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1653
14
Tutorial PHP
1251
29
Tutorial C#
1224
24
Kad yang disusun dengan kedudukan melekit dan sasaran sass Kad yang disusun dengan kedudukan melekit dan sasaran sass Apr 03, 2025 am 10:30 AM

Pada hari yang lain, saya melihat sedikit ini sangat indah dari laman web Corey Ginnivan di mana koleksi kad timbunan di atas satu sama lain semasa anda menatal.

Fon Font Google Fon Fon Font Google Fon Apr 09, 2025 am 10:42 AM

Saya melihat Font Google melancarkan reka bentuk baru (tweet). Berbanding dengan reka bentuk besar yang terakhir, ini terasa lebih berulang. Saya hampir tidak dapat memberitahu perbezaannya

Cara membuat pemasa undur animasi dengan HTML, CSS dan JavaScript Cara membuat pemasa undur animasi dengan HTML, CSS dan JavaScript Apr 11, 2025 am 11:29 AM

Pernahkah anda memerlukan pemasa undur dalam projek? Untuk sesuatu seperti itu, mungkin semula jadi untuk mencapai plugin, tetapi sebenarnya lebih banyak lagi

Panduan Atribut Data HTML Panduan Atribut Data HTML Apr 11, 2025 am 11:50 AM

Semua yang anda ingin tahu mengenai atribut data dalam HTML, CSS, dan JavaScript.

Kenapa kawasan -kawasan yang dikurangkan ungu di susun atur flex tersilap dianggap sebagai 'ruang limpahan'? Kenapa kawasan -kawasan yang dikurangkan ungu di susun atur flex tersilap dianggap sebagai 'ruang limpahan'? Apr 05, 2025 pm 05:51 PM

Soalan mengenai kawasan slash ungu dalam susun atur flex Apabila menggunakan susun atur flex, anda mungkin menghadapi beberapa fenomena yang mengelirukan, seperti dalam alat pemaju (D ...

Bagaimana untuk memilih elemen kanak -kanak dengan item nama kelas pertama melalui CSS? Bagaimana untuk memilih elemen kanak -kanak dengan item nama kelas pertama melalui CSS? Apr 05, 2025 pm 11:24 PM

Apabila bilangan elemen tidak ditetapkan, bagaimana untuk memilih elemen anak pertama nama kelas yang ditentukan melalui CSS. Semasa memproses struktur HTML, anda sering menghadapi unsur yang berbeza ...

Bukti konsep untuk menjadikan sass lebih cepat Bukti konsep untuk menjadikan sass lebih cepat Apr 16, 2025 am 10:38 AM

Pada permulaan projek baru, kompilasi SASS berlaku dalam sekejap mata. Ini terasa hebat, terutamanya apabila ia dipasangkan dengan BrowserSync, yang dimuat semula

See all articles