CSS Pengguliran Paralaks yang Menyenangkan untuk Matterday
totosgp

CSS Pengguliran Paralaks yang Menyenangkan untuk Matterday

Minggu lalu kami meluncurkan proyek kecil yang disebut Matterday. Ternyata beralih ke Netlify menyelamatkan tim pengembangan satu hari dalam seminggu per pengembang. Itu banyak waktu! Dan kami berharap orang-orang dapat menghabiskan waktu itu untuk hal-hal yang penting bagi mereka.

Bagian naratif situs mendorong orang untuk membayangkan apa yang dapat mereka lakukan dengan waktu itu — apakah itu perubahan kecil pada rutinitas sehari-hari atau melakukan perubahan besar. Seperti yang Anda ketahui, situs web yang penuh narasi hanya meminta beberapa efek gulir yang menyenangkan. Dan karena saya adalah saya, saya ingin melihat apa yang dapat saya lakukan hanya dengan CSS.

Saya mulai dengan konsep yang saya gunakan untuk versi andyet.com sebelumnya yang menggunakan pemosisian tetap dan indeks-z untuk membuat karya seni gulir berlapis.

Kali ini saya ingin menjelajahi gagasan tentang lapisan yang mengaburkan dan mengungkapkan hal-hal untuk menciptakan ilusi yang berbeda dan untuk bereksperimen dengan kecepatan gulir.

Membuat lapisan HTML dan CSS

Dengan CSS saja Anda tidak dapat menginformasikan halaman di mana Anda berada dengan hal-hal seperti posisi gulir dan pemicu (belum juga). Elemen tidak bisa diberi tahu bagaimana cara berubah; mereka secara efektif dalam satu keadaan selamanya. Anda secara teknis dapat memiliki elemen yang dianimasikan dalam satu lingkaran, tetapi Anda tidak akan dapat mengontrol Kapan dalam urutan seseorang mungkin membuatnya terlihat di viewport mereka. Jadi pelapisan kreatif adalah jalan yang saya ambil untuk mencoba dan membawa beberapa minat tambahan ke visual statis.

Struktur halaman dapat disederhanakan menjadi tiga lapisan utama: .background, .overlaydan .foreground lapisan. Lapisan overlay mencakup “area pandang” persegi panjang bulat di sebelah kiri. Lapisan latar belakang mencakup latar belakang berpola yang ditampilkan melalui lapisan viewport ditambah salinan di sebelah kanan. Dan akhirnya latar depan mencakup potongan-potongan karya seni yang bergulir di atas kedua lapisan sebelumnya.

CSS Pengguliran Paralaks yang Menyenangkan untuk Matterday

diagram isomorfik dari lapisan

Lapisan latar belakang dibagi menjadi dua bagian, dengan karya seni latar belakang di sebelah kiri dan salinan di sebelah kanan. Markupnya terlihat seperti ini:

<section class="the-office">
<div class="background">
<div class="background-container">
<div class="background-artwork"></div>
</div>
<div class="content">
<h3>Watch all 9 seasons of <em>The Office</em> four times through.</h3>
</div>
</div>
</section>

Dan dirender seperti ini (ditampilkan di sini dengan overlay dan latar depan tersembunyi):

situs dibagi menjadi dua bagian, gambar di kiri dan teks di kanan

Saya terus menambahkan bagian dan mereka membuat halaman panjang yang dapat Anda gulir seperti yang Anda harapkan:

Hamparan terbuat dari dua bersarang <div>s. Itu .overlay wadah memiliki position: sticky jadi itu tetap di atas bahkan saat wadahnya bergulir. Ini menggunakan linear-gradient (ditunjukkan pada tangkapan layar berwarna merah) untuk mengaburkan area di atas dan di bawah “area pandang” dan <div> di dalamnya transparan (untuk menunjukkan lapisan latar belakang di bawah). SEBUAH border-radius dan box-shadow memberikan bentuk persegi panjang bulat viewport itu.

diagram yang menunjukkan penempatan overlay

<div class="overlay">
<div></div>
</div>
.overlay 
--body-bg: #0f6a80;
--bg-position: calc(50% - 30vh);
--overlay-w: 35vw;
--overlay-h: 60vh;
width: 50%;
height: 100vh;
position: sticky;
top: 0;
left: 0;
display: grid;
place-content: center;
z-index: 1;
background-image: linear-gradient(to bottom, var(--body-bg) var(--bg-position),
transparent var(--bg-position)),
linear-gradient( to top, var(--body-bg) var(--bg-position),
transparent var(--bg-position));

.overlay div
width: var(--overlay-w);
height: var(--overlay-h);
border-radius: 1em;
box-shadow: 0 0 0 .5em var(--body-bg);

Kami telah membuat sedikit “jendela” untuk latar belakang lewat di bawah ke kiri konten. Gradien latar belakang tetap dan pola titik, meskipun hanya di sisi kanan halaman, membantu kedua sisi terasa kohesif.

Jadi, inilah cara scroll bagian latar belakang dan konten sebelum kita menambahkan lapisan latar depan.

Visual paralaks

Sekarang mari kita lihat potongan latar depan. Sebagian besar bagian menggunakan teknik paralaks CSS menggunakan kombinasi dari position, perspectivedan 3D transform. Ini adalah cara yang cukup dicoba dan benar untuk memiliki elemen berbeda pada gulir halaman dengan kecepatan berbeda. Artikel oleh Keith Clark ini dan demo yang menyertainya sangat bagus untuk membedah cara kerjanya.

Saya tidak bermaksud untuk menduplikasi tutorial Keith di sini, jadi pada tingkat tinggi, apa yang dilakukan CSS adalah memindahkan lapisan ke depan dan ke belakang dalam ruang (dengan translateZ). Ini menciptakan paralaks visual, di mana hal-hal yang lebih jauh di kejauhan bergerak lebih lambat daripada yang dekat dengan Anda (seperti melihat pemandangan lewat di luar jendela mobil).

diagram isomorfik yang menunjukkan skala dan kedalaman untuk lapisan paralaks, dengan lapisan-3 muncul lebih dekat ke penampil dan bergerak lebih cepat

Pengaturan struktur paralaks terlihat seperti ini (sekali lagi, saya mendorong Anda untuk membaca tutorial Keith yang luar biasa):

<div class="parallax">
<section class="parallax-group">
<div class="parallax-layer">
<img />
</div>
</section>
</div>
.parallax 
height: 100vh;
perspective: 300px;

.parallax-group
height: 100vh;
transform-style: preserve-3d;

.parallax-layer
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;

Setelah setiap bagian latar belakang/konten, bagian latar depan ditambahkan dengan kelas .pieces. Markup penuh itu akhirnya terlihat seperti ini:

<section class="parallax-group the-office">
<div class="parallax-layer background">
<div class="background-container">
<div class="background-artwork"></div>
</div>
<div class="content">
<h3>Watch all 9 seasons of <em>The Office</em> four times through.</h3>
</div>
</div>
</section>
<section class="parallax-group pieces the-office-pieces">
<div class="parallax-layer foreground layer-1">
<img src="/images/the-office-jello.svg" width="237" height="148" alt="a stapler stuck in a Jello mold" class="jello" />
</div>
<div class="parallax-layer foreground layer-2">
<img src="/images/paper-airplane.svg" width="173" height="215" alt="paper airplane" class="airplane" />
</div>
<div class="parallax-layer foreground layer-3">
<img src="/images/the-office-mug.svg" width="160" height="145" alt="World’s Best Boss mug" class="mug" />
</div>
<div class="parallax-layer foreground layer-2">
<img src="/images/the-office-beet.svg" width="200" height="274" alt="a beet" class="beet" />
</div>
</section>
<section class="parallax-group space-mountain">
...
</section>

Demo (dan banyak contoh yang mungkin Anda lihat) menggunakan efek paralaks pada bagian lebar penuh yang menciptakan banyak gerakan. Situs Matterday menerapkan paralaks pada karya seni individu untuk memberi mereka perasaan mengambang relatif satu sama lain. Masing-masing gambar diberi “kedalaman” dengan pengaturan yang berbeda translateZ nilai. Agar semuanya dapat dikelola, saya memiliki tiga nilai yang ditetapkan dan ditetapkan ke kelas yang dapat saya terapkan ke elemen individual.

.parallax-layer.layer-1 
transform: translateZ(100px) scale(.71);

.parallax-layer.layer-2
transform: translateZ(175px) scale(.5);

.parallax-layer.layer-3
transform: translateZ(200px) scale(.5);

Untuk menempatkan karya seni di sebelah bagian konten yang didukungnya (yang tepat di atasnya dalam aliran halaman), saya menambahkan margin negatif ke bagian tersebut.

.parallax-group.pieces 
margin-top: -100vh;

Dan kemudian setiap bagian individu di-tweak dan diposisikan di dalam induknya.

.the-office-pieces .mug 
width: 20vw;
transform: rotate(2deg);
margin-left: 25vw;
bottom: -10%;

Saat melapisi elemen seperti ini, Anda harus berhati-hati agar tidak membuat konten apa pun tidak dapat diakses. Salinan pada halaman harus tetap dapat dipilih dengan mouse. Anda bisa menambahkan pointer-events: none ke karya seni sehingga Anda masih dapat mengakses lapisan di bawahnya, tetapi saya memilih untuk membuat bagian latar depan setengah lebar area pandang sehingga tidak tumpang tindih dengan konten sama sekali.

.parallax-group.pieces 
width: 50%;

tangkapan layar yang menunjukkan gambar tidak tumpang tindih dengan teks

Jadi pada akhirnya, paralaks menciptakan efek seperti ini:

Ini menciptakan beberapa gerakan yang bagus dan halus tanpa merasa seperti scrolljacking yang berlebihan atau intens. Selanjutnya saya akan membahas beberapa efek spesifik (dan beberapa pengorbanan).

Susun ulang lapisan CSS untuk efek “fokus”

Untuk bagian narasi “Anda bisa mempertajam fokus Anda,” saya ingin melakukan efek semacam kaca di mana elemen dapat menggulir gambar buram dan memfokuskannya. Saya pikir mungkin saya bisa bersandar pada CSS filter di sini atau mix-blend-mode atau beberapa kombinasi. Tetapi karena latar belakang dan latar depan terpisah, saya harus memikirkannya sedikit berbeda.

Latar belakang diatur seperti biasa, tetapi dengan praktis filter: blur() di atasnya. Saya juga harus scale() itu sedikit demi sedikit untuk menghindari tepi berbulu yang dapat menyebabkan kekaburan CSS.

.focus .background-artwork .focus-shapes 
background-image: url('/images/shapes.svg');
background-size: 130% auto;
background-position: center center;
filter: blur(.6em);
transform: scale(1.3);

Efek lingkaran dibuat dengan dua lapisan latar depan. Yang pertama berisi gambar latar belakang yang sama tetapi tidak kabur dan yang kedua memiliki garis luar biru. Efek yang saya inginkan adalah lingkaran melewati latar belakang dan “fokus” hanya saat berada di atas area pandang. Untuk mencapai ini, saya menerapkan yang lebih rendah z-index ke lingkaran pertama sehingga berada di bawah overlay tetapi masih di atas layer background. Ini kodenya (sedikit disederhanakan):

<section class="parallax-group pieces focus-pieces">
<div class="parallax-layer foreground layer-1">
...
</div>
</section>
.parallax-group.focus-pieces 
z-index: 0;

.parallax-layer.foreground.layer-1
transform: translateZ(100px) scale(.71);

Kedua lapisan latar depan berada pada kedalaman paralaks yang sama (itu translateZ) sehingga mereka bergerak dengan kecepatan yang sama dan menciptakan ilusi interaksi dengan lapisan latar belakang.

Satu cegukan kecil di sini. Safari tidak menyukai ini z-index menipu. Karena itu translateZ pada lapisan latar depan, itu tidak akan memungkinkan wadah untuk duduk di bawah overlay. Sedikit mengecewakan (tetapi saya juga mengerti mengapa itu berperilaku seperti itu). Menyetel ulang translateZ berhasil, tetapi kemudian Anda kehilangan paralaks yang membuatnya terasa sedikit lebih baik. Jadi saya memilih untuk mengatur ulang translateZ hanya untuk Safari dalam kasus ini (Anda dapat melihat kodenya di sini, bukan CSS terbaik yang saya tahu, maaf!).

Menggunakan variasi kecepatan paralaks CSS untuk efek pencetakan tanda terima

Bagian “Waktu benar-benar bertambah” memiliki hal serupa yang terjadi. Agar kalkulator terlihat seperti sedang mencetak struk, maka struk tersebut harus “tumbuh” dari belakang badan kalkulator (lebih jauh) tetapi bergerak lebih cepat (lebih dekat). Jadi tanda terimanya mendapat .layer-2 dan bagian depan kalkulator mendapat .layer-1tetapi apakah mereka akan berlapis seperti yang kita inginkan?


<section class="parallax-group pieces">
<div class="parallax-layer layer-2">
<div class="addition-receipt">
<span>60 min</span>
<span>+ 60 min</span>
<span class="total">120 min</span>
...
</div>
</div>
</section>
<section class="parallax-group pieces">
<div class="parallax-layer layer-1">
<img src="/images/addition-front.svg" width="330" height="374" alt="addition machine" />
</div>
</section>

Ya! Sebagian besar. Untungnya karena .layer-2 tanda terima didahulukan di markup sebelum .layer-1tanda terima berada di belakang bagian depan kalkulator (kecuali di Safari yang lagi-lagi memerlukan beberapa perbaikan khusus).

Jalur gradien di bawah kalkulator berfungsi untuk mengaburkan tanda terima yang panjang saat dibutuhkan. Karena karya seni menggunakan vw unit untuk skala tergantung pada lebar browser, jika jendela lebih tinggi daripada lebarnya, tanda terima terkadang muncul.

bagian bawah tanda terima dapat dilihat di bawah kalkulator dan label mengatakan

Mungkin ada cara yang lebih baik untuk menangani ini, tetapi kadang-kadang harus dikirim. Ternyata desain responsif bisa jadi rumit! Begitu banyak kondisi yang harus dipertimbangkan.

Menggunakan gambar potongan untuk efek daftar “Suatu hari nanti”

Akhirnya, detail yang cukup sederhana namun menyenangkan dari bagian “Anda dapat mengambil item dari backburner”. Ini menampilkan daftar item seperti Trello dengan label pil yang tampak kosong pada awalnya. Saat Anda menggulir, setiap pil berubah warna menjadi hijau dengan label “Siap”.

Ini dicapai dengan beberapa persiapan karya seni. Bentuk pil dipotong dari daftar “wadah” sehingga mengungkapkan apa pun yang ada di belakangnya. Teks “Siap” memiliki warna yang sama dengan latar belakang gelap sehingga Anda tidak dapat melihatnya sampai karya seni berada di atas teal. Tidak perlu CSS, gambar sedang melakukan pengangkatan di sini.

label

Tetapi mengapa menggunakan CSS alih-alih JavaScript?

Mengapa seperti ini? Saya suka mencoba hal-hal baru dengan CSS. Ini kuat dan ada begitu banyak teknik keren untuk bereksperimen. Untuk sebagian besar pengalaman gulir animasi, Green Sock benar-benar raja dan kami baru-baru ini menggunakannya untuk beranda Netlify (berteriak kepada Justin, Ryan, dan Sam untuk pekerjaan luar biasa di sana). Jadi saya pikir, mengapa tidak mencoba sesuatu yang berbeda? Ini benar-benar menyenangkan.

Lebih terkait dengan Matterday

Terima kasih sudah membaca!

Karena hanya sanggup terkait kepada pihak yang sedia kan information keluaran sgp hari ini saja yang bisa beroleh knowledge sgp lengkap. Lantas bersama susah nya mengakses web togel singapore pools terhadap negara +62. Maka alangkah baiknya berlangganan pada halaman ini untuk menemukan knowledge keluaran sgp hari ini live tercepat hanya disini.