Chuyên mục về tiện ích menu được nghiên cứu và ứng dụng bởi [FD's BlOg] – và được marketing bởi phattrien▲so. Trong thời gian trước đã giới thiệu với các bạn bài viết Tạo Tabs menu mouse over cho Blogspot là menu dạng nằm ngang kèm theo hiệu ứng đóng mở menu con khi click chuột(Tab Menu Mouseover) giống như của vnexpress.net.
Lần này xin hướng dẫn các bạn thực hiện style menu mới theo cách của [FD's BlOg] và style này giống như trang vnexpress.net chỉ có màu sắc khác chút xíu. Bạn có thể dùng photoshop tùy chỉnh lại màu sắc theo ý mình
Xem demo ở đây : LIVE DEMO
Hình ảnh minh họa:
☼ Sau đây là các bước thực hiện :
1. Vào bố cục
2. Vào chỉnh sửa code HTML
3. Chèn đoạn code bên dưới vào trước thẻ đóng </head>
<style type="text/css">
.parent-menu, .sub-menu {width:800px;}
#topmenu {height:46px; margin-bottom:10px;z-index:-10px;}
.fl {float:left;}
#topmenu {float:left;}
.fr {float:right;}
.parent-menu {height:25px; font:11px tahoma; color:#ffffff; text-align:center; background:#f5f5f6 url('http://i342.photobucket.com/albums/o433/bkprobk/bg-fd.gif') repeat-x 0px -46px;}
.pmenu-sep {width:25px;}
.pmenu-normal{height:15px; padding:7px; cursor:pointer;}
.pmenu-normal, .pmenu-active, .pmenu-normalleft, .pmenu-normalright, .pmenu-activeleft, .pmenu-activeright {cursor:pointer;}
.pmenu-normalleft, .pmenu-normalright, .pmenu-activeleft, .pmenu-activeright {width:3px; height:25px;font-size:1px;}
.pmenu-active {height:15px; padding:7px; color:#004f8b; background:#f5f5f6 url('http://i342.photobucket.com/albums/o433/bkprobk/bg-fd.gif') repeat-x 0px -73px;}
.pmenu-activeleft {height:25px; background:#f4f5f6 url('http://i342.photobucket.com/albums/o433/bkprobk/bg_corner.gif') no-repeat 0px 0px;}
.pmenu-activeright {height:25px; background:#f4f5f6 url('http://i342.photobucket.com/albums/o433/bkprobk/bg_corner.gif') no-repeat 0px -27px;}
.sub-menu {height:21px; background:#f5f5f6 url('http://i342.photobucket.com/albums/o433/bkprobk/bg-fd.gif') repeat-x 0px -100px;}
.smenu-content {width:678px; height:17px;padding:2px 7px;}
.smenu-content2 {width:892px; height:17px;padding:2px 7px;}
.smenu-content3 {width:534px; height:17px;padding:2px 7px;}
.smenu-content ul {width:50%;height:17px;margin:0px;padding:0px;list-style-type:none;}
.smenu-content li{float:right;padding:0px 5px;}
.smenu-content li img{border:0px; vertical-align:middle}
.sub-menu {position:relative; font: 12px arial; }
.parent-menu, .sub-menu, .sub-menucontent {overflow:hidden;}
.link-submenu {font:11px arial; color:#004f8b; text-decoration:none;}
.link-submenu:hover {text-decoration:underline;}
.sep-fmenu{width:2px; height:26px; background:#f4f5f6 url('http://i342.photobucket.com/albums/o433/bkprobk/bg_corner.gif') no-repeat -5px -138px;}
</style>
<script type="text/javascript">
var menu_fid = new Array(
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21
);
var menu_pid = new Array(
0, // home
0, // Menu1
0, // Menu2
0, // Menu3
0, // Menu4
0, // Menu5
2, // sub 1.1
2, // sub 1.2
2, // sub 1.3
3, // sub 2.1
3, // sub 2.2
3, // sub 2.3
4, // sub 3.1
4, // sub 3.2
4, // sub 3.3
5, // sub 4.1
5, // sub 4.2
5, // sub 4.3
6, // sub 5.1
6, // sub 5.2
6 // sub 5.3
);
var menu_name = new Array(
'Home',
'Menu 1',
'Menu 2',
'Menu 3',
'Menu 4',
'Menu 5',
'Submenu 1.1',
'Submenu 1.2',
'Submenu 1.3',
'Submenu 2.1',
'Submenu 2.2',
'Submenu 2.3',
'Submenu 3.1',
'Submenu 3.2',
'Submenu 3.3',
'Submenu 4.1',
'Submenu 4.2',
'Submenu 4.3',
'Submenu 5.1',
'Submenu 5.2',
'Submenu 5.3'
);
var menu_path = new Array(
'http://fandung.blogspot.com/',
'/Menu1/',
'/Menu2/',
'/Menu3/',
'/Menu4/',
'/Menu5/',
'/menu1/submenu1.1/',
'/menu1/submenu1.2/',
'/menu1/submenu1.3/',
'/menu2/submenu2.1/',
'/menu2/submenu2.2/',
'/menu2/submenu2.3/',
'/menu3/submenu3.1/',
'/menu3/submenu3.2/',
'/menu3/submenu3.3/',
'/menu4/submenu4.1/',
'/menu4/submenu4.2/',
'/menu4/submenu4.3/',
'/menu5/submenu5.1/',
'/menu5/submenu5.2/',
'/menu5/submenu5.3/'
);
var menu_show = new Array(
0, // home
0, // Menu1
0, // Menu2
0, // Menu3
0, // Menu4
0, // Menu5
0, // sub 1.1
0, // sub 1.2
0, // sub 1.3
0, // sub 2.1
0, // sub 2.2
0, // sub 2.3
0, // sub 3.1
0, // sub 3.2
0, // sub 3.3
0, // sub 4.1
0, // sub 4.2
0, // sub 4.3
0, // sub 5.1
0, // sub 5.2
0 // sub 5.3
);
</script>
<script type="text/javascript" language="javascript" src="http://fandung.110mb.com/JS-files/vne-menu/Menu1-fix.js"></script>
- Ở phần code CSS, để thay đổi hình nền, các bạn có thể down các file ảnh về (link màu cam, rồi dùng photoshop tùy chỉnh lại theo ý mình).
- Phần chính của thủ thuật này là việc chỉnh sửa các mảng (menu_fid, menu_pid, menu_name, menu_path, new Array) trong đoạn code javascript ở trên.
a. mảng menu_fid :
- các dãy số tương ứng trong mảng này chính là id của các menu (menu chính + menu phụ), ví dụ ta có tổng cộng 10 menu (cả chính và phụ) thì con số của mảng này là từ 1 tới 10.
- Như ở trong đoạn code JS trên, ta có 6 menu chính và 15 menu phụ thì dãy số của chúng ta sẽ lên tới 21. nếu các bạn điền dãy số này lớn hơn 21 thì vẫn không sao, nhưng nếu nhỏ hơn 21 thì các menu sau cùng sẽ ko hiển thị được (cụ thể ở đây các submenu 5 sẽ hiển thị không đủ)
(bạn cần tính toán tổng số các menu và submenu để đưa ra dãy số chính xác)
b. mảng menu_pid :
- Mảng này giúp tạo bố cục của menu.
- Các menu chính được quy định bằng các con số 0
- Còn các menu phụ sẽ được quy định bằng các con số tiếp theo, và giống nhau (ở đây ko sử dụng dãy số 1 là do số 1 được đặt cho menu HOME), và như thế submenu 1 sẽ bắt đầu bằng các dãy số 2 giống nhau, tiếp theo submenu 2 là các dãy số 3 , ...
- Muốn thêm hoặc bớt các menu chính hoặc phụ, ta chỉ cần thêm hoặc bớt các con số tương tự trong dãy số là được (lưu ý việc thêm hoặc bớt phải thực hiện đồng nhất ở 5 mảng)
c. mảng menu_name :
- Mảng này sẽ quy định tên cho các menu chính và phụ.
(Đây là phần bạn đặt tên các menu hiển thị )
d. mảng menu_path :
- mảng này sẽ thiết lập địa chỉ liên kết cho các menu chính và phụ.
- thay thế các đoạn /menu1/submenu1.1/ , /menu1/submenu1.2/ , ... thành các link tương ứng với menu đó.
- lưu ý là vị trí các phần tử trong mảng này và mảng menu_name phải khớp nhau, khi đó đường dẫn tới các menu mới chính xác.
e. mảng menu_show :
- các phần tử ở mảng này được biểu diễn bằng những con số 0. Lưu ý là tổng số các con số 0 phải bằng tổng các menu chính và phụ.
Một vài lưu ý sau cùng : khi tùy chỉnh lại các phần tử trong mảng, phải đảm bảo số lượng các phần tử trong 5 mảng bằng nhau, và phải khớp với nhau theo đúng thứ tự của nó, và điều quan trọng nữa là chỉ có phần tử cuối cùng trong mảng mới ko có dấu phẩy (,) theo sau, nếu sai xót thì code sẽ bị lỗi.
4. Sau khi tùy chỉnh xong. Save template
5. Tạo 1 widget HTML/javascript và dán đoạn code bên dưới vào:
<div id="topmenu">
<div class="parent-menu" id="parent-menu"></div>
<div class="sub-menu">
<div class="fl"><img src="http://i342.photobucket.com/albums/o433/bkprobk/fd-icon.gif" alt="" height="21" /> </div>
<div class="smenu-content fl" id="submenu" onmouseover="clear_delayhide();activeMenuParent();" onmouseout="resetit();"> </div>
</div>
</div>
<script type="text/javascript" language="javascript">
menuobj=document.getElementById? document.getElementById("submenu") : document.all? document.all.submenu : document.layers? document.dep1.document.dep2 : ""
Active(); writeParentMenu(); reWriteMenu();
</script>
- ở đoạn code trên, có thể thay đổi logo hiển thị ở submenu (code màu xanh) thành logo của bạn . Nếu không muốn hiển thị nó thì có thể xóa nó đi.
Khi bạn áp dụng cho blog bạn, mỗi menu chính sẽ có các menu phụ nhiều ít khác nhau, vì thế nếu bạn dùng nguyên file JS mình đưa sẽ hiển thị không được tốt lắm. Vì vậy để việc hiển thị tốt nhất, bạn hãy tự mình điều chỉnh lại việc hiển thị của mỗi submenu.
☼ Sau đây mình sẽ hướng dẫn các bạn thực hiện việc điều chỉnh này:
- Các bạn download file JS mà mình vừa cập nhật về.
- Mở nó lênh bằng NotePad, và tìm đến đoạn code sau :
switch (parseInt(which)){
case 3: menuobj.className = 'smenu-content fl'; thecontent = writeBlank(18).concat(thecontent); break;
case 4: menuobj.className = 'smenu-content fl'; thecontent = writeBlank(33).concat(thecontent); break;
case 5: menuobj.className = 'smenu-content fl'; thecontent = writeBlank(55).concat(thecontent); break;
case 6: menuobj.className = 'smenu-content fl'; thecontent = writeBlank(70).concat(thecontent); break;
case 7: menuobj.className = 'smenu-content fl'; thecontent = writeBlank(88).concat(thecontent); break;
case 8: menuobj.className = 'smenu-content fl'; thecontent = writeBlank(108).concat(thecontent); break;
case 9: menuobj.className = 'smenu-content fl'; thecontent = writeBlank(110).concat(thecontent); break;
default:
menuobj.className = 'smenu-content fl';
break;
}
- Các code màu đỏ chính là khoảng căn lề trái của các submenu, các bạn thấy nó tăng dần lên tương ứng với từng menu chính. Xem hình dưới đây sẽ rõ :

Bản lưu dự phòng:
1. File http://fandung.110mb.com/JS-files/vne-menu/Menu1-fix.js download tại đây.
2. Ảnh http://i342.photobucket.com/albums/o433/bkprobk/bg-fd.gif download tại đây
3. Ảnh http://i342.photobucket.com/albums/o433/bkprobk/bg_corner.gif download tại đây
Nguồn: [FD's BlOg]
Cám ơn bạn chia sẻ bài viết rất hay!
ReplyDeleteNhưng cho mình hỏi làm sao để chiều dài của thanh menu đó luôn đúng bằng phần nội dung như của bạn?
Mình đã thử làm nhưng nó chỉ lửng đến giữa trang, cho dài ra thì khi thu nhỏ cửa sổ web browser lại thì nó lại thò ra khỏi phần nội dung (ra ngoài phần nền - như phần nền đen của bạn)...
Thanks!
@Dzung Duong Chào anh, như hướng dẫn trên thì anh thêm vào phần Tạo 1 widget HTML/javascript nên nó vậy, như trang vnpressnet.com này tôi copy đoạn mã ở bước 5 và dán vào trực tiếp trong Template (vào Blogger - > Vào chỉnh sửa code HTML và dán nó dưới thẻ đóng /div của Header, anh có thể làm tương tự có thể dán nó trước hoặc sau phần (Advertising Area!) trên mẫu template của anh.
ReplyDeleteChúc anh thành công, có gì thắc mắc cứ comment nhé.
Bạn ơi! Mình muốn tạo menu ngang và chia cột cho blog của mình nhưng làm theo hướng dẫn của bạn ko được.
ReplyDeleteBạn có thể hướng dẫn rõ hơn được ko?
Cai menu thi lam nhu huong dan la duoc khong co van de gi, con chuyen chia cot cho blog/. Thong thuong minh muon blog bao chon minh chon ngay tu dau hon la chia them cot ban a.
ReplyDeleteMình đã làm như bạn hướng dẫn, dán trực tiếp vào Template nhưng vẫn không được.
ReplyDeleteBạn tìm ra nguyên nhân thì hướng dẫn mình fix nhé...
Many thanks!
Anh Chính ơi, anh update thiếu rồi kìa
ReplyDeleteCái này đẹp quá đại ca ơi ...Nhìn thích thật !
ReplyDeleteNếu mà template của mình đã có menu rồi vậy phải xoá nó đi để bỏ cái này vào hả anh ? Mà không dám xoá , xoá bậy bạn sợ hư lắm anh Chính :)
ReplyDeleteNếu thế thì em copy cái code mà hướng dẫn ở trên mà dán vào widget HTML/javascript đó, rồi vào template tìm đến code chứa cái menu có sẵn trong temp và thay thế nó là sẽ được thôi.
ReplyDeletethẻ đóng /header la ở đâu vậy PTS
ReplyDelete@2 Salon's Nhung: bạn vào Edit HTML và tìm với /head đó.
ReplyDeletekiem nghiem tai www.bimatrongdem.blogspot.com
ReplyDeleteôi anh phattrienso@so ơi! em làm theo anh hướng dẫn nhưng ko đc. khi Save vào nó chỉ hiện ra cái thanh menu thôi. Trong đấy chả hiện ra chữ gì cả :( Giúp em với. Cảm ơn anh!
ReplyDeleteĐọc thật ký vào rồi làm em gái pooh, nếu có vấn đề gì pm lại cho anh.
ReplyDeleteLàm sao để active được menu khi click vào menu cấp 2 hả các bạn ?Mình ko biết nên rất mong các bạn help mình.Thank alot
ReplyDeleteBạn xman85 chưa thông thạo thì nên đọc kỹ hướng dẫn, thay thế các đoạn /menu1/submenu1.1/ , /menu1/submenu1.2/ , ... thành các link tương ứng với menu đó.
ReplyDeleteAnh ơi anh biết làm menu bằng sothink không. Em không biết bước cuối chuyển lên blogspot kiểu gì nữa. Anh giúp em với. Em dùng bản sothink 9.2
ReplyDeleteAnh ơi sao làm như trên em thấy submenu không có màu
ReplyDeleteBản này sau khi test xong mình đã phát hiện ra 1 lỗi đó là thiếu mất giá trị của biến PAGE_FOLDER. Có lẽ khi copy file nguồn ở http://vnexpress.net thì bạn đã copy thiếu mất dòng này
ReplyDeletevar PAGE_SITE=0;
var PAGE_FOLDER=1;
var PAGE_ID=1;
var DOMESTIC_IP=1
Vì vậy, sau khoảng delay là 500ms, sub menu biến mất mà ko trở về menu Home như http://vnexpress.net. Mình chỉ có đóng góp nhỏ vậy thui
mình làm ko được bạn ơi!
ReplyDeletenó báo lỗi
"Mẫu của bạn không thể được phân tích cú pháp vì được tạo không đúng. Hãy đảm bảo tất cả các phần từ XML được đóng chính xác.
Thông báo lỗi XML: The reference to entity "suy" must end with the ';' delimiter."
vậy là sao?
thanks ! cái này mình đang cần thì tìm được ! thán !
ReplyDelete