Hướng dẫn này sẽ chủ yếu tập trung vào cách sử dụng chuyển tiếp trong CSS và tạo nút chuyển đổi cho chế độ sáng cũng như tối bằng cách sử dụng ít JavaScript. Hãy đi sâu vào thế giới của quá trình chuyển đổi!
HTML
HTML Markup khá đơn giản để hiểu. Tất cả những gì bạn phải làm là tạo một vùng chứa cho các biểu tượng mà chúng ta sẽ sử dụng từ fontawesome và lồng divcác biểu tượng tương ứng vào trong vùng chứa.
HTML:
<div class="container">
<div class="sun sun-logo">
<i class="fas fa-sun"></i>
</div>
<div class="moon moon-logo">
<i class="fas fa-moon"></i>
</div>
</div>
CSS:
.container{
position: relative;
}
.sun, .moon{
font-size: 10rem;
width: fit-content;
height: fit-content;
}
.moon{
position: absolute;
inset: 0;
}
Đây là phần thú vị. Thay vì sử dụng top: 0; bottom: 0; left: 0;và right: 0; bạn có thể sử dụng inset: 0; để có được kết quả tương tự. Nó hoạt động!
Ngoài ra, đặt heightvà width của vùng chứa mặt trời và mặt trăng thành fit-content. Điều này sẽ làm là, nó sẽ thiết lập chiều cao và chiều rộng của vùng chứa để phù hợp với chiều cao và chiều rộng của nội dung bên trong nó.
Và, để thay đổi kích thước của biểu tượng phông chữ tuyệt vời, chỉ cần thay đổi kích thước của font-size biểu tượng.
Mã:
.moon-logo{
opacity: 0;
transform: translateY(20%) rotateZ(50deg);
}
Các translateY(20%) tuyên bố sẽ bù đắp xuống biểu tượng mặt trăng dọc theo trục Y bằng 20% chiều cao của phần tử cha của nó.
Tương tự, rotateZ(50deg) khai báo sẽ xoay biểu tượng mặt trăng dọc theo trục Z một góc 50 độ.
Mã:
.sun-logo{
opacity: 1;
transform: translateY(0) rotateZ(0deg);
}
Mã:
.animate-sun{
opacity: 0;
transform: translateY(20%) rotateZ(100deg);
color: aliceblue;
}
Mã:
.animate-moon{
opacity: 1;
transform: translateY(0%) rotateZ(0deg);
color: aliceblue;
}
Nhưng chờ đã, chúng ta vẫn chưa sử dụng thuộc tính transition, vậy nó sẽ chuyển từ trạng thái này sang trạng thái khác như thế nào? Vâng, đó là điều duy nhất còn lại để làm trong phần CSS.
Mã:
.moon-logo{
opacity: 0;
transform: translateY(20%) rotateZ(50deg);
transition: all 1s ease-out;
}
.sun-logo{
opacity: 1;
transform: translateY(0) rotateZ(0deg);
transition: all 1s ease-out;
}
Mã:
body{
transition: background-color 1s;
}
.dark{
background-color: black;
}
Đó là nó. Phần CSS của bạn đã sẵn sàng.
Bây giờ, hãy chuyển sang phần JavaScript. Chúng tôi sẽ sử dụng JavaScript cho toggle các lớp trong click sự kiện.
Mã:
document.querySelector(".container").addEventListener("click", () => {
document.querySelector(".sun-logo").classList.toggle("animate-sun");
document.querySelector(".moon-logo").classList.toggle("animate-moon");
document.querySelector("body").classList.toggle("dark");
})
Có nghĩa là, nếu lớp CSS không có trong phần tử classList, hàm toggle sẽ thêm lớp CSS vào phần tử classList tương ứng.
Và, nếu lớp CSS đã có trong phần tử classList, nó sẽ xóa nó.
Đây classList thực sự là một DOMTokenList nhưng chúng tôi sẽ không đi vào chi tiết cụ thể của nó.
Đây là nó. Đây là kết quả cuối cùng.
CRE : Murtuzaalisurti - DEV.TO