【CSS動效實戰(純CSS與JS動效)】03 精美手風琴側邊欄完整示例教程 示例1

本節示例演示:
請添加圖片描述

一、基本布局

一般來說,側邊欄的位置是在左側,咱們為了更好的展現側邊欄的效果,并且在本節中不涉及過多的內容,我們只需要直接給一個 div 寬度為 15即可,接著再到這個 div 中編寫對應的側邊欄。

給予一個 nav 樣式,設置寬度為 15%,并且給予一些基礎樣式,使其呈現有一定的對比度:

<!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>accordion nav demo 1_bit CSS 動效課 </title><style>.nav {width: 20vw;background-color: white;margin: 4px;height: 100vh;}body {margin: 0;background-color: rgb(223, 224, 225);}</style>
</head><body><div class="nav"></div>
</body></html>

此時頁面效果如下:
在這里插入圖片描述

二、 手風琴側邊欄 LOGO 部分編寫

有了基本布局后,開始著手編寫側邊欄。

從這個側邊欄我們可以明顯的知道,側邊欄頂部是 logo 區,或者你放其他的也行,logo 之下就是對應的菜單,那么側邊欄的內容就分為兩塊,一個上一個下,并且這一上一下的結果所屬于一個側邊欄,那么此時肯定需要一個 div 包裹其他兩個 div,此時 側邊欄代碼編寫如下:

<body><div class="nav"><!--手風琴側邊欄--><div><!--logo--><div></div><!--菜單--><div></div></div></div>
</body>

此時我們編寫一個類樣式,咩咩咩為 accordion:

<style>
.accordion {width: 100%;border-right: #424243 solid 2px;
}
</style>

并且包裹手風琴內容的div 要調用這個類樣式:

<!--手風琴側邊欄-->
<div class="accordion">

在此我們只是給這個手風琴側邊欄定義了一個基礎的邊框和寬度,接下來創建 logo和 logo 下的 span 樣式:

<style>
.logo {border-bottom: #424243 solid 1px;display: flex;justify-content: center;
}.logo span {color: white;padding: 2rem 2rem;font-size: 2rem;font-weight: bolder;
}
</style>

因為要對文字設置一定的大小,對文字使用 span 標簽可以很好的進行控制;在 logo 樣式中,還設置了當前 div 為 flex 樣式,這樣就可以很好的控制其中的內容是否居中等操作了,接著我們設置了 logo 的 span 樣式,文本為白色,設置了padding 這樣使其大小可以撐大,這樣就不用設置該文本對于邊緣的空隙了,接著設置了字體大小和加粗。此時的html 代碼如下:

<body><div class="nav"><!--手風琴側邊欄--><div class="accordion"><!--logo--><div class="logo"><span>ePageTool</span></div><!--菜單--><div></div></div></div>
</body>

此時頁面效果如下:
在這里插入圖片描述

三、 菜單部分內容編寫

接著完成了 logo 后開始編寫下面的菜單內容,我們可以從之前的演示圖看到,我們點擊對應的菜單欄可以對其進行選中并且展開其內部的選項,那么這個功能需要一個 html 元素實現,那就是 radio ;在其選中一個類型內容后,將會展開對應的內部選項,這些選項需要一個 div 統一對其進行管理,那么在選項的 div 之下應該還需要創建一個 div,并且 div 中需要有選項內容:

<!--菜單-->
<div><div><ul><li><a href="#">使用</a></li><li><a href="#">自定義</a></li></ul></div>
</div>

在此使用了 ul 表示對應的選項內容,那么外部還需要顯示該菜單的文本直接使用一個 label 表現即可:

<!--菜單-->
<div><label> 開始</label><div><ul><li><a href="#">使用</a></li><li><a href="#">自定義</a></li></ul></div>
</div>

之前說需要使用 radio 表示選中,那么此時在外部再加一個 input type 為 radio:

<!--菜單-->
<div><input type="radio"><label> 開始</label><div><ul><li><a href="#">使用</a></li><li><a href="#">自定義</a></li></ul></div>
</div>

此時頁面顯示如下:
在這里插入圖片描述
這明顯就不是我們想要的樣子,那么此時第一步,我們先把 radio 的選中圈圈取消,這個時候直接寫 accordion 下的 input 直接為 none,這樣就可以統一去掉所有 radio 的圈圈了:

<style>
.accordion input[type='radio'] {display: none;
} 
</style>

以上樣式表示 accordion 類下的 input 標簽屬性 type 值為 radio 的統一設置屬性 display: none;,那么此時頁面如下:

在這里插入圖片描述
由于 radio 是單選項,我們需要對其設置一個單選項組,直接使用 name 表示即可,多個不同的 radio 使用同一個 name 就表示同一個組的 radio:

<input name="menu" type="radio"  >

此時我們還需要做一件事,因為我們的 radio 的 display 已經是 none 了, 那么我們需要有一個東西代替這個惡radio,此時我們直接給予 label 一個 for:

<label for="start"> 開始</label>

這個 for 可以對應所關聯的 radio,那么 radio 此時需要一個 id 對應這個 label 元素,我們只需要給予這個 radio 的 id 為 start 即可:

<input name="menu" type="radio" id="start" >

此時 body 代碼如下:

<body><div class="nav"><!--手風琴側邊欄--><div class="accordion"><!--logo--><div class="logo"><span>ePageTool</span></div><!--菜單--><div><input name="menu" type="radio" id="start"><label for="start"> 開始</label><div><ul><li><a href="#">使用</a></li><li><a href="#">自定義</a></li></ul></div></div></div></div>
</body>

接著我們直接給予這個菜單一個 item 樣式:

<!--菜單-->
<div class="item">

接著直接寫兩個 樣式,item 樣式不寫都可以:

<style>
.accordion>.item label {color: white;background-color: #ff6f61;display: block;padding: 1rem 2rem;border-bottom: #931313 solid 1px;transition: color 0.3s, background-color 0.3s;
}.accordion>.item label:hover {background-color: #c30d0ddb;color: white;
}
</style>

首先 .accordion>.item label 表示 accordion 樣式下的 item 樣式下的 label 標簽樣式,顏色為白,給予背景色,設置 display 為 block,并且給予對應的 padding,以及下邊框(這樣每個 item 之間有間隔看得清楚)顏色,還定義了一個 transition 動畫,主要是顏色動畫和背景色動畫,隨后給予了一個同樣 label 的 hover 樣式,設置背景色會有一定的變化,并且設置了 color 字體顏色為白色,這樣整個 label 就會有顏色的改變,此時頁面效果如下:

請添加圖片描述

接著我們需要對這個菜單下的展開選項設置樣式:
在這里插入圖片描述
我們給予這個展開項的div 一個樣式 content:

<div class="content"><ul><li><a href="#">使用</a></li><li><a href="#">自定義</a></li></ul>
</div>

此時我們發現這個 ul 列有一定的距離:
在這里插入圖片描述
這是因為這時ul 自帶了padding 和 margin,我們需要消除,那么在 content 樣式中,我們就需要給予 padding 、margin 為 0:

<style>
.content ul {margin: 0;padding: 0;
}
</style>

此時頁面如下:
在這里插入圖片描述
接著給a標簽對應的樣式:

<style>
.content ul a {width: 100%;display: inline-block;color: white;font-size: 1rem;text-decoration: none;padding: 1rem 3rem;border-bottom: 1px solid #394c7f;
}
</style>

設置標簽 a 寬度為 100%,并且轉換元素類型,給予字體 size、去掉下劃線,給予 padding隨后得到的效果如下:
在這里插入圖片描述

我們此時發現下劃線超格了,那么需要設置 overflow,直接在content 上設置overflow即可:

<style>
.content ul {overflow: hidden;margin: 0;padding: 0;}
</style>

此時頁面將不會超格;接下來設置對應 a 標簽的 hover 標簽,這個標簽我們需要有一定的動畫效果,那么在 a 標簽的樣式中添加過渡動畫,并且添加 position: relative,因為接下來添加的效果需要脫離文檔流制作:

<style>
.content ul a {width: 100%;display: inline-block;color: white;font-size: 1rem;text-decoration: none;padding: 1rem 3rem;border-bottom: 1px solid #394c7f;position: relative;transition: all 0.5s;
}
</style>

接著添加 hover 效果,這個效果只是其一,接下來還有其他效果:

<style>
.content a:hover {display: block;background-color: #1e2546;}</style>

接下來給 a 標簽添加 before,在 before 上制作對應的動畫效果,當然,這里添加的是默認情況。當然是無效果狀態,在這里只是默認的把 before 的透明度 opacity 調為 0 ,內容是空白,添加了一個過渡動畫對其進行響應:

<style>
.content a:before {content: '';opacity: 0;transition: all 0.3s;
}
</style>

接著增加 before 的對應效果:

<style>
.content a:hover:before {position: absolute;left: 0;top: 0;opacity: 1;border-top: 24px solid transparent;border-left: 11px solid #ff6f61;border-bottom: 24px solid transparent;
}
</style>

在以上效果中,增加 before 為 position: absolute; 開始為期編寫對應的樣式,這個樣式距離左邊 0 個單位,距離頂部 0 個單位,透明度 opacity 為 1 表示課件,最關鍵的是以下樣式:

<style>
border-top: 24px solid transparent;
border-left: 11px solid #ff6f61;
border-bottom: 24px solid transparent;
</style>

我們之間設置顯示的效果給大家看,該代碼改成:

<style>
border-top: 24px solid #ff6161;
border-left: 24px solid #ffdf61;
border-right: 24px solid #616eff;
border-bottom: 24px solid #71ff61;
</style>

這 4 個代碼分別表示 border-top 為紅、橙、藍、綠:
在這里插入圖片描述
接著顯示時如下效果:
在這里插入圖片描述
這個時候若我們只想要左側大小變小,例如 11:

<style>
border-top: 24px solid #ff6161;
border-left: 11px solid #ffdf61;
border-right: 24px solid #616eff;
border-bottom: 24px solid #71ff61;
</style>

效果如下:
在這里插入圖片描述
那么此時 其它 顏色為 transparent 為透明。那么代碼如下:

<style>
border-top: 24px solid transparent;
border-left: 11px solid #ffdf61;
border-right: 24px solid transparent;
border-bottom: 24px solid transparent;
</style>

效果如下:
在這里插入圖片描述
很明顯我們的右側代碼沒有存在必要,那么直接不寫就可以了,也就是刪掉這一條:border-right: 24px solid transparent;,并且其它 border 不同大小可以影響其結果,大家自行實驗即可,接下來我們添加第二個 item:

<div class="item"><input name="menu" type="radio" id="gradient"><label for="gradient"> 漸變</label><div class="content"><ul><li><a href="#">線性漸變</a></li><li><a href="#">徑向漸變</a></li></ul></div>
</div>

并且在 content ul 樣式中為其設置高度為 0,這樣內容就不會全部展開了:

<style>
.content ul {max-height: 0;overflow: hidden;margin: 0;padding: 0;
}
</style>

此時效果如下,點擊后展開不了內容:
在這里插入圖片描述

那此時如何點擊后展開內容呢?

我們只需要對 input 的效果監聽是否 checked 即可:

<style>
.accordion input:checked~.content ul {max-height: auto;transition: all 0.2s;background-color: #273057;
}
</style>

此時 .accordion input:checked~.content ul 的意思是為所有相同父元素中位于.accordion input:checked 之后的所有 content 下的 ul 元素設置CSS,其中 波浪線 之前表示 什么什么之后,content ul 表示設置結果對象,作用范圍是當前響應對象的所有相同父元素的對象。那么此時直接設置了 ul 的高度為 auto,那么就可以展開了。

若自己試驗后可以看到此時感覺響應效果不好,沒有添加動畫,那么此時只需要在 content ul 中設置動畫即可:

<style>
.content ul {max-height: 0;overflow: hidden;margin: 0;padding: 0;transition: all 0.4s;
}
</style>

效果如下:
請添加圖片描述

此時完整代碼如下:

<!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>accordion nav demo 1_bit CSS 動效課 </title><style>.nav {width: 20vw;background-color: white;margin: 4px;height: 100vh;}body {margin: 0;background-color: rgb(223, 224, 225);}.accordion {width: 100%;border-right: #424243 solid 2px;background-color: #ff6f61;}.logo {border-bottom: #424243 solid 1px;display: flex;justify-content: center;}.logo span {color: white;padding: 2rem 2rem;font-size: 2rem;font-weight: bolder;}.accordion input[type='radio'] {display: none;}.accordion>.item label {color: white;background-color: #ff6f61;display: block;padding: 1rem 2rem;border-bottom: #931313 solid 1px;transition: color 0.3s, background-color 0.3s;}.accordion>.item label:hover {background-color: #c30d0ddb;color: white;}.content ul {max-height: 0;overflow: hidden;margin: 0;padding: 0;transition: all 0.4s;}.content ul a {width: 100%;display: inline-block;color: white;font-size: 1rem;text-decoration: none;padding: 1rem 3rem;border-bottom: 1px solid #394c7f;position: relative;transition: all 0.5s;}.content a:hover {background-color: #1e2546;}.content a:before {content: '';opacity: 0;transition: all 0.3s;}.content a:hover:before {position: absolute;left: 0;top: 0;opacity: 1;border-top: 1.5rem solid transparent;border-left: 11px solid #ffdf61;border-bottom: 1.5rem solid transparent;}.accordion input:checked~.content ul {max-height: 20rem;transition: all 0.2s;background-color: #273057;}</style>
</head><body><div class="nav"><!--手風琴側邊欄--><div class="accordion"><!--logo--><div class="logo"><span>ePageTool</span></div><!--菜單--><div class="item"><input name="menu" type="radio" id="start"><label for="start"> 開始</label><div class="content"><ul><li><a href="#">使用</a></li><li><a href="#">自定義</a></li></ul></div></div><div class="item"><input name="menu" type="radio" id="gradient"><label for="gradient"> 漸變</label><div class="content"><ul><li><a href="#">線性漸變</a></li><li><a href="#">徑向漸變</a></li></ul></div></div></div></div>
</body></html>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285919.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285919.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285919.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ArcGIS實驗教程——實驗三十二:ArcGIS水文分析(流向分析、計算水流長度、匯流分析、河網分析、流域分析)

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據)》 文章目錄 一、流向分析1. 水流方向計算方法2. 原始DEM流向分析3. 洼地判定4. 洼地填充5. 無洼地DEM流向分析二、計算水流長度三、匯流分析四、河網分析五、流域分析水文分析是數字地形分析的一個重…

C語言試題六十七之請編寫函數實現水仙花數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 輸出所有“…

Yii框架操作方法

1.yii數據查詢a.使用CDbCriteria數據查詢$attributes array();$criteria new CDbCriteria;//$criteria->selectamount; $criteria->conditionuser_id:user_id;$criteria->paramsarray(:user_id>18889195);$DwCouponModel new Coupon();$cla***esult $DwCoupon…

Windows 服務 同時啟動多個服務

Windows 服務 同時啟動多個服務獨立觀察員 2019.02.26最近需要開發 Windows Service 程序&#xff0c;之前沒有接觸過&#xff0c;所以把了解到的一些東西記錄下來。Windows 服務程序可以簡單理解為需要長時間在后臺運行&#xff0c; 而又不需要界面顯示的程序&#xff0c;在計…

Python3.6學習筆記(四)

錯誤、調試和測試 程序運行中&#xff0c;可能會遇到BUG、用戶輸入異常數據以及其它環境的異常&#xff0c;這些都需要程序猿進行處理。Python提供了一套內置的異常處理機制&#xff0c;供程序猿使用&#xff0c;同時PDB提供了調試代碼的功能&#xff0c;除此之外&#xff0c;…

如何恢復master數據庫

今天&#xff0c;重裝Sql2000數據庫后&#xff0c;在恢復master數據庫時出現了錯誤&#xff0c;提示為“當試圖還原master數據庫時&#xff0c;必須以單用戶模式使用restoredatabase,restore database操作異常終止”。在網上搜索了一下&#xff0c;發現了一篇介紹比較詳細的&am…

一、基本remix環境及HelloWord contract《2022 solidity8.+ 版本教程到實戰》

這個系列是 solidity8.版本的教程&#xff0c;既然學習了 solidity 就應該明白智能合約是啥&#xff0c;在此系列文章中將不贅述基礎概念&#xff0c;只講解對應的語法&#xff0c;希望讀者理解。 環境 solidity 版本&#xff1a;8.(2022年9月8日 最新版本) IDE&#xff1a;h…

遙感空間尺度轉換技術(升尺度和降尺度)

遙感圖像的一個基本特征是空間分辨率。目前已經可以有效獲取大量不同空間分辨率遙感數據。 尺度和尺度轉換已經成為遙感的核心問題之一,人們已經從不同角度提出了這一問題。尺度轉換分為兩種: 升尺度:從高分辨率到低分辨率的轉換;降尺度:從低分辨率到高分辨率的轉換。文章…

linux command1

#列出指定用戶&#xff08;當前用戶&#xff09;的組信息 groups #將指定的用戶添加(-a&#xff09;到指定的組內&#xff08;改組必須已經存在&#xff09;或指定用戶從指定的組中刪除&#xff08;-d&#xff09; gpasswd –a/-d username groupname #添加組 groupadd grou…

C語言試題六十八之請編寫函數實現親密數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 編寫函數:…

three.js插件實現立體動感視頻播放效果

2019獨角獸企業重金招聘Python工程師標準>>> three.js插件實現立體動感視頻播放效果 效果描述&#xff1a; 立體式視頻播放效果 大家使用的時候可得注意了&#xff0c;它并不支持低版本瀏覽器 使用方法&#xff1a; 1、將body中的代碼部分拷貝到你需要的地方,將視頻…

Python3.6學習筆記(五)

網絡編程 網絡程序出現的比互聯網要早很多&#xff0c;實現方式主要依靠網絡上不同主機間進程的通信&#xff0c;通信協議最重要的是TCP/IP協議。在這兩個協議基礎上還有很多更高級的協議&#xff0c;包括HTTP、SMTP等。要進行兩個主機間的網絡通信&#xff0c;必須四個元素&a…

ArcGIS實驗教程——實驗三十三:ArcScan自動矢量化完整案例教程

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據)》 文章目錄 1 ArcScan 簡介2. ArcScan使用前提及注意事項3. ArcGIS自動矢量化案例1 ArcScan 簡介 ArcScan是ArcGIS Desktop的打展模塊,是柵格數據矢量化的套工具集, 用這些工具,可以創建要素,將…

搶先體驗全新標簽頁!Windows 11 必備小工具下載

面向 Dev 頻道的 Windows 預覽體驗成員&#xff0c;微軟近日推送了 Windows 11 新預覽版&#xff0c;為文件資源管理器帶來了全新標簽頁功能。Windows 11 文件資源管理器全新標簽頁介紹在 Windows 11 預覽版中&#xff0c;新功能分別向 A 和 B 兩組用戶的電腦推送測試。A 用戶的…

thymeleaf模板的使用(轉)

作者&#xff1a;純潔的微笑 出處&#xff1a;http://www.ityouknow.com/ 在上篇文章springboot(二)&#xff1a;web綜合開發中簡單介紹了一下thymeleaf&#xff0c;這篇文章將更加全面詳細的介紹thymeleaf的使用。thymeleaf 是新一代的模板引擎&#xff0c;在spring4.0中推薦使…

二、基本類型及函數使用《2022 solidity8.+ 版本教程到實戰》

一、基本變量類型 solidity 中的基本變量類型與一般編程中類似&#xff1a; // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; contract Hello{string public say"Hello 1_bit";int public ival-1;uint public uval1;address public aval0xd9145CCE52…

Ruby 學習筆記3

在Ruby中有很多方法是以?和!號結尾的 “&#xff1f;”被用于標示謂詞&#xff0c;即返回Boolean直的方法&#xff0c;如Array.empty?(判斷數組中元素是否為空) “&#xff01;”出現在方法名尾部的感嘆號表明使用該方法是需要多加小心。許多Ruby的核心類都定義了 成對的方…

C語言試題六十九之請編寫函數判斷一個數是不是素數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 編寫函數:…

Python3.6學習筆記(六)

WSGI Python Web Server Gateway Interface 規范學習 由于Python的靈活性&#xff0c;提供了多種方式可以作為服務端語言&#xff0c;包括Python編寫的服務器&#xff08;Medusa&#xff09;、Python處理模塊&#xff08;mod_python)&#xff0c;或者使用CGI、FastCGI方式觸發…

Markdown編輯器模板

這里寫自定義目錄標題歡迎使用Markdown編輯器新的改變功能快捷鍵合理的創建標題&#xff0c;有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右SmartyPants創建一個自定義列表如何創建一個注…