Chào mừng các bạn đến với Rcom Dăm Yi blog - Kho tài liệu bổ ích!, Chúng tôi sẽ từng bước hoàn thiện để bạn đọc cảm thấy hài lòng, hữu ích!
Hiển thị các bài đăng có nhãn Web. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Web. Hiển thị tất cả bài đăng

Thứ Bảy, 20 tháng 12, 2025


5) Giải thích chi tiết cấu trúc code menu Blogspot

Phần này giúp bạn hiểu rõ mỗi nhóm lệnh trong code menu đang làm gì, từ đó bạn có thể:

  • ✔ Tự chỉnh sửa menu theo ý mình
  • ✔ Dạy học sinh cách đọc – hiểu code HTML, CSS, JavaScript
  • ✔ Không còn cảm giác “copy code mà không hiểu”


5.1. Phần HTML – Cấu trúc khung của menu

HTML quyết định menu có bao nhiêu cấp, mục nào là cha – mục nào là con.

a) Thẻ <nav> – vùng điều hướng

<nav class="dy-menu" role="navigation" aria-label="Menu chính">
  • <nav>: thẻ chuyên dùng cho menu điều hướng
  • class="dy-menu": tên lớp để CSS & JavaScript điều khiển
  • aria-label: giúp trình đọc màn hình (accessibility)

b) Logo / tên website

<a class="dy-menu__brand" href="/">DamYiStudy</a>
  • Dùng thẻ <a> để bấm vào quay về trang chủ
  • Có thể thay bằng ảnh logo nếu muốn

c) Menu cấp 1

<ul class="dy-menu__list">
  <li><a href="/">Trang chủ</a></li>
</ul>
  • <ul>: danh sách menu
  • <li>: mỗi mục menu
  • Đây là menu cấp 1 (nằm ngang)

d) Menu có menu con (menu đa cấp)

<li class="has-sub">
  <a class="dy-link" href="/search/label/Tin-hoc">Tin học</a>
  <button class="dy-caret"></button>
  <ul class="sub"> ... </ul>
</li>
  • class="has-sub": đánh dấu mục có menu con
  • ul.sub: chính là menu con
  • button.dy-caret: nút mũi tên (dùng cho mobile)

e) Menu cấp 3

<ul class="sub sub-right">
  • Dùng cho menu con của menu con (cấp 3)
  • sub-right: menu bung sang bên phải

5.2. Phần CSS – Làm đẹp và điều khiển hiển thị menu

CSS quyết định menu có đẹp không, bung ở đâu, có bị cắt không.


a) Khai báo biến màu (rất quan trọng)

:root{
  --dy-green:#0b8f5a;
  --dy-yellow:#facc15;
}
  • Giúp đổi màu toàn bộ menu chỉ bằng 1 chỗ
  • Chuẩn thiết kế hiện đại

b) Fix lỗi dropdown bị cắt

.dy-menu__wrap,
.dy-menu__list,
.dy-menu__list > li {
  overflow: visible !important;
}

👉 Đây là dòng cực kỳ quan trọng trên Blogspot, vì nhiều theme mặc định overflow:hidden làm menu con không hiện.


c) Ẩn menu con mặc định

.sub {
  display: none;
}
  • Menu con ban đầu không hiện
  • Chỉ hiện khi hover (PC) hoặc click (mobile)

d) Hover mở menu trên máy tính

@media (min-width:981px){
  .has-sub:hover > .sub {
    display: block;
  }
}
  • Áp dụng cho màn hình lớn (PC, laptop)
  • Không cần JavaScript vẫn mở được menu

e) Responsive cho điện thoại

@media (max-width:980px){
  .dy-menu__list {
    flex-direction: column;
  }
}
  • Chuyển menu ngang thành menu dọc
  • Phù hợp thao tác chạm

5.3. Phần JavaScript – Điều khiển menu trên mobile

JavaScript chỉ dùng cho mobile, giúp menu hoạt động khi không có hover.


a) Bắt sự kiện nút hamburger

btn.addEventListener('click', function(){
  list.classList.toggle('show');
});
  • Bấm ☰ để mở/đóng menu chính
  • toggle: có thì bỏ, không có thì thêm

b) Mở menu con bằng mũi tên

caret.addEventListener('click', function(e){
  e.preventDefault();
  li.classList.toggle('open');
});
  • Chỉ bấm mũi tên mới mở menu con
  • Bấm chữ vẫn đi link → tốt cho SEO

c) Đóng menu khi bấm ra ngoài

document.addEventListener('click', function(e){
  if(!nav.contains(e.target)){
    ...
  }
});
  • Giúp menu gọn gàng
  • Trải nghiệm người dùng tốt hơn

6) Tổng kết kiến thức học được

  • ✔ Biết cách xây dựng menu đa cấp bằng HTML
  • ✔ Hiểu cách CSS điều khiển hiển thị & responsive
  • ✔ Biết dùng JavaScript để xử lý sự kiện click
  • ✔ Ứng dụng được ngay cho Blogspot và website học tập

Gợi ý học tập: Học sinh có thể thử:

  • Đổi màu menu
  • Thêm mục menu mới
  • Biến menu thành menu dính (sticky)


Bài viết được chia sẻ tại DamYiStudy – Nơi tự học Tin học & kỹ năng số.

Thiết kế Menu đa cấp cho Blogspot (PC hover + Mobile bấm) – Chuẩn đẹp & dễ dùng

Nếu bạn đang làm blog chia sẻ tài liệu học tập (Tin học THPT, Python, Word, Excel, Toán…), thì một thanh menu rõ ràng sẽ giúp người đọc tìm bài nhanh hơn và ở lại lâu hơn.

Trong bài này, mình chia sẻ bộ menu đa cấp:

  • ✅ Menu con 2–3 cấp
  • ✅ Máy tính: rê chuột (hover) là bung menu
  • ✅ Điện thoại: bấm mũi tên để bung menu (không cần hover)
  • ✅ Không bị “cắt dropdown” do theme Blogspot
  • ✅ Màu nhận diện xanh lá + vàng (phù hợp blog giáo dục)

1) Cách gắn menu vào Blogspot để chạy thật

  1. Vào Bố cục (Layout)
  2. Chọn Thêm tiện ích (Add a Gadget)HTML/JavaScript
  3. Dán bộ code menu ở phần 3) vào gadget
  4. Lưu lại và kéo widget menu lên vị trí đầu trang (Header/Top)
  5. Nếu đang có menu cũ (Pages/LinkList), nên ẩn/xóa để tránh xung đột

Mẹo: Nếu bạn chỉ muốn chia sẻ code trong bài viết cho người khác copy, hãy dùng khối code ở phần 3) và dán ở chế độ HTML của bài đăng.


2) Quy ước Label (nhãn) để link chuyên mục gọn & SEO tốt

Blogspot gom bài theo nhãn dạng:

  • /search/label/Python
  • /search/label/Excel

Khuyến nghị: Dùng nhãn không dấu + gạch nối để URL gọn hơn, dễ SEO hơn.

  • python-co-ban, bai-tap-excel, word-dinh-dang, tin-10
  • ❌ Nhãn có dấu / khoảng trắng dễ làm URL xấu và khó quản lý

3) Code Menu đa cấp (Copy & dùng ngay)

Quan trọng: Khi menu chạy thật, bạn dán code này trong Bố cục → HTML/JavaScript. Còn nếu bạn đăng bài chia sẻ code, hãy để nguyên trong khối <pre><code> như bên dưới.

<nav class="dy-menu" role="navigation" aria-label="Menu chính">
  <div class="dy-menu__wrap">
    <a class="dy-menu__brand" href="/" title="Trang chủ">DamYiStudy</a>

    <!-- Mobile toggle -->
    <button class="dy-menu__hamburger" type="button" aria-expanded="false" aria-controls="dy-menu-list">
      <span></span><span></span><span></span>
    </button>

    <ul class="dy-menu__list" id="dy-menu-list">
      <li><a href="/">🏠 Trang chủ</a></li>

      <li class="has-sub">
        <a class="dy-link" href="/search/label/Tai-nguyen">📚 Tài nguyên THPT</a>
        <button class="dy-caret" type="button" aria-label="Mở menu con"></button>
        <ul class="sub">
          <li><a href="/search/label/Tin-10">Tin học 10</a></li>
          <li><a href="/search/label/Tin-11">Tin học 11</a></li>
          <li><a href="/search/label/Tin-12">Tin học 12</a></li>
          <li class="divider"></li>
          <li><a href="/search/label/Toan-10">Toán 10</a></li>
          <li><a href="/search/label/Toan-11">Toán 11</a></li>
          <li><a href="/search/label/Toan-12">Toán 12</a></li>
          <li class="divider"></li>
          <li><a href="/search/label/On-tap-Kiem-tra">Ôn tập – kiểm tra</a></li>
        </ul>
      </li>

      <li class="has-sub">
        <a class="dy-link" href="/search/label/Tin-hoc">💻 Tin học</a>
        <button class="dy-caret" type="button" aria-label="Mở menu con"></button>

        <ul class="sub">
          <li class="has-sub">
            <a class="dy-link" href="/search/label/Python">🐍 Python THPT</a>
            <button class="dy-caret" type="button" aria-label="Mở menu con"></button>
            <ul class="sub sub-right">
              <li><a href="/search/label/Python-Co-ban">Cơ bản</a></li>
              <li><a href="/search/label/Bai-tap-Python">Bài tập</a></li>
              <li><a href="/search/label/De-Python">Đề kiểm tra</a></li>
            </ul>
          </li>

          <li class="has-sub">
            <a class="dy-link" href="/search/label/Word">📝 Word</a>
            <button class="dy-caret" type="button" aria-label="Mở menu con"></button>
            <ul class="sub sub-right">
              <li><a href="/search/label/Word-Soan-thao">Soạn thảo</a></li>
              <li><a href="/search/label/Word-Dinh-dang">Định dạng</a></li>
              <li><a href="/search/label/Mau-Word">Mẫu Word</a></li>
            </ul>
          </li>

          <li class="has-sub">
            <a class="dy-link" href="/search/label/Thiet-ke-web-tinh">🧩 Thiết kế web tĩnh</a>
            <button class="dy-caret" type="button" aria-label="Mở menu con"></button>
            <ul class="sub sub-right">
              <li><a href="/search/label/HTML">HTML</a></li>
              <li><a href="/search/label/CSS">CSS</a></li>
              <li><a href="/search/label/JavaScript">JavaScript</a></li>
            </ul>
          </li>

          <li class="has-sub">
            <a class="dy-link" href="/search/label/Excel">📊 Excel</a>
            <button class="dy-caret" type="button" aria-label="Mở menu con"></button>
            <ul class="sub sub-right">
              <li><a href="/search/label/Ham-Excel">Hàm cơ bản</a></li>
              <li><a href="/search/label/Bai-tap-Excel">Bài tập</a></li>
              <li><a href="/search/label/File-Excel">File mẫu</a></li>
            </ul>
          </li>

          <li class="divider"></li>
          <li><a href="/search/label/Bai-giang-Tin-hoc">📌 Bài giảng</a></li>
        </ul>
      </li>

      <li class="has-sub">
        <a class="dy-link" href="/search/label/Toan-hoc">🧮 Toán học</a>
        <button class="dy-caret" type="button" aria-label="Mở menu con"></button>
        <ul class="sub">
          <li><a href="/search/label/Dai-so">Đại số</a></li>
          <li><a href="/search/label/Hinh-hoc">Hình học</a></li>
          <li><a href="/search/label/Trac-nghiem-Toan">Trắc nghiệm</a></li>
          <li><a href="/search/label/De-thi-Toan">Đề kiểm tra – đề thi</a></li>
        </ul>
      </li>

      <li class="has-sub">
        <a class="dy-link" href="/search/label/Ky-nang-so">🎯 Kỹ năng số</a>
        <button class="dy-caret" type="button" aria-label="Mở menu con"></button>
        <ul class="sub">
          <li><a href="/search/label/Thu-thuat-may-tinh">Thủ thuật máy tính</a></li>
          <li><a href="/search/label/An-toan-thong-tin">An toàn thông tin</a></li>
          <li><a href="/search/label/AI-cho-hoc-sinh">AI cho học sinh</a></li>
          <li><a href="/search/label/Ky-nang-hoc-tap">Kỹ năng học tập</a></li>
        </ul>
      </li>

      <li><a href="/p/lien-he.html">📞 Liên hệ</a></li>
    </ul>
  </div>
</nav>

<style>
:root{--dy-green:#0b8f5a;--dy-green2:#10b981;--dy-deep:#065f46;--dy-yellow:#facc15;--dy-white:#fff;--dy-soft:#ecfdf5;}
.dy-menu,.dy-menu *{box-sizing:border-box;}
.dy-menu{position:relative;z-index:999999;background:var(--dy-green);}
.dy-menu__wrap{max-width:1100px;margin:0 auto;padding:10px 14px;display:flex;align-items:center;justify-content:space-between;gap:10px;overflow:visible;}
.dy-menu__wrap,.dy-menu__list,.dy-menu__list>li{overflow:visible!important;}
.dy-menu__brand{text-decoration:none;font-weight:900;font-size:22px;letter-spacing:.3px;color:var(--dy-yellow);padding:8px 10px;border-radius:12px;}
.dy-menu__list{list-style:none;margin:0;padding:0;display:flex;gap:6px;align-items:center;}
.dy-menu__list>li{position:relative;display:flex;align-items:center;}
.dy-menu__list a{display:inline-flex;align-items:center;gap:6px;padding:10px 12px;text-decoration:none;border-radius:12px;white-space:nowrap;color:var(--dy-white);font-weight:600;transition:background .18s ease,transform .18s ease;}
.dy-menu__list>li>a:hover{background:var(--dy-green2);transform:translateY(-1px);}
.dy-caret{border:0;background:transparent;cursor:pointer;width:34px;height:36px;border-radius:12px;display:inline-flex;align-items:center;justify-content:center;margin-left:-6px;}
.dy-caret:before{content:"";width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid rgba(255,255,255,.95);transform:translateY(1px);}
.dy-caret:hover{background:rgba(255,255,255,.10);}
.has-sub{position:relative;}
.sub{display:none;position:absolute;left:0;top:100%;min-width:250px;list-style:none;margin:10px 0 0;padding:8px;border-radius:16px;background:var(--dy-white);box-shadow:0 16px 40px rgba(0,0,0,.18);z-index:999999;}
.sub a{display:flex;width:100%;padding:10px 12px;border-radius:12px;color:var(--dy-deep);font-weight:600;}
.sub a:hover{background:var(--dy-soft);color:var(--dy-green);}
.sub .divider{height:1px;margin:6px 8px;background:rgba(6,95,70,.18);}
.sub-right{left:100%;top:0;margin-left:10px;}
@media (min-width:981px){.dy-caret{display:none;}.has-sub:hover>.sub{display:block;}.sub .has-sub:hover>.sub{display:block;}}
.dy-menu__hamburger{display:none;border:0;background:transparent;cursor:pointer;padding:10px 10px;border-radius:12px;}
.dy-menu__hamburger span{display:block;width:22px;height:2px;margin:5px 0;background:#fff;}
@media (max-width:980px){.dy-menu__hamburger{display:block;}.dy-menu__list{display:none;position:absolute;left:0;right:0;top:100%;margin:0;padding:12px;flex-direction:column;align-items:stretch;background:var(--dy-green);box-shadow:0 16px 40px rgba(0,0,0,.22);}
.dy-menu__list.show{display:flex;}
.dy-menu__list>li{flex-wrap:wrap;justify-content:space-between;}
.dy-menu__list>li>a{flex:1;}
.sub{position:static;width:100%;margin:8px 0 0;box-shadow:none;display:none;}
.sub-right{margin-left:0;}
.has-sub.open>.sub{display:block;}}
</style>

<script>
(function(){
  var nav=document.querySelector('.dy-menu'); if(!nav) return;
  var btn=nav.querySelector('.dy-menu__hamburger');
  var list=nav.querySelector('.dy-menu__list');

  if(btn){
    btn.addEventListener('click',function(){
      var isOpen=list.classList.toggle('show');
      btn.setAttribute('aria-expanded',isOpen?'true':'false');
    });
  }

  nav.querySelectorAll('.has-sub > .dy-caret').forEach(function(caret){
    caret.addEventListener('click',function(e){
      e.preventDefault(); e.stopPropagation();
      var li=caret.parentElement;
      Array.prototype.forEach.call(li.parentElement.children,function(sib){
        if(sib!==li) sib.classList.remove('open');
      });
      li.classList.toggle('open');
    });
  });

  document.addEventListener('click',function(e){
    if(!nav.contains(e.target)){
      nav.querySelectorAll('.has-sub.open').forEach(function(li){li.classList.remove('open');});
      list && list.classList.remove('show');
      btn && btn.setAttribute('aria-expanded','false');
    }
  });
})();
</script>

4) Ghi chú quan trọng

  • Muốn menu chạy thật: dán code ở Bố cục → HTML/JavaScript.
  • Muốn đăng bài chia sẻ code: giữ nguyên khối <pre><code> để người đọc copy.
  • Nếu dropdown bị “cắt”: thêm CSS nâng cao:
    #header, .header, .Header, .navbar, .nav-wrapper { overflow: visible !important; }

Chúc bạn dựng blog học tập thật chuyên nghiệp! Nếu bạn muốn phiên bản sticky (dính khi cuộn) hoặc thêm ô tìm kiếm ngay trên menu, mình làm tiếp cho bạn.

Bài đăng phổ biến

💬 Bình luận

💬 Bình luận

📌 Danh sách bình luận