# Dự án Terrarium Phần 1: Giới thiệu về HTML ```mermaid journey title Your HTML Learning Journey section Foundation Create HTML file: 3: Student Add DOCTYPE: 4: Student Structure document: 5: Student section Content Add metadata: 4: Student Include images: 5: Student Organize layout: 5: Student section Semantics Use proper tags: 4: Student Enhance accessibility: 5: Student Build terrarium: 5: Student ``` ![Giới thiệu về HTML](../../../../translated_images/webdev101-html.4389c2067af68e98280c1bde52b6c6269f399eaae3659b7c846018d8a7b0bbd9.vi.png) > Sketchnote bởi [Tomomi Imura](https://twitter.com/girlie_mac) HTML, hay HyperText Markup Language, là nền tảng của mọi trang web mà bạn từng truy cập. Hãy nghĩ về HTML như bộ khung xương cung cấp cấu trúc cho các trang web – nó xác định nơi nội dung sẽ xuất hiện, cách tổ chức và ý nghĩa của từng phần. Trong khi CSS sẽ "trang trí" HTML của bạn với màu sắc và bố cục, và JavaScript sẽ làm cho nó sống động với tính tương tác, HTML cung cấp cấu trúc cơ bản làm nền tảng cho mọi thứ khác. Trong bài học này, bạn sẽ tạo cấu trúc HTML cho giao diện terrarium ảo. Dự án thực hành này sẽ giúp bạn học các khái niệm cơ bản về HTML trong khi xây dựng một thứ gì đó hấp dẫn về mặt hình ảnh. Bạn sẽ học cách tổ chức nội dung bằng các phần tử ngữ nghĩa, làm việc với hình ảnh và tạo nền tảng cho một ứng dụng web tương tác. Kết thúc bài học này, bạn sẽ có một trang HTML hoạt động hiển thị hình ảnh cây cối trong các cột được tổ chức, sẵn sàng để được tạo kiểu trong bài học tiếp theo. Đừng lo nếu nó trông đơn giản lúc đầu – đó chính là điều HTML nên làm trước khi CSS thêm vào sự hoàn thiện về mặt hình ảnh. ```mermaid mindmap root((HTML Fundamentals)) Structure DOCTYPE Declaration HTML Element Head Section Body Content Elements Tags & Attributes Self-closing Tags Nested Elements Block vs Inline Content Text Elements Images Containers (div) Lists Semantics Meaningful Tags Accessibility Screen Readers SEO Benefits Best Practices Proper Nesting Valid Markup Descriptive Alt Text Organized Structure ``` ## Quiz Trước Bài Giảng [Quiz trước bài giảng](https://ff-quizzes.netlify.app/web/quiz/15) > 📺 **Xem và Học**: Xem video tổng quan hữu ích này > > [![Video Cơ bản về HTML](https://img.youtube.com/vi/1TvxJKBzhyQ/0.jpg)](https://www.youtube.com/watch?v=1TvxJKBzhyQ) ## Thiết Lập Dự Án Của Bạn Trước khi đi sâu vào mã HTML, hãy thiết lập một không gian làm việc phù hợp cho dự án terrarium của bạn. Tạo một cấu trúc tệp được tổ chức từ đầu là một thói quen quan trọng sẽ giúp bạn trong suốt hành trình phát triển web. ### Nhiệm vụ: Tạo Cấu Trúc Dự Án Của Bạn Bạn sẽ tạo một thư mục dành riêng cho dự án terrarium và thêm tệp HTML đầu tiên của mình. Dưới đây là hai cách bạn có thể sử dụng: **Cách 1: Sử dụng Visual Studio Code** 1. Mở Visual Studio Code 2. Nhấp vào "File" → "Open Folder" hoặc sử dụng `Ctrl+K, Ctrl+O` (Windows/Linux) hoặc `Cmd+K, Cmd+O` (Mac) 3. Tạo một thư mục mới tên là `terrarium` và chọn nó 4. Trong bảng Explorer, nhấp vào biểu tượng "New File" 5. Đặt tên tệp của bạn là `index.html` ![VS Code Explorer hiển thị việc tạo tệp mới](../../../../translated_images/vs-code-index.e2986cf919471eb984a0afef231380c8b132b000635105f2397bd2754d1b689c.vi.png) **Cách 2: Sử dụng Lệnh Terminal** ```bash mkdir terrarium cd terrarium touch index.html code index.html ``` **Những gì các lệnh này thực hiện:** - **Tạo** một thư mục mới tên là `terrarium` cho dự án của bạn - **Đi vào** thư mục terrarium - **Tạo** một tệp `index.html` trống - **Mở** tệp trong Visual Studio Code để chỉnh sửa > 💡 **Mẹo Chuyên Nghiệp**: Tên tệp `index.html` rất đặc biệt trong phát triển web. Khi ai đó truy cập một trang web, trình duyệt tự động tìm kiếm `index.html` làm trang mặc định để hiển thị. Điều này có nghĩa là một URL như `https://mysite.com/projects/` sẽ tự động phục vụ tệp `index.html` từ thư mục `projects` mà không cần chỉ định tên tệp trong URL. ## Hiểu Cấu Trúc Tài Liệu HTML Mỗi tài liệu HTML tuân theo một cấu trúc cụ thể mà trình duyệt cần để hiểu và hiển thị chính xác. Hãy nghĩ về cấu trúc này như một lá thư chính thức – nó có các phần tử bắt buộc theo một thứ tự cụ thể giúp người nhận (trong trường hợp này là trình duyệt) xử lý nội dung đúng cách. ```mermaid flowchart TD A[""] --> B[""] B --> C[""] C --> D[""] C --> E["<meta charset>"] C --> F["<meta viewport>"] B --> G["<body>"] G --> H["<h1> Heading"] G --> I["<div> Containers"] G --> J["<img> Images"] style A fill:#e1f5fe style B fill:#f3e5f5 style C fill:#fff3e0 style G fill:#e8f5e8 ``` Hãy bắt đầu bằng cách thêm nền tảng cần thiết mà mọi tài liệu HTML cần có. ### Khai Báo DOCTYPE và Phần Tử Gốc Hai dòng đầu tiên của bất kỳ tệp HTML nào đóng vai trò như "giới thiệu" của tài liệu với trình duyệt: ```html <!DOCTYPE html> <html></html> ``` **Hiểu những gì mã này làm:** - **Khai báo** loại tài liệu là HTML5 bằng `<!DOCTYPE html>` - **Tạo** phần tử gốc `<html>` sẽ chứa tất cả nội dung trang - **Thiết lập** các tiêu chuẩn web hiện đại để trình duyệt hiển thị đúng cách - **Đảm bảo** hiển thị nhất quán trên các trình duyệt và thiết bị khác nhau > 💡 **Mẹo VS Code**: Di chuột qua bất kỳ thẻ HTML nào trong VS Code để xem thông tin hữu ích từ MDN Web Docs, bao gồm các ví dụ sử dụng và chi tiết tương thích trình duyệt. > 📚 **Tìm Hiểu Thêm**: Khai báo DOCTYPE ngăn trình duyệt vào chế độ "quirks mode", được sử dụng để hỗ trợ các trang web rất cũ. Phát triển web hiện đại sử dụng khai báo đơn giản `<!DOCTYPE html>` để đảm bảo [hiển thị tuân thủ tiêu chuẩn](https://developer.mozilla.org/docs/Web/HTML/Quirks_Mode_and_Standards_Mode). ### 🔄 **Kiểm Tra Sư Phạm** **Dừng Lại và Suy Ngẫm**: Trước khi tiếp tục, hãy đảm bảo bạn hiểu: - ✅ Tại sao mọi tài liệu HTML cần khai báo DOCTYPE - ✅ Phần tử gốc `<html>` chứa gì - ✅ Cách cấu trúc này giúp trình duyệt hiển thị trang đúng cách **Kiểm Tra Nhanh**: Bạn có thể giải thích bằng lời của mình "hiển thị tuân thủ tiêu chuẩn" nghĩa là gì không? ## Thêm Metadata Cần Thiết Cho Tài Liệu Phần `<head>` của tài liệu HTML chứa thông tin quan trọng mà trình duyệt và công cụ tìm kiếm cần, nhưng khách truy cập không thấy trực tiếp trên trang. Hãy nghĩ về nó như thông tin "hậu trường" giúp trang web của bạn hoạt động đúng cách và hiển thị chính xác trên các thiết bị và nền tảng khác nhau. Metadata này cho trình duyệt biết cách hiển thị trang của bạn, mã hóa ký tự nào cần sử dụng và cách xử lý các kích thước màn hình khác nhau – tất cả đều cần thiết để tạo các trang web chuyên nghiệp, dễ truy cập. ### Nhiệm vụ: Thêm Phần Đầu Tài Liệu Chèn phần `<head>` này giữa các thẻ `<html>` mở và đóng của bạn: ```html <head> <title>Welcome to my Virtual Terrarium ``` **Phân tích những gì mỗi phần tử thực hiện:** - **Đặt** tiêu đề trang xuất hiện trong tab trình duyệt và kết quả tìm kiếm - **Chỉ định** mã hóa ký tự UTF-8 để hiển thị văn bản đúng cách trên toàn thế giới - **Đảm bảo** tương thích với các phiên bản hiện đại của Internet Explorer - **Cấu hình** thiết kế đáp ứng bằng cách đặt viewport khớp với chiều rộng thiết bị - **Kiểm soát** mức độ thu phóng ban đầu để hiển thị nội dung ở kích thước tự nhiên > 🤔 **Suy Nghĩ Về Điều Này**: Điều gì sẽ xảy ra nếu bạn đặt thẻ meta viewport như thế này: ``? Điều này sẽ buộc trang luôn rộng 600 pixel, phá vỡ thiết kế đáp ứng! Tìm hiểu thêm về [cấu hình viewport đúng cách](https://developer.mozilla.org/docs/Web/HTML/Viewport_meta_tag). ## Xây Dựng Phần Thân Tài Liệu Phần tử `` chứa tất cả nội dung hiển thị của trang web – mọi thứ người dùng sẽ thấy và tương tác. Trong khi phần `` cung cấp hướng dẫn cho trình duyệt, phần `` chứa nội dung thực tế: văn bản, hình ảnh, nút và các phần tử khác tạo giao diện người dùng của bạn. Hãy thêm cấu trúc phần thân và hiểu cách các thẻ HTML hoạt động cùng nhau để tạo nội dung có ý nghĩa. ### Hiểu Cấu Trúc Thẻ HTML HTML sử dụng các thẻ cặp để xác định phần tử. Hầu hết các thẻ có thẻ mở như `

` và thẻ đóng như `

`, với nội dung ở giữa: `

Hello, world!

`. Điều này tạo ra một phần tử đoạn văn chứa văn bản "Hello, world!". ### Nhiệm vụ: Thêm Phần Tử Thân Cập nhật tệp HTML của bạn để bao gồm phần tử ``: ```html Welcome to my Virtual Terrarium ``` **Đây là những gì cấu trúc hoàn chỉnh này cung cấp:** - **Thiết lập** khung tài liệu HTML5 cơ bản - **Bao gồm** metadata cần thiết để trình duyệt hiển thị đúng cách - **Tạo** một phần thân trống sẵn sàng cho nội dung hiển thị của bạn - **Tuân theo** các thực hành tốt nhất trong phát triển web hiện đại Bây giờ bạn đã sẵn sàng thêm các phần tử hiển thị của terrarium. Chúng ta sẽ sử dụng các phần tử `
` làm container để tổ chức các phần nội dung khác nhau và các phần tử `` để hiển thị hình ảnh cây cối. ### Làm Việc Với Hình Ảnh và Container Bố Cục Hình ảnh đặc biệt trong HTML vì chúng sử dụng thẻ "tự đóng". Không giống như các phần tử như `

` bao quanh nội dung, thẻ `` chứa tất cả thông tin cần thiết trong chính thẻ đó bằng các thuộc tính như `src` cho đường dẫn tệp hình ảnh và `alt` cho khả năng truy cập. Trước khi thêm hình ảnh vào HTML của bạn, bạn cần tổ chức tệp dự án đúng cách bằng cách tạo một thư mục hình ảnh và thêm đồ họa cây cối. **Đầu tiên, thiết lập hình ảnh của bạn:** 1. Tạo một thư mục tên là `images` bên trong thư mục dự án terrarium của bạn 2. Tải xuống hình ảnh cây cối từ [thư mục giải pháp](../../../../3-terrarium/solution/images) (tổng cộng 14 hình ảnh cây) 3. Sao chép tất cả hình ảnh cây vào thư mục `images` mới của bạn ### Nhiệm vụ: Tạo Bố Cục Hiển Thị Cây Bây giờ hãy thêm hình ảnh cây được tổ chức trong hai cột giữa các thẻ `` của bạn: ```html
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
``` **Từng bước, đây là những gì đang xảy ra trong mã này:** - **Tạo** một container trang chính với `id="page"` để chứa tất cả nội dung - **Thiết lập** hai container cột: `left-container` và `right-container` - **Tổ chức** 7 cây trong cột bên trái và 7 cây trong cột bên phải - **Bao quanh** mỗi hình ảnh cây trong một div `plant-holder` để định vị riêng lẻ - **Áp dụng** tên lớp nhất quán để tạo kiểu CSS trong bài học tiếp theo - **Gán** ID duy nhất cho mỗi hình ảnh cây để tương tác JavaScript sau này - **Bao gồm** đường dẫn tệp đúng chỉ đến thư mục hình ảnh > 🤔 **Cân Nhắc Điều Này**: Lưu ý rằng tất cả hình ảnh hiện có cùng văn bản alt "plant". Điều này không lý tưởng cho khả năng truy cập. Người dùng trình đọc màn hình sẽ nghe "plant" lặp lại 14 lần mà không biết cây cụ thể nào mỗi hình ảnh hiển thị. Bạn có thể nghĩ ra văn bản alt tốt hơn, mô tả hơn cho mỗi hình ảnh không? > 📝 **Các Loại Phần Tử HTML**: Các phần tử `
` là "cấp khối" và chiếm toàn bộ chiều rộng, trong khi các phần tử `` là "cấp dòng" và chỉ chiếm chiều rộng cần thiết. Bạn nghĩ điều gì sẽ xảy ra nếu bạn thay đổi tất cả các thẻ `
` này thành thẻ ``? ### 🔄 **Kiểm Tra Sư Phạm** **Hiểu Cấu Trúc**: Dành một chút thời gian để xem lại cấu trúc HTML của bạn: - ✅ Bạn có thể xác định các container chính trong bố cục của mình không? - ✅ Bạn có hiểu tại sao mỗi hình ảnh có một ID duy nhất không? - ✅ Bạn sẽ mô tả mục đích của các div `plant-holder` như thế nào? **Kiểm Tra Hình Ảnh**: Mở tệp HTML của bạn trong trình duyệt. Bạn nên thấy: - Danh sách cơ bản các hình ảnh cây - Hình ảnh được tổ chức trong hai cột - Bố cục đơn giản, chưa được tạo kiểu **Nhớ Rằng**: Giao diện đơn giản này chính là điều HTML nên trông như trước khi tạo kiểu CSS! Với mã này được thêm vào, các cây sẽ xuất hiện trên màn hình, mặc dù chúng chưa được hoàn thiện – đó là nhiệm vụ của CSS trong bài học tiếp theo! Hiện tại, bạn đã có một nền tảng HTML vững chắc tổ chức nội dung của bạn đúng cách và tuân theo các thực hành tốt nhất về khả năng truy cập. ## Sử Dụng HTML Ngữ Nghĩa Để Tăng Khả Năng Truy Cập HTML ngữ nghĩa nghĩa là chọn các phần tử HTML dựa trên ý nghĩa và mục đích của chúng, không chỉ dựa trên giao diện. Khi bạn sử dụng đánh dấu ngữ nghĩa, bạn đang truyền đạt cấu trúc và ý nghĩa của nội dung của bạn cho trình duyệt, công cụ tìm kiếm và các công nghệ hỗ trợ như trình đọc màn hình. ```mermaid flowchart TD A[Need to add content?] --> B{What type?} B -->|Main heading| C["

"] B -->|Subheading| D["

,

, etc."] B -->|Paragraph| E["

"] B -->|List| F["

    ,
      "] B -->|Navigation| G["