(中級)縱向選單
本文節選自《CSS設計指南(第3版》。
第1章完全免費試讀,電子書線上熱賣中:http://www.ituring.com.cn/book/1111以下內容節選自第6章“介面元件”。
先從最簡單的情況開始講,通過下面這個簡單的例子,你會知道把列表轉換成選單的關鍵技術。
<nav class="list1">
<ul>
<li><a href="#">Alternative</a></li>
<li><a href="#">Country</a></li>
<li><a href="#">Jazz</a></li>
<li><a href="#">Rock</a></li>
</ul>
</nav>
以上標記給每個列表項的文字都加了連結標籤,讓它們都變得可以點選。(每個連結中的#
是URL佔位符,將來可以替換成真正的URL。)
首先,我們通過第一個例子來展示幾個問題,很多初學者在為導航連結寫樣式的時候都會遇到這些問題。然後,再告訴你怎麼解決它們。無論如何,這些CSS應用到HTML之後,會得到一個看起來很簡潔的選單,如圖6-1所示。
/*去掉預設的內邊距和外邊距*/ * {margin:0; padding:0;} /*設定本例中選單的大小和位置*/ nav {margin:50px; width:150px;} /*給選單加上邊框*/ .list1 ul {border:1px solid #f00; border-radius:3px; padding:5px 10px 3px;} /*去掉專案符號併為連結新增間距*/ .list1 li {list-style-type:none; padding:3px 10px;} /*“非首位子元素”選擇符*/ .list1 li + li {border-top:1px solid #f00;} /*為連結新增樣式*/ .list1 a {text-decoration:none; font:20px Exo, helvetica, arial, sans-serif; font-weight:400; color:#000; background:#ffed53;} /*懸停高亮*/ .list1 a:hover {color:#069;}
圖6-1 應用樣式之後的無序列表,從箭頭游標可知,沒有文字的區域是不能點選的
新增這些樣式沒什麼難度。HTML5新增的nav
元素在語義上很恰當,因此我們用它作為導航選單的容器,還給它新增了一個類作為設定樣式的上下文。
使用“非首位子元素”選擇符
前面的CSS程式碼中有兩點特別值得一說。首先,加粗的li + li
選擇符的意思是“任何跟在li
之後的li
”。
對於連續的元素——比如這裡多個li
,這個選擇符會選擇除第一個之外的所有li
元素。這樣,就可以給除第一個li
之外的所有列表項上方加一條邊框。假如我只簡單使用li
選擇符,那第一個列表項上方也將被加上邊框,而這不是我們想要的。我把這種選擇符稱為“非首位子元素”選擇符,它在選擇列表時非常實用。當然,也有實現相同效果的其他方法,比如
/*給所有li上方新增一條邊框*/
li {border-top:1px solid #f00;}
/*去掉第一個li上方的邊框*/
li:first-child {border-top:none;}
讓列表行可以點選
在圖6-2中,我為每個連結都加上了背景色,以便顯示相應連結可點選區域的大小。如圖所示,目前只有文字是可以點的,因為連結(a
)是行內元素,它會收縮幷包住其中的文字。然而,更好的使用者體驗是讓列表項所在的整行都能點選。之所以要重點講這個問題,是因為我發現很多站點都沒有這麼做。結果就是使用者必須用滑鼠點選文字,點選文字之外的地方沒有反應。
此外,在每個li
元素的上方和下方,各有3畫素的內邊距,導致連結文字與列表項邊框之間有了距離。正因為有了這段距離,當使用者滑鼠移動到連結間的間隙時,游標會從“懸停於連結之上”時的小手形狀,變成常規的箭頭形狀。
圖6-2 臨時加的背景色讓我們看清了a
元素實際可以點選的區域大小,如圖所示,游標在經過兩個連結的間隙時從小手變成了指標
要解決上述問題,首先得把內邊距從li
元素轉移到連結內部,然後讓連結完全填滿整個列表項。
* {margin:0; padding:0;} nav {margin:50px; width:150px;} .list1 ul {border:1px solid #f00; border-radius:3px; padding:5px 10px 3px;} .list1 li {list-style-type:none; padding:3px 10px;} .list1 li + li a {border-top:1px solid #f00;} .list1 a {display:block; padding:3px 10px; textdecoration: none; font:20px Exo, helvetica, arial, sansserif; font-weight:400; color:#000; background:#ffed53;} .list1 a:hover {color:#069;}
把選擇符li + li
變成li + li a
,就可以把上邊框新增到列表項後面的列表項所包含的連結元素上(雖然有點繞,但你應該明白我的意思吧?)。而且,我還把內邊距從列表項轉移到了連結內部。這樣,連結上下就互相接觸了,中間沒了間隙,滑鼠經過時游標狀態也不會變了。最後,還要把每個連結的display
屬性設定為block
,這樣連結元素的盒子就會由“收縮包圍內容”變成“擴充套件填充父元素”。換句話說,連結的可點選區域將擴大到整個列表行。圖6-3清晰地說明了經過這些改進後的效果。
圖6-3 每個連結都填滿了整個列表項,所以整個區域都可以點選了。左圖的背景色顯示了可點選區域,而右圖則顯示了去掉測試用的背景色之後的最終效果
相關文章
- table 表格單元格橫向與縱向合併
- JavaScript橫向二級導航選單效果JavaScript
- excel文字橫向變縱向快捷鍵 excel文字方向改為縱向Excel
- js物件導向封裝級聯下拉選單列表JS物件封裝
- 縱向控制的橫向滾動
- 影片操縱中的新AI技術轉向AI
- Android -- SeekBar(II)縱向seekBarAndroid
- 視訊操縱中的新AI技術轉向AI
- 矩陣:橫向關係和縱向關係矩陣
- CSS多級選單CSS
- 實現單擊一級選單顯示或隱藏二級選單
- Vue 資料雙向繫結實現二級下拉懸浮選單Vue
- 【java】Aspose.Words 合併單元格2種情況(橫向合併,縱向合併)Java
- python程式: 三級選單Python
- HTML/CSS 二級選單HTMLCSS
- CSS 二級下拉選單CSS
- CSS二級下拉選單CSS
- vue2+swiper 縱向弧形滾動效果Vue
- 程式語言對比手冊-縱向版[-類-]
- JavaScript 省市級聯選單原理JavaScript
- Vue 遞迴多級選單Vue遞迴
- JavaScript 三級導航選單JavaScript
- Python10 三級選單Python
- JavaScript二級導航選單JavaScript
- jquery實現四級級聯下拉選單jQuery
- iframe中的二級選單被遮蓋怎麼辦?
- CSS3橫向導航選單效果CSSS3
- win10開始選單豎向怎麼設定_win10開始選單豎向設定方法Win10
- jQuery與CSS二級下拉選單jQueryCSS
- CSS多級導航選單效果CSS
- elementUI 多級選單動態渲染UI
- JavaScript二級下拉選單詳解JavaScript
- CSS垂直三級導航選單CSS
- 如何使用 Bootstrap class 向按鈕新增下拉選單boot
- [提問交流]新下載的onethink後臺新增一個頂級選單然後在新增二級選單,新增的二級選單不顯示
- Vue 中雙向繫結 Vs 單向資料流Vue
- vxe-table 秒級渲染萬級資料、極致流暢橫向虛擬滾動與縱向虛擬滾動+自適應動態行高
- 微信小程式------輪播圖------縱向輪播圖微信小程式
- Java實現多級選單(遞迴)Java遞迴