4.1 Giá trị phần trăm
Giá trị phần trăm và đơn vị tương đối trong CSS chơi một vai trò quan trọng trong việc tạo ra các bố cục linh hoạt và đáp ứng. Chúng cho phép các phần tử thích ứng với các kích thước màn hình khác nhau và điều kiện thay đổi, cung cấp khả năng tương thích và sự tiện lợi khi sử dụng tốt hơn.
Giá trị phần trăm được sử dụng để xác định kích thước của các phần tử liên quan đến kích thước của các phần tử chứa chúng. Điều này làm cho bố cục linh hoạt và dễ thích ứng hơn.
Ví dụ sử dụng %:
.container {
width: 80%;
margin: 0 auto;
background-color: #f4f4f4;
}
.box {
width: 50%;
padding-top: 25%; /* Tỷ lệ 1:2 */
background-color: #3498db;
color: white;
text-align: center;
position: relative;
}
.box::before {
content: "";
display: block;
padding-top: 50%; /* Tỷ lệ 2:1 */
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ví dụ sử dụng %</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div style="min-height: 200px;">
<div class="container">
<div class="box">Nội dung</div>
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ví dụ sử dụng %</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="container">
<div class="box">Nội dung</div>
</div>
</body>
</html>
Giải thích mã:
.container
: đặt chiều rộng của container là 80% từ chiều rộng của phần tử cha, căn giữa nó bằngmargin: 0 auto
.box
: đặt chiều rộng của khối là 50% từ chiều rộng của container. Chiều cao của khối được xác định thông quapadding-top
, đảm bảo tỷ lệ 1:2
4.2 Đơn vị tương đối (em và rem)
Đơn vị em là đơn vị tương đối dựa vào kích thước phông chữ của phần tử cha. Nếu kích thước phông chữ của cha thay đổi, thì giá trị em
cũng thay đổi.
Ví dụ sử dụng em:
.parent {
font-size: 16px;
}
.child {
font-size: 1.5em; /* 1.5 * 16px = 24px */
padding: 1em; /* 1 * 16px = 16px */
}
Đơn vị rem là đơn vị tương đối dựa vào kích thước phông chữ của phần tử gốc (html
).
Nó không phụ thuộc vào các phần tử cha, làm cho nó dễ dự đoán hơn và thuận tiện để tạo bố cục có khả năng mở rộng.
Ví dụ sử dụng rem:
<div class="container">
Một vài văn bản trong container
<div class="box">
Một vài văn bản trong hộp
</div>
</div>
html {
font-size: 16px;
}
.container {
font-size: 1rem; /* 16px */
padding: 2rem; /* 32px */
}
.box {
font-size: 1.5rem; /* 24px */
margin: 1rem; /* 16px */
}
So sánh em và rem:
em
: phụ thuộc vào kích thước phông chữ của phần tử cha, có thể dẫn đến hiệu ứng dây chuyền khi lồng ghéprem
: phụ thuộc vào kích thước phông chữ của phần tử gốc (html
), làm cho nó dễ dự đoán hơn và dễ sử dụng
4.3 Sử dụng kết hợp %
Sử dụng các đơn vị tương đối (em
và rem
) kết hợp với phần trăm cho phép tạo ra các bố cục linh hoạt và chỉnh sửa, có thể hiển thị đúng trên mọi thiết bị.
Ví dụ: Sử dụng kết hợp %
Tạo bố cục trong đó kích thước của các phần tử được xác định bằng cách sử dụng phần trăm và các đơn vị tương đối.
html {
font-size: 16px;
}
.container {
width: 80%;
margin: 0 auto;
}
.header, .footer {
background-color: #333;
color: white;
padding: 1rem;
text-align: center;
}
.content {
display: flex;
gap: 1rem;
margin: 1rem 0;
}
.sidebar {
flex: 1 1 30%;
background-color: #f4f4f4;
padding: 1rem;
}
.main {
flex: 1 1 70%;
background-color: #e4e4e4;
padding: 1rem;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sử dụng kết hợp % và các đơn vị tương đối</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="container">
<div class="header">Tiêu đề</div>
<div class="content">
<div class="sidebar">Thanh bên</div>
<div class="main">Nội dung chính</div>
</div>
<div class="footer">Chân trang</div>
</div>
</body>
</html>
Giải thích mã:
html
: thiết lập kích thước phông chữ cơ bản cho toàn bộ tài liệu.container
: sử dụng phần trăm để đặt chiều rộng của container và căn giữa nó trên trang.header
và.footer
: sử dụngrem
cho khoảng cách, làm cho chúng dễ dự đoán.content
: sử dụng Flexbox để bố trí thanh bên và nội dung chính với khoảng cách giữa chúng.sidebar
và.main
: sử dụng phần trăm để đặt chiều rộng của cột vàrem
cho khoảng cách
GO TO FULL VERSION