1. Quy trình tổng hợp và cấu trúc sản phẩm
Một trang web tĩnh hoàn chỉnh thường gồm nhiều tệp liên kết với nhau. Bài thực hành này yêu cầu vận dụng đồng thời các kĩ năng đã học: dùng thẻ HTML5 để tạo khối nội dung, dùng CSS để tạo kiểu, tổ chức thư mục rõ ràng và kiểm tra bố cục trên nhiều thiết bị.
Ta tiến hành theo trình tự sau.
- 1.Chọn chủ đề, xác định người xem và mục tiêu của trang.
- 2.Phân tích thông tin cần trình bày; chọn hình ảnh minh hoạ phù hợp.
- 3.Lập kế hoạch: phác thảo bố cục trang trên giấy, dự kiến tên các tệp.
- 4.Tạo cây thư mục gốc và các thư mục con (ví dụ
css/,images/). - 5.Viết mã HTML cho từng trang; liên kết tệp CSS chung trong
<head>. - 6.Thiết lập kiểu CSS: màu nền, phông chữ, thanh menu, lưới nội dung.
- 7.Kiểm thử trên các thiết bị và kích cỡ màn hình khác nhau.
- 8.Sửa lỗi, hoàn thiện, đánh giá và lên kế hoạch bảo trì sau này.
- Trang web tĩnh: gồm các tệp HTML và CSS được lưu trên máy chủ hoặc máy cục bộ; nội dung không thay đổi tự động khi người dùng nhập dữ liệu.
- Thư mục gốc: thư mục cấp cao nhất chứa tệp
index.htmlvà toàn bộ tài nguyên của trang web. - Đường dẫn tương đối: cách chỉ tệp lấy từ vị trí tệp hiện hành làm mốc, ví dụ
css/style.css,images/banner.jpg. - Responsive: khả năng bố cục thay đổi phù hợp với chiều rộng màn hình điện thoại, máy tính bảng hay máy tính.
1.1 Khung trang với thẻ ngữ nghĩa HTML5
Thẻ ngữ nghĩa giúp người dùng và công cụ xử lí hiểu được vai trò từng vùng nội dung. Ta thường chia trang thành các khối sau.
<header>: đầu trang, thường chứa tên trang web và khẩu hiệu.<nav>: vùng điều hướng, chứa menu liên kết tới các trang.<main>và<section>: phần thân, chứa nội dung chính.<aside>: cột phụ, tin nổi bật hoặc liên kết ngoài.<footer>: chân trang, ghi thông tin tác giả, bản quyền.
2. Ví dụ minh hoạ: Trang hai cột
2.1 Cấu trúc thư mục dự án
mywebsite/
|-- index.html
|-- about.html
|-- contact.html
|-- css/
| |-- style.css
|-- images/
|-- banner.jpg
|-- avatar.png
Nếu đặt toàn bộ ảnh trong thư mục images/ và toàn bộ định dạng trong thư mục css/, ta chỉ ghi đường dẫn tương đối một lần, đồng thời dễ nâng cấp và bảo trì sau này.
2.2 Nội dung HTML cho index.html
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>Khám phá thế giới số</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<header>
<h1>Khám phá thế giới số</h1>
<p>Trang Tin học 12 - Chủ đề 4</p>
</header>
<nav>
<ul>
<li><a href="index.html">Trang chủ</a></li>
<li><a href="about.html">Giới thiệu</a></li>
<li><a href="contact.html">Liên hệ</a></li>
</ul>
</nav>
<main>
<section>
<h2>Chào mừng bạn đến với website</h2>
<p>Đây là sản phẩm tổng hợp môn Tin học 12.</p>
</section>
<aside>
<h3>Tin nổi bật</h3>
<p>Cách bố trí thư mục tài nguyên đúng chuẩn.</p>
</aside>
</main>
<footer>
<p>Thực hiện bởi học sinh lớp 12 - Năm học 2026 - 2027</p>
</footer>
</body>
</html>
Trong <head> phải có hai thẻ meta. Thẻ charset="UTF-8" giúp hiển thị đúng dấu tiếng Việt. Thẻ name="viewport" đặt chiều rộng vùng hiển thị bằng chiều rộng màn hình thiết bị, để trang không bị thu nhỏ như bản máy tính khi xem trên điện thoại.
2.3 Tạo kiểu CSS trong css/style.css
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: Arial, Helvetica, sans-serif;
}
header {
background-color: #2c3e50;
color: #ffffff;
text-align: center;
padding: 20px;
}
nav ul {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
background-color: #34495e;
}
nav li {
float: left;
}
nav a {
display: block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
nav a:hover {
background-color: #95a5a6;
}
main {
display: flex;
flex-wrap: wrap;
}
section {
flex: 70%;
padding: 15px;
}
aside {
flex: 30%;
background-color: #f2f2f2;
padding: 15px;
}
footer {
background-color: #2c3e50;
color: white;
text-align: center;
padding: 10px;
}
@media screen and (max-width: 700px) {
section, aside {
flex: 100%;
}
}
Giải thích: box-sizing: border-box làm cho chiều rộng của mỗi khối đã tính cả padding và khung; nếu thiếu dòng này, cộng thêm phần đệm sẽ vượt quá 100% và cột aside bị đẩy xuống dòng dưới. display: flex trên main đặt hai cột nằm cạnh nhau; flex: 70% và flex: 30% chia bề rộng. Khi màn hình hẹp hơn 700px, truy vấn @media đặt flex: 100% để hai khối xếp chồng lên nhau, tránh thanh cuộn ngang.
Trong CSS, #2c3e50 là mã màu cần giữ đúng kí tự. Nếu viết sai dấu thăng hoặc thiếu kí tự so với hệ màu 6 chữ số thì trình duyệt sẽ không nhận màu nền.
3. Lưu ý và lỗi thường gặp
- Sai đường dẫn: viết
href="style.css"trong khi tệp lại nằm ởcss/style.csssẽ làm mất định dạng toàn trang. - Thiếu thẻ viewport: trang hiển thị nhỏ như bản dành cho máy tính trên điện thoại hoặc bị cuộn ngang.
- Quên khai báo UTF-8: chữ tiếng Việt bị lỗi font, xuất hiện kí tự lạ.
- Mã màu sai: cần dùng nhất quán hệ màu; thường là 3 hoặc 6 kí tự sau dấu thăng.
- Thẻ lồng sai: ví dụ đặt
<li>trực tiếp trong<div>mà không có<ul>hoặc<ol>. - Hình ảnh quá nặng: ảnh kích cỡ lớn làm trang tải chậm; nên nén ảnh trước khi đưa vào thư mục
images/.
4. Câu hỏi ôn tập
Trình bày các bước trong quy trình thiết kế một trang web tĩnh. Nêu ít nhất hai lỗi thường gặp khi viết mã HTML/CSS và cách khắc phục.
Gợi ý trả lời
Quy trình gồm: xác định chủ đề; phân tích nội dung; lập kế hoạch bố cục; tạo thư mục và tài nguyên; viết mã HTML/CSS; kiểm thử trên nhiều thiết bị; sửa lỗi và đánh giá. Lỗi thường gặp: sai đường dẫn, thiếu thẻ viewport, sai mã màu, thẻ lồng sai. Khắc phục bằng cách kiểm tra tên tệp, bổ sung thẻ meta cần thiết và dùng công cụ kiểm tra mã.
Tại sao nên tách riêng thư mục css/ và images/ trong dự án web? Cho ví dụ đường dẫn từ index.html đến style.css.
Gợi ý trả lời
Tách thư mục giúp quản lí dễ dàng, tránh nhầm lẫn khi dự án có nhiều tệp, đồng thời thuận lợi cho việc nâng cấp. Ví dụ: href="css/style.css".
Nguyên tắc nào giúp thanh menu nằm ngang trên máy tính và xếp dọc trên điện thoại? Viết cấu trúc cơ bản để thực hiện điều này.
Gợi ý trả lời
Dùng thuộc tính float: left hoặc flexbox cho khối nav. Sau đó dùng truy vấn @media với max-width để đổi float: none hoặc flex: 100% khi màn hình thu nhỏ.