這個是前端面試中遇到的場景題,原理就是修改選單樣式的display屬性的屬性值從none=>block,具體實作見下,重點關注下面幾個部分,
- 給每個section設定浮動,
- 將可繼承屬性設定在section父盒子上,字體相關的屬性,
- 設定懸停時,懸停在section父盒子上,子元素head背景改變;也可以直接懸停在head類,寫作`.head:hover`,但是會出現一個問題就是當滑鼠懸停在li上的時候head會變回最初的樣子,因此推薦將hover放在section上,
- 但是menu展示只能懸停在父盒子section上,因為本身不展示(不能懸停在head上,head不是父盒子),
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>懸停下拉選單</title>
<style>
/* 通配符、a、li必要的去除既有樣式 */
* {
margin: 0;
padding: 0;
}
a {
text-decoration: none;
color: black;
}
/* li在這里只去掉既有樣式 不規定寬度 */
li {
list-style: none;
}
/* flex布局每個作為item的section */
.container {
margin: 50px auto;
width: 40%;
height: 40px;
display: flex;
/* space-evenly 第一次見到 */
justify-content: space-evenly;
background-color: skyblue;
}
/* 浮動只需要在每個section里做就行 */
/* 給section設定"字號、文本對齊和行高" => 可繼承屬性 */
.section {
float: left;
font-size: 16px;
line-height: 40px;
text-align: center;
}
/* 這里規定懸停時head的樣式 */
/* 也可以寫作.head:hover */
.section:hover .head {
color: white;
background-color: orange;
}
/* 整個menu一開始是看不到的 同時規定樣式 */
.menu {
display: none;
background-color: transparent;
}
/* 懸停后就可以看到menu了 只能懸停父盒子 */
.section:hover .menu {
display: block;
}
/* 規定懸停時li的樣式 */
.menu li:hover {
background-color: orange;
}
</style>
</head>
<body>
<div class="container">
<div class="section">
<a href="#" class="head">寫論文</a>
<ul class="menu">
<li>查資料</li>
<li>記筆記</li>
<li>復現</li>
</ul>
</div>
<div class="section">
<a href="#" class="head">學前端</a>
<ul class="menu">
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
<li>LeetCode</li>
</ul>
</div>
<div class="section">
<a href="#" class="head">小日子</a>
<ul class="menu">
<li>吃飯</li>
<li>睡覺</li>
<li>打豆豆</li>
</ul>
</div>
</div>
</body>
</html>
最終效果如下,

Tips:另外還有個類似的題目是點擊實作下拉選單,這個不一樣的是要添加點擊事件,在JS里寫,之后再補充,也可以選擇將三個section寫作ul li的形式,這樣嵌套兩層ul也可以實作,語意更好,留給讀者參考~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/300483.html
標籤:其他
下一篇:http爬蟲簡易版
