Cách tạo menu dọc đa cấp bằng CSS

Menu của website thường xuất hiện với 2 dạng đó là menu ngang và menu dọc. Về cấu trúc HTML thì không có gì khác nhau là mấy. Nhưng sự khác biệt là do mã CSS.

Bạn hãy tham khảo lại bài Hướng dẫn tạo menu Dropdown bằng CSS chi tiết để so sánh điểm khác nhau với menu dọc là như thế nào nhé.

Đặc biệt hơn khi thiết kế website WordPress bạn cũng có thể áp dụng cách làm như bài viết này. Khi lập trình web từ ban đầu mà không sử dụng mẫu giao diện có sẵn.

Bước đầu tiên bao giờ cũng vậy mình sẽ viết mã HTML trước:

<nav id="menu">
        <ul class="main-menu">
            <li><a href="#">Wordpress</a>
                <ul>
                    <li><a href="#">item</a></li>
                    <li><a href="#">item</a></li>
                    <li><a href="#">item</a></li>
                    <li><a href="#">item</a></li>
                    <li><a href="#">item</a></li>
                    <li><a href="#">item</a></li>
                </ul>
            </li>

            <li><a href="#">HTML</a>
                <ul>
                    <li><a href="#">item</a></li>
                    <li><a href="#">item</a></li>
                    <li><a href="#">item</a></li>
                    <li><a href="#">item</a></li>
                    <li><a href="#">item</a></li>
                </ul></li>

            <li><a href="#">CSS</a>
                <ul>
                    <li><a href="#">item</a></li>
                    <li><a href="#">item</a></li>
                    <li><a href="#">item</a></li>
                    <li><a href="#">item</a></li>
                </ul></li>

            <li><a href="#">JavaScript</a>
                <ul>
                    <li><a href="#">item</a></li>
                    <li><a href="#">item</a></li>
                    <li><a href="#">item</a></li>
                    <li><a href="#">item</a></li>
                </ul>
            </li>
        </ul>
    </nav>

menu-doc-css

Tiếp theo mình sẽ viết mã CSS để làm cho menu trông đẹp hơn.

p, ul, li, div, nav{
padding:0;
margin:0;
}
#menu {
    overflow: auto;
    position:relative;
    z-index:2;
}
/* Thêm màu background */
.main-menu {
   background-color: #0c8fff;
   min-width: 210px;
   float: left;
}
#menu ul {
   list-style-type:none;
}
#menu ul li a {
   padding:10px 15px;
   display:block;
   color:#fff;
   text-decoration:none;
}
#menu ul li a:hover {
   background-color:#007ee9;
}

Thêm tiếp mã Css cho menu ở cấp 2

#menu ul li:hover > ul {
    left: 200px;
}

#menu ul li > ul {
    position: absolute;
    background-color: #333;
    top: 0;
    left: -200px;
    min-width: 210px;
    z-index: -1;
    height: 100%;
}

#menu ul li > ul li a:hover {
    background-color:#2e2e2e;
}

Với đoạn mã này đầu tiên sẽ dùng position: absolute để cho phần tử trôi nổi, tiếp theo dùng top: 0; left: -200px để cố định vị trí so với menu cấp 1.

Để cho cấp 2 hiện ra thì dùng thuộc tính hover và đặt left: 200px lúc này nó sẽ tạo ra khoảng cách với cấp 1 là 200px.

menu-doc-css-1

Để cho menu trượt được bên trái website thì bạn sẽ thêm vào #menu {position: fixed}.

Với kiểu menu đã cấp trượt dọc này không phức tạp lắm phải không. Điều quan trọng là bạn phải sử dụng thành thạo position để căn chỉnh hợp lý là được.

Related Posts

Hover-CSS-1

Hiệu ứng rê chuột trong CSS

CSS là ngôn ngữ trang trí với nhiều hiệu ứng hay. Bạn sẽ thường gặp nhất là khi di chuyển chuột vào một liên kết (Link) hay…

Mẫu Form đăng nhập HTML và CSS đẹp mắt

Trong một số bài viết trên blog này mình đã chia sẻ về cách tạo một Form đăng nhập đơn giản. Nhưng để có một Form đẹp…

form-lien-he-4

Hướng dẫn tạo form liên hệ bằng HTML, CSS

Form liên hệ là một chức năng không thể thiếu cho blog, website. Thông qua Form độc giả, khách hàng có thể yêu cầu admin trợ giúp…

css-code-1

8 Cách viết CSS chuẩn, dễ đọc và tối ưu

Nói tới xây dựng giao diện phía Front-end không thể thiếu CSS. Ngôn ngữ được sử dụng phổ biến để sắp xếp bố cục các phần tử…

Thuộc tính text-shadow trong CSS

Trong những lúc rảnh rỗi mình thường hay nghịch ngợm một vài thứ hay ho tìm thấy trên internet. Đối với CSS thì text-shadow cũng là thuộc…

Thuộc tính Overflow trong CSS

Khi thiết kế web với HTML và CSS đôi khi chúng ta sẽ gặp phải tình trạng văn bản (text) bị tràn ra khỏi phần tử HTML…