如何通過html和css完成下拉菜單的製作?
01-14
例如這種,當然這只是一個例子,其他的也行,如果可以,請簡要說明一下用到哪些技能點和原理。
要求不高的話用bootstrap 就好了。
做這個功能不難,難的是如何封裝和復用。
個人看好polymer這種解決方案。
我也試一下。這裡大部分答案都是hover事件觸發下拉菜單出現。其實我總覺得這樣不太自然,所以我儘力去做成(偽)點擊觸發。---------------------------------------------------------------------# 具體想法:菜單是&, 下拉菜單的容器是&...&
然後利用a:focus + .dropdown{ ... } 來實現。---------------------------------------------------------------------要點1:CSS如何實現影響其他元素?看這裡 &> html - How to affect other elements when a div is hovered要點2: 如何做出(偽)點擊觸發?
基本用 a:focus,個人感覺自然一點。當然如果失去焦點,下拉菜單容器也會相應地隱藏。
--------------------------------------------------------------------# HTML BODY 部分代碼:
&
&Menu&
&
&
&Option 1&
&Option 2&
&Option 3&
&Option 4&
&
&
&
#HTML CSS 部分代碼:
html, body{
font-family: Arial, Helvetica, sans-serif;
font-size:16px;
}
a{
display: block;
width:50px;
border:1px solid #333;
background-color:white;
padding:3px;
text-align: center;
text-decoration: none;
}
a:hover{ background-color:#EEE; }
a:focus + .drop-down{ display: inline-block; }
.drop-down{
display: none;
}
ul{
border:1px solid #333;
display: inline-block;
margin-top:1px;
padding:0px;
}
ul&>li{
height: auto;
padding: 3px 10px;
border-bottom: 1px solid #333;
text-align: center;
vertical-align: middle;
}
ul&>li:last-child{
border:0px solid transparent;
}
ul&>li:hover{
background-color:#DDD;
}
-----------------------------------------------------------------------
最後實現效果:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~還請多多指出不足之處。
希望對題主有幫助。
無腳本,純HTML和 CSS 實現的多級下拉菜單,在非 IE 內核瀏覽器和 IE8+ 表現完美。
主體使用ul&>li&>ul&>li&>......嵌套定義多級。
&
&
&
&
&純 CSS 多級菜單&
&
&
&
&
&
&&Link&&
&&Link&&
&
&Link&
&
&&Link&&
&&Link&&
&
&很長很長很長很長很長很長很長很長很長很長&
&
&&Link&&
&&Link&&
&
&LinkLink&
&
&
&Link&
&
&&Link&&
&&Link&&
&&Link&&
&&Link&&
&&Link&&
&
&
&&Link&&
&
&span 菜單項&
&
&&span 菜單項& &
&&Link&&
&&Link&&
&&Link&&
&&Link&&
&
&
&&Link&&
&&Link&&
&
&
&&Link&&
&&Link&&
&
&
&&Link&&
&&Link&&
&
&
&&Link&&
&&Link&&
&
&
&
&
既然你這麼問了,我就當你是新手了,還好,我也是新手。
下面開說:
感覺用select標籤效果好像不是很好,效果如下:
不如直接像 @周黎偉所說的,用一個button加上4個div
首先複習一下基本知識:
display:
所以這裡我用inline-block
代碼如下:
希望大神們能批評指正最後的效果如圖:
&
&
&
&
&下拉菜單&
&
&
&
&
&
&
按鈕&
&
&
&下拉菜單&
&下拉菜單&
&下拉菜單&
&下拉菜單&
&
&
&
&
&
幾個下拉菜單display:none按鈕 :hover 給下拉菜單display:block也許可以
這個是網易雲課堂前端微專業的頁面布局的期末測試題。
更正一點小錯誤,只有一個單選按鈕時,選中後就不能取消選中了。所以最好用複選按鈕。
原答案如下
===========================樓上有同學寫了css用偽類:hover實現的下拉菜單 這是一種 我再補充下
下拉菜單拋開樣式的不同 交互上無非兩種
滑鼠移到button上出現菜單(如樓上)
以及點擊後出現菜單(我要說的) 題主問的是html+css 而很多同學提到了用js添加click事件 這也是大多數下拉菜單的做法
不過為了不跑題 就只用html+css 不用js 那就考css基本功了 這裡簡單說下思路
html結構如下&點擊我出現下拉菜單&
&
&
&
&XXX&
&XXX&
&XXX&
&XXX&
&
&
css中的單選按鈕和複選按鈕有個特別的偽類 :checked
在下拉菜單的按鈕上 覆蓋一個單選或複選按鈕 使其透明度為0(opacity:0) 寬高與按鈕相同 彷彿不存在 但其實它就蓋在按鈕上 (更改其定位方式,絕對定位或相對定位均可實現,略)然後你應該懂了
input[type=checkbox] + div { display:none; }
input[type=checkbox]:checked + div { display:block;}
這樣不需要javascript就實現了點擊出現下拉菜單 :)
&
&
&
&
&css實現下拉菜單&
&
&
&
&
&
&&按鈕1&&
&
&按鈕2&
&
&
&
&按鈕3&
&
&&下拉菜單項&&
&&下拉菜單項&&
&&下拉菜單項&&
&
&
&&按鈕4&&
&&按鈕5&&
&
&
&
&
看到問題,我翻出了以前練習的demo原理就是通過:hover偽類來控制子選項的顯示,默認是隱藏的技能點都是最基本的單個屬性了,比如display,position,float先看HTML結構,最外層的ul&>li是一級菜單,一共有五個按鈕。其中,第二個和第三個按鈕下面各有一個無序列表,這個無序列表裡面放的就是下拉菜單。ul li ul {
display: none;
}
這個聲明表示隱藏下拉菜單。
ul li:hover ul{
display: block;
}
這個聲明表示滑鼠移到一級菜單的按鈕上面時,顯示它的後代ul元素。
滑鼠沒有放在按鈕上面,應用第一個樣式,這時下拉菜單隱藏的,當你滑鼠放在按鈕上面,應用第二個樣式,這時下拉菜單是顯示的。
用列表,隱藏,然後hover.的時候block就可以了
Css-only Alternative to the Select Element
如果想用純css實現click效果:http://tympanus.net/codrops/2012/12/17/css-click-events/
推薦下自己寫的jquery dropdown拓展,應該滿足你的要求yegao/dropdown 求star,哈哈
好像作業問題
很簡單,把下拉內容放在hover的標籤底下即可,平時隱藏
html頁面結構&
&
&
&
&Document&
&
&
&
&
&按鈕&
&
&&下拉列表項&&
&&下拉列表項&&
&&下拉列表項&&
&&下拉列表項&&
&
&
&
&
&
&
只要設置容器類名 .dropdown、控制按鈕 .dropdown-controller、隱藏列表 .dropdown-list
即可顯示出樣式css樣式(用個編譯器編譯下,因為sass文件的層次看起來更好讀一點)
body {
font-size: 11pt;
margin: 0;
}
a {
text-decoration: none;
color: #333;
[role="button"] {
display: inline-block;
margin-bottom: 1px;
padding: 10px 20px;
border: 1px solid #ddd;
background: #eee;
}
}
ul {
list-style: none;
margin: 0;
padding: 0;
[role="hidden-list"] {
display: none;
width: 100px;
border: 1px solid #ddd;
li {
// padding: 10px; 一般可能會把內邊距加在li標籤的同學注意啦。。。
a{
display: inline-block;
padding: 10px;
}
:hover {
background: #ddd;
}
}
}
}
樣式就不多說什麼,按照題主的寫的,至於有一點說一下,為了擴大下拉列表項的安全點擊範圍,給內嵌標籤a設置內邊距,而不是給li設置邊距。
js文件 var dropdownContainer = $(".dropdown")[0];
var dropdownController = $(".dropdown .dropdown-controller")[0];
var dropdownList = $(".dropdown .dropdown-list")[0];
// 設置role顯示樣式
$(dropdownController).attr("role", "button");
$(dropdownList).attr("role", "hidden-list");
$(dropdownController).on({
focus: function() {
$(dropdownList).fadeIn("normal");
},
blur: function() {
$(dropdownList).fadeOut("normal");
}
});
如果只要功能,那麼select標籤足以……
如果真的其他也行……這不就是一個button+四個div么……用css修改各自樣式,div的display屬性設置為none用js添加onclick事件(加一個if判斷可反覆修改div的出現和消失)和mouseover、mouseout事件以上所有發言來自一個自學前端不到20個小時的人……若有貽笑大方之處,敬請諒解
推薦閱讀:
※怎樣理解HTML5和CSS3的語義化標籤? ※為什麼W3C要制定content-box盒子模型?IE5.5之前的IE盒子模型放在今天來看也是極好的啊 ※有了css3還需要js么?
TAG:前端開發 | HTML5 | CSS3 | 前端入門 |