Bài thực hành tạo Menu đa cấp cho Website sử dụng CSS và HTML
Bước 1: Tạo cấu trúc HTML cho menu
Mình sử dụng đoạn HTML để tạo menu như sau:
<ul class="nav">
<li><a href="#">Trang chủ</a></li>
<li>
<a href="#">Sản Phẩm</a>
<ul class="sub-menu">
<li>
<a href="#">Hoa quả</a>
<ul class="sub-menu">
<li><a href="#">Táo</a></li>
<li><a href="#">Kiwi</a></li>
<li><a href="#">Cam</a></li>
</ul>
</li>
<li><a href="#">Rau xanh</a></li>
<li><a href="#">Đồ khô</a></li>
<li><a href="#">Gạo</a></li>
</ul>
</li>
<li><a href="#">Dịch vụ</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Liên hệ</a></li>
</ul>
Trong đoạn HTML bạn có thể thấy có nhiều list danh sách <ul> lặp lại. Mỗi danh sách <ul> là một cấp sẽ được hiển thị. Các thẻ <ul> con sẽ nằm trong thẻ <li> của thẻ <ul> cha. Thẻ <ul> cha sẽ có class "nav" các <ul> sẽ có class "sub-menu".
Bước 2: CSS để tạo menu xịn xò cho Website
CSS để menu trông giống menu của một trang web nào
.nav>li{
float: left;
margin-right: 15px;
}
.nav>li>a{
text-transform: uppercase;
color: red;
}
.nav li{
position: relative;
list-style:none;
}
.nav li a{
padding: 10px;
line-height: 20px;
display: inline-block;
}
.nav .sub-menu{
display: none;
position: absolute;
top: 0;
left: 100%;
width: 200px;
background-color: #eee;
padding: 5px 20px;
}
.nav li:hover>.sub-menu{
display: block;
}
.nav>li>.sub-menu{
top: 40px;
left: 0;
}
Mình sẽ giải thích từng đoạn như sau:
.nav>li: Css này được áp dụng cho các thẻ<li>nằm ngay dưới thẻ<ul>có class lànav. Thuộc tínhfloat: left;sẽ giúp các phần tử nằm trên cùng 1 hàng, thuộc tínhmargin-right: 15px;sẽ giúp các phần tử cách nhau 15px về phía bên phải.- .nav>li>a: Css này tác động đến thẻ
<a>nằm trong thẻ<li>con của thẻ<ul>có class lànav. Thuộc tính text-transform: uppercase;sẽ giúp cho các đoạn text trong thẻ<a>in hoa lên,color: red;sẽ cho các text này hiển thị màu đỏ. .nav li: Css này tác động đến tất cả các thẻ li nằm trong thẻ<ul>có class là nav những thẻ<li>không nằm ngay dưới thẻ thẻ chứa class.navcũng sẽ bị tác động. Thuộc tínhposition: relative;sẽ giúp các thẻ<li>không bị ảnh hưởng với bị trí ban đầu (xem bài: [CSS Căn bản] Các thuộc tính position trong CSS).list-style:none;sẽ giúp xóa đi các dấu chấm mặc định trong thẻ<li>..nav li a: Css này tác động đến tất cả thẻ<a>trong menu. Thuộc tínhpadding: 10px;giúp các thẻ a này có khoảng trống viền là 10px,line-height: 20px;làm chiều cao của dòng tăng lên 20px giúp text nằm giữ dòng,display: inline-block;sẽ giúp khóa hiển thị trên dòng, giúp các thuộc tính khác hoạt động tốt..nav .sub-menu: Thẻ này sẽ tác động lên các thẻ<ul>có class.sub-menunằm trong thẻ<ul>có class.nav. Thuộc tínhdisplay: none;sẽ làm ẩn đi các thẻ này.position: absolute;sẽ giúp cho thẻ bám vào thẻ<li>có thuộc tính relative.top: 0;sẽ cho phần này không có khoản trống phía trên,left: 100%;sẽ giúp danh sách này nằm hoàn toàn về phía bên phải của thẻ<li>chứa nó.width: 200px;là chiều rộng của danh sách này,background-color: #eee;là màu nền cho danh sách này,padding: 5px 20px;sẽ giúp nó tạo khoản trống trên/dưới là 5px và phải/trái là 20px..nav li:hover>.sub-menu: Css này sẽ được thực thi khi rê chuột vào thẻ<li>, Tác động lên các thẻ<ul>có class.sub-menu. Thuộc tínhdisplay: block;sẽ giúp khóa hiển thị và giúp thẻ<ul>trực tiếp dưới thẻ<li>được rê chuột vào hiển thị..nav>li>.sub-menu: Css này tác động lên các thẻ<ul>có class.sub-menu. Hai thuộc tính trong đó mình sẽ không nhắc lại nữa.
Cùng xem kết quả nhé:
See the Pen Thuc hanh CSS Menu by Nguyen The Cuong (@nguyen-the-cuong) on CodePen.

