📋 Bài 1: Cấu trúc HTML

Hiểu về cấu trúc cơ bản của trang web HTML và các thành phần chính

🌐 HTML là gì?

💡 Định nghĩa HTML

HTML (HyperText Markup Language) là ngôn ngữ đánh dấu tiêu chuẩn để tạo ra các trang web. HTML không phải là ngôn ngữ lập trình, mà là ngôn ngữ đánh dấu sử dụng các thẻ (tags) để định nghĩa cấu trúc và nội dung của trang web.

🎯 HTML được sử dụng để:

🏗️

Tạo cấu trúc trang web

Định nghĩa các phần như header, nav, main, footer

📝

Hiển thị nội dung

Text, hình ảnh, video, links và các media khác

📋

Tạo forms

Thu thập thông tin từ người dùng

🔗

Kết nối trang web

Liên kết giữa các trang và tài nguyên

🏗️ Cấu trúc cơ bản của trang HTML

📋 Mọi trang HTML đều có cấu trúc chuẩn sau:

Cấu trúc HTML cơ bản
<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tiêu đề trang web</title>
</head>
<body>
    <!-- Nội dung trang web được viết ở đây -->
    <h1>Xin chào thế giới!</h1>
    <p>Đây là đoạn văn đầu tiên của tôi.</p>
</body>
</html>

🔍 Giải thích từng thành phần:

<!DOCTYPE html> Khai báo loại tài liệu HTML5
<html lang="vi"> Thẻ gốc của tài liệu, lang="vi" cho tiếng Việt
<head> Chứa metadata (thông tin về trang)
<meta charset="UTF-8"> Bảng mã ký tự Unicode
<meta name="viewport"...> Responsive cho mobile
<title> Tiêu đề hiển thị trên tab trình duyệt
<body> Chứa nội dung hiển thị trên trang web

🔍 Thẻ <head> - Metadata của trang web

📋 Thẻ <head> chứa gì?

Thẻ <head> chứa metadata - thông tin về trang web mà không hiển thị trực tiếp cho người dùng. Đây là nơi trình duyệt, search engines và các công cụ khác đọc thông tin về trang.

🏷️ Các thẻ thường gặp trong <head>:

Cấu trúc head hoàn chỉnh
<head>
    <!-- 1. Mã hóa ký tự -->
    <meta charset="UTF-8">
    
    <!-- 2. Responsive cho mobile -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
    <!-- 3. Tiêu đề trang (hiển thị trên tab) -->
    <title>Tiêu đề trang web của bạn</title>
    
    <!-- 4. Meta description (SEO) -->
    <meta name="description" content="Mô tả ngắn gọn về trang web">
    <meta name="keywords" content="từ khóa, HTML, web development">
    <meta name="author" content="Tên tác giả">
    
    <!-- 5. Open Graph cho social media -->
    <meta property="og:title" content="Tiêu đề khi share">
    <meta property="og:description" content="Mô tả khi share">
    <meta property="og:image" content="https://example.com/image.jpg">
    
    <!-- 6. Favicon -->
    <link rel="icon" href="/favicon.ico" type="image/x-icon">
    
    <!-- 7. CSS Stylesheets -->
    <link rel="stylesheet" href="styles.css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto">
    
    <!-- 8. JavaScript (nếu cần load trước) -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
    
    <!-- 9. Preload resources -->
    <link rel="preload" href="important-font.woff2" as="font" type="font/woff2" crossorigin>
</head>

📚 Giải thích từng loại thẻ:

🔤

1. Meta Charset

<meta charset="UTF-8">

Mục đích: Định nghĩa bảng mã ký tự cho trang web
Tại sao quan trọng: Đảm bảo hiển thị đúng ký tự tiếng Việt, emoji, ký tự đặc biệt
Lưu ý: Phải đặt ở đầu thẻ head để tránh lỗi encoding
📱

2. Viewport Meta

<meta name="viewport" content="width=device-width, initial-scale=1.0">

Mục đích: Điều khiển cách trang hiển thị trên mobile
width=device-width: Chiều rộng = chiều rộng thiết bị
initial-scale=1.0: Không zoom khi load trang
Không có thẻ này: Trang sẽ hiển thị như desktop trên mobile
📑

3. Title

<title>Tiêu đề trang</title>

Hiển thị: Trên tab trình duyệt, bookmark, kết quả Google
SEO: Rất quan trọng cho search engine ranking
Độ dài: Nên 50-60 ký tự để hiển thị đầy đủ trên Google
Lưu ý: Mỗi trang chỉ có 1 title, phải unique
📝

4. Meta Description

<meta name="description" content="...">

Mục đích: Mô tả ngắn gọn nội dung trang
Hiển thị: Trong kết quả tìm kiếm Google
Độ dài: 150-160 ký tự
SEO: Ảnh hưởng đến click-through rate từ Google
🎨

5. CSS Stylesheets

<link rel="stylesheet" href="style.css">

External CSS: Link đến file CSS bên ngoài
Google Fonts: fonts.googleapis.com
CDN CSS: Bootstrap, Font Awesome, etc.
Thứ tự: CSS framework trước, custom CSS sau

6. Favicon

<link rel="icon" href="/favicon.ico">

Mục đích: Icon nhỏ hiển thị trên tab trình duyệt
Formats: .ico, .png, .svg
Sizes: 16x16, 32x32, 48x48 pixels
Apple: <link rel="apple-touch-icon" sizes="180x180">
Ví dụ: Head hoàn chỉnh cho website thực tế
<head>
    <!-- Required meta tags -->
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
    <!-- SEO Meta tags -->
    <title>Khóa học HTML miễn phí - Học từ cơ bản đến nâng cao</title>
    <meta name="description" content="Học HTML từ cơ bản đến nâng cao với các ví dụ thực tế. Khóa học miễn phí, dễ hiểu, phù hợp cho người mới bắt đầu.">
    <meta name="keywords" content="HTML, web development, khóa học, miễn phí, cơ bản">
    <meta name="author" content="DevCamp">
    
    <!-- Open Graph / Facebook -->
    <meta property="og:type" content="website">
    <meta property="og:url" content="https://devcamp.edu.vn/html-course">
    <meta property="og:title" content="Khóa học HTML miễn phí">
    <meta property="og:description" content="Học HTML từ cơ bản đến nâng cao">
    <meta property="og:image" content="https://devcamp.edu.vn/images/html-course.jpg">
    
    <!-- Twitter -->
    <meta property="twitter:card" content="summary_large_image">
    <meta property="twitter:url" content="https://devcamp.edu.vn/html-course">
    <meta property="twitter:title" content="Khóa học HTML miễn phí">
    <meta property="twitter:description" content="Học HTML từ cơ bản đến nâng cao">
    <meta property="twitter:image" content="https://devcamp.edu.vn/images/html-course.jpg">
    
    <!-- Favicon -->
    <link rel="icon" type="image/x-icon" href="/favicon.ico">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
    
    <!-- Stylesheets -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/vs2015.min.css">
    <link rel="stylesheet" href="css/main.css">
    
    <!-- Preload critical resources -->
    <link rel="preload" href="fonts/inter-var.woff2" as="font" type="font/woff2" crossorigin>
    
    <!-- Additional meta for better UX -->
    <meta name="theme-color" content="#667eea">
    <meta name="robots" content="index, follow">
    <link rel="canonical" href="https://devcamp.edu.vn/html-course">
</head>

⚠️ Những lỗi thường gặp với thẻ <head>:

  • Thiếu charset: Gây lỗi hiển thị ký tự tiếng Việt
  • Thiếu viewport: Trang không responsive trên mobile
  • Title quá dài: Bị cắt trong kết quả Google
  • Không có meta description: Google tự tạo snippet không đẹp
  • Thứ tự sai: charset phải đặt đầu tiên
  • CSS blocking render: Không preload fonts quan trọng

✅ Best Practices cho thẻ <head>:

  • 📝 Charset đầu tiên: <meta charset="UTF-8"> luôn đặt đầu
  • 📱 Viewport required: Bắt buộc cho responsive design
  • 🔍 SEO meta tags: Title, description unique cho mỗi trang
  • 🚀 Performance: Preload critical fonts và resources
  • 📊 Analytics: Google Analytics, Facebook Pixel trong head
  • 🔗 Social sharing: Open Graph cho Facebook, Twitter cards

🏷️ Các nhóm thẻ HTML chính

📚 HTML có hàng trăm thẻ, được phân thành các nhóm chính:

🏗️

1. Thẻ Cấu trúc (Structural)

Định nghĩa cấu trúc và layout của trang web, giúp tổ chức nội dung một cách logic.

Ví dụ: <header> <nav> <main> <section> <article> <aside> <footer>
📝

2. Thẻ Văn bản (Text)

Định dạng và hiển thị text, từ tiêu đề đến đoạn văn, danh sách và formatting.

Ví dụ: <h1-h6> <p> <strong> <em> <ul> <ol> <li>
🔗

3. Thẻ Liên kết & Media

Tạo liên kết giữa các trang và nhúng media như hình ảnh, video, audio.

Ví dụ: <a> <img> <video> <audio> <iframe>
📋

4. Thẻ Form & Input

Tạo biểu mẫu để thu thập thông tin từ người dùng như đăng nhập, đăng ký, liên hệ.

Ví dụ: <form> <input> <textarea> <select> <button>
📊

5. Thẻ Bảng (Table)

Hiển thị dữ liệu dạng bảng với hàng và cột, thường dùng cho data tabular.

Ví dụ: <table> <tr> <td> <th> <thead> <tbody>
📐

6. Thẻ Container & Layout

Tạo các container để nhóm và sắp xếp nội dung, hỗ trợ CSS layout.

Ví dụ: <div> <span> <container> <wrapper>

🏷️ Cú pháp thẻ HTML

1. Thẻ có cặp (Container Tags):

Thẻ có thẻ mở và thẻ đóng
<!-- Cú pháp: <tagname>nội dung</tagname> -->

<h1>Đây là tiêu đề</h1>
<p>Đây là đoạn văn</p>
<div>Đây là container</div>
<strong>Văn bản in đậm</strong>

<!-- Thẻ có thể chứa thẻ khác (nested) -->
<div>
    <h2>Tiêu đề con</h2>
    <p>Đoạn văn bên trong div</p>
</div>

2. Thẻ tự đóng (Self-closing Tags):

Thẻ không có nội dung bên trong
<!-- Cú pháp: <tagname> hoặc <tagname /> -->

<img src="image.jpg" alt="Mô tả ảnh">
<br>  <!-- Xuống dòng -->
<hr>  <!-- Đường kẻ ngang -->
<input type="text" placeholder="Nhập text">
<meta charset="UTF-8">

<!-- XHTML style (optional) -->
<img src="image.jpg" alt="Mô tả ảnh" />
<br />
<hr />

3. Thuộc tính (Attributes):

Thêm thông tin cho thẻ HTML
<!-- Cú pháp: <tagname attribute="value"> -->

<!-- Thuộc tính phổ biến -->
<div id="header" class="container main-header">
    <img src="logo.png" alt="Logo công ty" width="200" height="100">
    <a href="https://google.com" target="_blank" title="Đến Google">
        Liên kết đến Google
    </a>
</div>

<!-- Thuộc tính data tùy chỉnh -->
<div data-user-id="123" data-role="admin">User Info</div>

<!-- Thuộc tính boolean -->
<input type="checkbox" checked>
<button disabled>Nút bị vô hiệu hóa</button>

🏗️ Thẻ Cấu trúc (Structural Tags)

🎯 Thẻ cấu trúc là gì?

Thẻ cấu trúc (Structural Tags) là những thẻ HTML5 semantic được thiết kế để định nghĩa rõ ràng các phần khác nhau của trang web. Chúng giúp tổ chức nội dung một cách logic và có ý nghĩa.

📋 Các thẻ cấu trúc chính trong HTML5:

🎯

<header>

Phần đầu của trang web hoặc section, thường chứa logo, menu điều hướng, tiêu đề chính.

Vị trí: Đầu trang, đầu article, đầu section
Chứa: Logo, navigation, heading, breadcrumb
🧭

<nav>

Khu vực chứa các liên kết điều hướng chính của trang web.

Mục đích: Menu chính, breadcrumb, pagination
Lưu ý: Không dùng cho tất cả links, chỉ navigation quan trọng
📄

<main>

Nội dung chính và độc nhất của trang web. Mỗi trang chỉ có một thẻ main.

Quy tắc: Chỉ một <main> per page
Không chứa: Header, footer, sidebar chung
📑

<section>

Một phần độc lập và có ý nghĩa của tài liệu, thường có tiêu đề riêng.

Ví dụ: Chapter, tab panel, phần giới thiệu
Có tiêu đề: Nên có h1-h6 bên trong
📰

<article>

Nội dung độc lập, có thể tái sử dụng như bài viết, bài post, comment.

Ví dụ: Blog post, news article, comment
Test: Có thể đứng độc lập không cần context?
📌

<aside>

Nội dung phụ, liên quan gián tiếp đến nội dung chính như sidebar, quote.

Ví dụ: Sidebar, related links, ads, quotes
Vị trí: Bên cạnh hoặc trong article
🔻

<footer>

Phần cuối của trang web hoặc section, chứa thông tin liên hệ, copyright.

Chứa: Copyright, contact info, sitemap
Vị trí: Cuối trang, cuối article, cuối section

🏗️ Cấu trúc trang web chuẩn với thẻ structural:

Template cấu trúc HTML5 hoàn chỉnh
<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cấu trúc HTML5 Semantic</title>
</head>
<body>
    <!-- Header của trang -->
    <header>
        <h1>Logo Website</h1>
        <nav>
            <ul>
                <li><a href="/">Trang chủ</a></li>
                <li><a href="/about">Giới thiệu</a></li>
                <li><a href="/services">Dịch vụ</a></li>
                <li><a href="/contact">Liên hệ</a></li>
            </ul>
        </nav>
    </header>

    <!-- Nội dung chính -->
    <main>
        <!-- Phần giới thiệu -->
        <section id="hero">
            <h2>Chào mừng đến với website của chúng tôi</h2>
            <p>Đây là phần giới thiệu chính của trang web.</p>
        </section>

        <!-- Phần bài viết -->
        <section id="articles">
            <h2>Bài viết mới nhất</h2>
            
            <article>
                <header>
                    <h3>Tiêu đề bài viết 1</h3>
                    <p><time datetime="2024-03-15">15 tháng 3, 2024</time></p>
                </header>
                <p>Nội dung bài viết đầu tiên...</p>
                <footer>
                    <p>Tác giả: John Doe</p>
                </footer>
            </article>

            <article>
                <header>
                    <h3>Tiêu đề bài viết 2</h3>
                    <p><time datetime="2024-03-10">10 tháng 3, 2024</time></p>
                </header>
                <p>Nội dung bài viết thứ hai...</p>
                <footer>
                    <p>Tác giả: Jane Smith</p>
                </footer>
            </article>
        </section>
    </main>

    <!-- Sidebar -->
    <aside>
        <section>
            <h3>Bài viết phổ biến</h3>
            <ul>
                <li><a href="#">Học HTML từ cơ bản</a></li>
                <li><a href="#">CSS cho người mới</a></li>
                <li><a href="#">JavaScript căn bản</a></li>
            </ul>
        </section>

        <section>
            <h3>Quảng cáo</h3>
            <p>Nội dung quảng cáo hoặc banner</p>
        </section>
    </aside>

    <!-- Footer của trang -->
    <footer>
        <section>
            <h3>Liên hệ</h3>
            <p>Email: contact@example.com</p>
            <p>Phone: (84) 123-456-789</p>
        </section>
        
        <section>
            <h3>Theo dõi chúng tôi</h3>
            <ul>
                <li><a href="#">Facebook</a></li>
                <li><a href="#">Twitter</a></li>
                <li><a href="#">LinkedIn</a></li>
            </ul>
        </section>
        
        <p>&copy; 2024 Website Name. All rights reserved.</p>
    </footer>
</body>
</html>

✅ Lợi ích của việc sử dụng thẻ cấu trúc:

  • 🔍 SEO tốt hơn: Search engines hiểu được cấu trúc trang
  • Accessibility: Screen readers dễ điều hướng
  • 📱 Responsive: Dễ tạo layout responsive với CSS
  • 🧹 Code sạch: Dễ đọc, maintain và debug
  • 👥 Team work: Developer khác hiểu code dễ hơn
  • 🚀 Performance: Browser render tối ưu hơn

💪 Bài tập: Thực hành Thẻ Cấu trúc

🎯 Bài tập 1: Tạo cấu trúc cho trang blog

Hãy tạo cấu trúc HTML cho một trang blog cá nhân với các yêu cầu sau:

Yêu cầu bài tập
<!-- 
🎯 YÊU CẦU:
1. Header: Logo "My Blog" + Navigation menu (Home, About, Blog, Contact)
2. Main content area với:
   - Hero section: Tiêu đề chính và mô tả
   - Articles section: 2 bài viết blog
   - Mỗi article có: tiêu đề, ngày đăng, nội dung, tác giả
3. Aside sidebar với:
   - Recent Posts (3 links)
   - Categories (Frontend, Backend, Design)
4. Footer với: Copyright và social links

✅ SỬ DỤNG:
- header, nav, main, section, article, aside, footer
- Cấu trúc đúng và có ý nghĩa
- Thẻ time cho ngày tháng
- Proper heading hierarchy (h1, h2, h3...)
-->

<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My Blog - Trang cá nhân</title>
</head>
<body>
    <!-- Bắt đầu code của bạn ở đây -->
    
    
    
    
    <!-- Kết thúc code -->
</body>
</html>

🎯 Bài tập 2: Tạo trang Landing Page cho công ty

Landing Page Structure
<!-- 
🏢 YÊU CẦU LANDING PAGE:
1. Header: Logo + Navigation (Home, Services, About, Contact)
2. Main với 4 sections:
   - Hero: Tiêu đề lớn + Call-to-action
   - Services: 3 dịch vụ chính (mỗi cái là một article)
   - About: Giới thiệu công ty
   - Testimonials: 2 testimonial (sử dụng blockquote)
3. Aside: Contact form hoặc Quick links
4. Footer: Company info + Links + Copyright

💡 GỢi Ý STRUCTURE:
header > nav
main > section#hero + section#services + section#about + section#testimonials
aside > contact info
footer > company details
-->

<!-- Hãy tạo structure cho landing page này -->

🤔 Câu hỏi ôn tập:

  1. Khác biệt giữa <section><article> là gì?
  2. Khi nào nên sử dụng <aside>?
  3. Một trang web có thể có nhiều <header><footer> không?
  4. Tại sao chỉ được có một <main> per page?
  5. Thẻ <nav> có bắt buộc phải có trong <header> không?

💡 Tips khi làm bài tập:

  • 🎯 Semantic first: Chọn thẻ dựa trên ý nghĩa, không phải appearance
  • 📱 Mobile-first: Nghĩ về cấu trúc trên mobile trước
  • 🔍 SEO friendly: Sử dụng heading hierarchy đúng (h1 → h2 → h3)
  • Accessibility: Mọi section quan trọng nên có heading
  • 🧹 Clean code: Indent đúng, comment rõ ràng

📝 Tổng kết bài học

🎯 Những điều bạn đã học được:

  • ✅ HTML là ngôn ngữ đánh dấu để tạo cấu trúc trang web
  • ✅ Cấu trúc cơ bản: DOCTYPE, html, head, body
  • ✅ 6 nhóm thẻ HTML chính và mục đích của từng nhóm
  • ✅ Cú pháp thẻ: thẻ có cặp, thẻ tự đóng, thuộc tính
  • ✅ Tầm quan trọng của HTML Semantic

🚀 Bước tiếp theo:

Trong Bài 2, chúng ta sẽ đi sâu vào nhóm thẻ văn bản (Text Tags) và học cách định dạng text, tạo tiêu đề, đoạn văn, danh sách và các formatting cơ bản.

📝 Tiếp tục Bài 2: Thẻ văn bản →