天天看點

js,jquery——實作精美的下拉菜單 & 手風琴菜單(二級、三級)

js,jquery實作精美的下拉菜單 & 手風琴菜單 (二級、三級)

1.Demo效果圖:
  • 靜态展示:
    js,jquery——實作精美的下拉菜單 & 手風琴菜單(二級、三級)
  • css-hover( js、jq觸發mouse事件時 ):
    js,jquery——實作精美的下拉菜單 & 手風琴菜單(二級、三級)

    更特别的下拉菜單:

    https://blog.csdn.net/qq_43495629/article/details/87186845

2.代碼展示:
  • Html布局:
    <div class="nav">	
    		<div class="top-nav">
    	<!---------一級菜單開始------------>
    			<ul class="one-items">						 
    				<li><a class="link" href="#">首頁</a>
    		<!---------二級菜單開始------------>
    					<ul class="two-items">               
    						<li><a href="#">産品介紹</a>
    			<!---------三級菜單開始------------>
    							<ul class="three-items">	 
    								<li><a href="#">産品A</a></li>
    								<li><a href="#">産品B</a></li>
    								<li><a href="#">産品C</a></li>
    							</ul>
    			<!---------三級菜單結束------------>
    						</li>
    						<li><a href="#">産品源地</a></li>
    						<li><a href="#">産品預購</a></li>
    						<li><a href="#">評價回報</a></li>
    					</ul>
    		<!---------二級菜單結束------------>
    				</li>
    				<li><a href="#">我的産品</a></li>
    				<li><a href="#">聯系我們</a></li>
    				<li><a href="#">回報</a></li>
    				<li><a href="#">交流論壇</a></li>
    			</ul>
    	<!---------一級菜單結束------------>
    		</div>
    </div>
               
  • css代碼:
    {
    		margin:0;
    		padding:0;
    	}
    	
    	li{
    		list-style-type:none;
    	}
    
    	a{	
    		display:block;
    		text-decoration:none;
    		color:white;
    		font-size:12px;
    	}
    
    	a:hover{
    		color:purple;
    	}
    
    	.nav{
    		width:400px;
    		margin:60px auto;/*為了讓盒子居中顯示*/
    		height:30px;
    		border-radius:5px;
    		box-shadow:0 0 2px #DDD;
    	}
    	
    	.top-nav{
    		width:100%;
    		height:30px;
    	}
    
    	.top-nav ul{
    		width:100%;
    		height:auto;
    	}
    	
    	.top-nav ul li{
    		width:80px;
    		float:left;
    		background-image:linear-gradient(to right,dimgray,gray);
    		line-height:30px;
    		text-align:center;
    		position:relative;
    	}
    
    	.top-nav ul li ul[class="two-items"]:before{
    		content:"";
    		position:absolute;
    		top:-5px;
    		left:5px;
    		margin-left:30px;
    		border-left:5px solid transparent;
    		border-right:5px solid transparent;
    		border-bottom:5px solid #666;
    	}
    
    	.top-nav ul li ul[class="two-items"]{
    		position:absolute;
    		top:35px;
    		left:0;
    		box-shadow:0 0 5px #666;
    		border-radius:5px;
        	display:none;
        	/*z-index:;  這裡沒設定層級是因為父級元素隻是一個單獨的下拉菜單盒子,不會影響頁面結構,如果頁面結構還涉及其他一些元素,不設定層級大小的話,會對整個頁面的結構造成威脅。*/
    	}
    
    	.top-nav ul li ul li{
    		position:relative;
    		float:none;
    		background-image:linear-gradient(to right,plum,salmon);
    	}
    
    	.top-nav ul li ul>li:first-child{
    		border-radius:5px 5px 0 0;
    	}
    
    	.top-nav ul li ul>li:last-child{
    		border-radius:0 0 5px 5px;
    	}
    
    	.top-nav ul li:hover{
    		background-image:linear-gradient(to right,#FF00FF,#E066FF);
    	}
    
    	.top-nav ul li:hover ul[class="two-items"]{
    		display:block;
    	}
    
    	.top-nav ul li ul li:hover ul[class="three-items"]{
    		display:block;
    	}
    
    	.top-nav ul li ul li ul{
     		display:none;
    		position:absolute;
    		top:0;
    		left:85px;
    		/*z-index:;  這裡沒設定層級是因為父級元素隻是一個單獨的下拉菜單盒子,不會影響頁面結構,如果頁面結構還涉及其他一些元素,不設定層級大小的話,會對整個頁面的結構造成威脅。*/
    	}
    
    	.top-nav ul li ul li ul:before{
    		content:"";
    		position:absolute;
    		left:-5px;
    		top:10px;
    		border-top:5px solid transparent;
    		border-right:5px solid #666;
    		border-bottom:5px solid transparent;
    	}
               
  • 原生js(還在想辦法封裝,後期上傳),請先看 jq 代碼:
    //必須引入jquery庫檔案,引用js時,别忘了把css中二級、三級菜單(ul)設定為none;
    
       <script src="js/jquery-3.3.1.js" type="text/javascript"></script>
       
       <script type="text/javascript">
       	$(function(){
       		$("li").has("ul").mouseover(function(){
       			$(this).children("ul").css("display","block");
       		}).mouseout(function(){
       			$(this).children("ul").css("display","none");
       		})
       	});
       </script>
               
3.本案例涉及到的知識點:
  1. css3中的background-image( 背景漸變 )
  2. css3中的box–shadow (盒子陰影)
  3. css3中的border-radius( 邊框圓角 )
  4. css3中的新增選擇器 ( first-child、last-child )
  5. css2中的屬性比對選擇器(sth [class=" "] )
  6. css尖角效果僞類:before
4.對涉及到的知識點做了如下解析:
  • background-image(背景漸變)(

    可能的值:

    js,jquery——實作精美的下拉菜單 &amp; 手風琴菜單(二級、三級)

    漸變類型:==linear-gradient(線性漸變) || radial-gradient(徑向漸變)

    漸變方向(請仔細檢視以下可能的值):

    js,jquery——實作精美的下拉菜單 &amp; 手風琴菜單(二級、三級)
  • box-shadow:(效果請自行檢視

    可能的值:

    box-shadow: X軸偏移量(必須) Y軸偏移量 (必須) [陰影模糊半徑] [陰影擴充半徑] [陰影顔色] [投影方式(預設為外陰影)];

    注:有關css3的更多介紹

    請檢視:link(https://www.imooc.com/learn/33)

  • 類名屬性比對器:

    例如:選擇 div 下 ul 下 類名為"my-classname"的子元素(li)

    寫法:div ul > li [class=“my-classname”]

    <div>
    		<ul>
    			<li class="my-classname"><li>
    			<li><li>
    			<li><li>
    			<li class="my-classname"><li>
    			<li><li>
    		</ul>
    	</div>
               

    更多介紹,請參考:

    link(https://www.imooc.com/learn/33)

  • 僞類元素實作尖角 :(就是利用邊框的四個角拼湊起來,然後再利用transparent來隐藏不需要的部分,一定不能忽視的一點 : 無論是before、after都需要相對于其父級定位。)
    .top-nav ul li ul li ul:before{
    		content:"";
    		position:absolute;
    		left:-5px;
    		top:10px;
    		border-top:5px solid transparent;
    		border-right:5px solid #666;
    		border-bottom:5px solid transparent;
    	}
               
  • 補充說明

    : : before 跟 : before 要進行嚴格差別,前者表示僞元素(相容性較差,css3新增),後者表示僞類(相容性較強,推薦使用),其他僞元素和僞類也有相似的特點;

    更多的僞類實作特殊形狀的方式将在後期繼續讨論;

~~如遇錯誤,請指正;

  • 結束語…………………………福利時間到………………………………

    大家同為程式員,在這裡給大家真誠的送上福利。

    福利連結點選這裡!