Thuộc tính perspective xác định khoảng cách từ người xem đến mặt phẳng z=0, tạo hiệu ứng độ sâu cho các phần tử con được biến đổi 3D. Giá trị càng nhỏ → hiệu ứng 3D càng mạnh (gần mắt hơn).
Ví dụ minh họa
Mã sau thay đổi perspective của container từ 100px sang 90px khi nhấn nút:
<!DOCTYPE html>
<html>
<head>
<style>
#div1 {
position: relative;
margin: auto;
height: 200px;
width: 200px;
padding: 20px;
border: 2px solid blue;
perspective: 100px; /* Perspective ban đầu */
}
#div2 {
padding: 80px;
position: absolute;
border: 2px solid blue;
background-color: yellow;
transform: rotateX(45deg);
}
#div3 {
padding: 50px;
position: absolute;
border: 2px solid blue;
background-color: green;
transform: rotateX(30deg);
}
</style>
</head>
<body>
<p>Thay đổi perspective của div1</p>
<button onclick="setPerspective()">Đặt Perspective</button>
<div id="div1">DIV1
<div id="div2">DIV2</div>
<div id="div3">DIV3</div>
</div>
<script>
function setPerspective() {
document.getElementById("div1").style.perspective = "90px";
/* Giảm perspective -> hiệu ứng 3D mạnh hơn (gần mắt hơn) */
}
</script>
</body>
</html>
Giá trị perspective
none(mặc định): Không có phối cảnh, biến đổi 3D phẳng.<length>: Khoảng cách (px, em, rem...). Ví dụ:500px,1000px. Giá trị nhỏ = góc nhìn rộng = hiệu ứng 3D mạnh.
perspective vs perspective() transform function
perspective(thuộc tính CSS): Đặt trên **phần tử cha** để ảnh hưởng đến **tất cả con** được transform 3D.transform: perspective(500px): Đặt trên **chính phần tử con**, chỉ ảnh hưởng đến nó.
Mẹo: Kết hợp với perspectiveOrigin để đổi điểm nhìn (vanishing point). Mặc định là 50% 50% (trung tâm).