記錄--用css畫扇形菜單

来源:https://www.cnblogs.com/smileZAZ/archive/2023/08/11/17623713.html
-Advertisement-
Play Games

這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 1、效果圖 用手機錄屏再用小程式轉換的gif,可能精度上有點欠缺。 2、實現過程 1、觀察及思考 開始編碼前我們首先觀察展開後的結構:兩個四分之一的圓加三個圓形菜單項。 文章名為用css畫扇形,如上圖所示沒有任何Javascript輔助卻 ...


這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助

1、效果圖

用手機錄屏再用小程式轉換的gif,可能精度上有點欠缺。

2、實現過程

1、觀察及思考

開始編碼前我們首先觀察展開後的結構:兩個四分之一的圓加三個圓形菜單項。 文章名為用css畫扇形,如上圖所示沒有任何Javascript輔助卻實現收縮展開的效果,如何實現的呢?

2、巧用標簽

圖文內容很簡單,兩個四分之一圓我們可以用<div>標簽實現。但是正如標題所示沒有JavaScript卻能實現實現交互,如何巧妙的使用標簽呢?我想到了label+input及藉助它們的偽類來實現。

<input checked="checked" type="checkbox">
<label for="menubtn">
    <i>開</i>
    <i>收</i>
</label>

需要註意的是:

  1. label標簽內的for屬性應當與相關元素的id屬性相同, 意思就是label標簽配合input標簽使用時,label標簽中的for屬性和input標簽內的id屬性值要一樣,否則就不會將選中這個input選項。,比如:label標簽中的for屬性是menubtn,那麼input中的id屬性就必須是menubtn,否則label和input就不會關聯。
  2. inputtype屬性設置為checkbox。這裡我們必須將type屬性設置為checkbox覆選框類型,這是很重要的一個步驟。

3、實現深紫色小圓

通過觀察不難發現不管菜單展開還是收縮,紫色校園的狀態一直沒有改變,所以它的樣式就簡單多了。直接上樣式。

//把label轉換成塊級元素並定位
 label{display: block;transition: transform 0.5s, top 0.5s;position: absolute;bottom: 0;right: 0;margin: auto;z-index:99;cursor:pointer;}    
//使用偽類實現深紫色背景
 label::after{content:"";width:240px;height:240px;background-color:#8a2be1;position: absolute;bottom:-120px;right:-120px;border-radius: 50%;z-index: 9;}

4、實現淡紫色大圓

菜單展開的時候淡紫色背景和菜單一起顯示,收縮的時候和菜單一起隱藏。因此我們先來加菜單。

//菜單
<ul class="menu-list">
  <li><a>你</a></li>
  <li><a>好</a></li>
  <li><a>啊</a></li>
</ul>
菜單結構簡潔明瞭無需多說,現在我們來實現淡紫色大圓。 可以直接給menu-list加背景色,更可以使用偽類。為了後續交互的實現我們這裡需要使用偽類。
//使用偽類實現淡紫色背景
.menu-list::after{content:"";width:560px;height:560px;background-color: #ebddf8;position: absolute;bottom:-280px;right:-280px;border-radius: 50%;z-index: 9;opacity: 1;transition: opacity .5s;}

5、完成交互

頁面基本上畫完,我們來實現交互效果。聰明的我們佈局的時候藉助了label+input組合,input覆選框標簽具有checked屬性,通過此屬性可以設置覆選框的選中狀態。於是便有了input{} input:checked{}
還有一個知識點,元素的兄弟元素

element1~element2 {// CSS 屬性}element1 和 element2 是要選擇的兩個元素,~ 符號表示選擇 element1 後面的所有 element2 元素。
element1 + element2 {// CSS 屬性}+ 符號表示選擇 element1 後面的第一個 element2 元素。
CSS 元素的兄弟元素很重要,可以方便地選擇相鄰的元素併進行樣式設置。 重要的知識點就這麼多,剩下的修修補補,畫畫圓定定位,這裡不做過多贅述。

6、收工

上代碼~

html:

 <div class="menu mvcenter">
        <input checked="checked" class="menu-btn mvcenter" id="menubtn" type="checkbox">
        <label for="menubtn">
            <i class="iconfont icon-caidan">開</i>
            <i class="iconfont icon-quxiaoguanbi1">收</i>
        </label>
        <ul class="menu-list">
          <li class="mvcenter menu-item"><a class="iconfont icon-lianxi">你</a></li>
          <li class="mvcenter menu-item"><a class="iconfont icon-dizhi">好</a></li>
          <li class="mvcenter menu-item"><a class="iconfont icon-fankui">啊</a></li>
          <li class="mvcenter menu-item"><a class="iconfont icon-fankui">啊</a></li>
        </ul>
    </div>
css:
 body,ul,li,input,div{padding:0;margin:0;}      
        body{overflow: hidden;}  
        i{font-style: normal;}
        .mvcenter{position: absolute;bottom:20px;right:20px;}
        .menu-btn.mvcenter{margin-top: -20px;margin-left:-20px;}
        .menu-btn{width:40px;height:40px;cursor: pointer;background-color: red;border-radius: 20px;display: block;z-index: 99;opacity: 0;}
        .menu-btn + label{display: block;transition: transform 0.5s, top 0.5s;position: absolute;bottom: 0;right: 0;margin: auto;z-index:99;cursor:pointer;}        
        .menu-btn + label i{color:#fff; font-size:40px;position: absolute;bottom:5px;right:0;z-index: 12;}
        .menu-btn + label i.icon-caidan,.menu-btn:checked + label i.icon-quxiaoguanbi1{opacity: 1;}
        .menu-btn + label i.icon-quxiaoguanbi1,.menu-btn:checked + label i.icon-caidan{opacity: 0;}
        .menu-btn:checked + label + .menu-list::after{opacity: 1;}
        .menu-btn + label::after{content:"";width:240px;height:240px;background-color:#8a2be1;position: absolute;bottom:-120px;right:-120px;border-radius: 50%;z-index: 9;}

        .menu-list::after{content:"";width:560px;height:560px;background-color: #ebddf8;position: absolute;bottom:-280px;right:-280px;border-radius: 50%;z-index: 9;opacity: 0;transition: opacity .5s;}
        .menu-list > li.mvcenter{margin-top: -40px;margin-left:-40px;}
        .menu-list > li{width:70px;height:70px;border-radius:80px;border:3px solid #b880eb;color:#8a2be1;display: flex;align-items: center;justify-content: center; opacity: 0;transition: all .5s;transform-origin: center center;z-index: 12;}
        .menu-list > li:nth-child(1){transform:rotate(0)}
        .menu-list > li:nth-child(2){transform:rotate(-45deg)}
        .menu-list > li:nth-child(3){transform:rotate(-90deg)}

        .menu-list > li a{font-size:30px;font-weight: bold;}
        .menu-list > li:nth-child(1) a{transform:rotate(10deg)}
        .menu-list > li:nth-child(2) a{transform:rotate(-45deg)}
        .menu-list > li:nth-child(3) a{transform:rotate(-90deg)}

        .menu-btn:checked ~ ul .menu-item {opacity: 1;}
        .menu-btn:checked ~ ul .menu-item:nth-child(1) {transform: rotate(0) translateX(-120px);}
        .menu-btn:checked ~ ul .menu-item:nth-child(2) {transform: rotate(45deg) translateX(-120px);}
        .menu-btn:checked ~ ul .menu-item:nth-child(3) {transform: rotate(90deg) translateX(-120px);}

本文轉載於:

https://juejin.cn/post/7265624177775624252

如果對您有所幫助,歡迎您點個關註,我會定時更新技術文檔,大家一起討論學習,一起進步。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 提要:本系列文章主要參考`MIT 6.828課程`以及兩本書籍`《深入理解Linux內核》` `《深入Linux內核架構》`對Linux內核內容進行總結。 記憶體管理的實現覆蓋了多個領域: 1. 記憶體中的物理記憶體頁的管理 2. 分配大塊記憶體的伙伴系統 3. 分配較小記憶體的slab、slub、slob分 ...
  • 屏蔽驅動列印信息 root許可權:echo "1 4 1 7" > /proc/sys/kernel/printk sudo sh -c "sudo echo "1 4 1 7" > /proc/sys/kernel/printk 實現觸摸屏校驗 第一次進入Linux系統時,會出現觸摸校驗提示,按提示 ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202308/3076680-20230811232544082-164229613.png) # 1. 基本信息 SQL經典實例 SQL Cookbook [[美]安東尼·莫利納羅(Anthony Molin ...
  • ![file](https://img2023.cnblogs.com/other/3195851/202308/3195851-20230811181235894-1707158282.png) # 個人簡介 * 王海林 白鯨開源研發工程師 * GitHub ID:hailin0 * 做過性能監控 ...
  • GaussDB(DWS)支持多種相容模式,為了相容目標資料庫,各模式之間或多或少存在一些行為差異。這裡分享一個mysql相容模式下的表達式函數因不同寫法引發的結果差異案例。 ...
  • GaussDB(for Redis)提供了完備的大Key解決方案,支持大Key線上診斷、監控預警、承載力強等能力,彌補了開源Redis在大key問題上的不足,讓DBA如虎添翼。 ...
  • 在數字經濟時代下,數據驅動業務創新發展已經成為企業的主要選擇,基金行業機構也在積極推進數字化轉型,但機遇與挑戰並存。數據要轉化為[數據要素](https://www.dtstack.com/?src=szsm),需要系統體系化的數據能力建設作為催化劑。 基金行業也表現出一定的痛點,其中表現為數據安全 ...
  • 先看效果,整體界面結構如下 ![image](https://jsd.cdn.zzko.cn/gh/YuanjunXu/Images@main/src/image.4few4wtl3uyo.jpg) 點擊左側菜單欄,右側切換顯示不同頁面內容。 [Vue3使用路由–南河小站](https://www. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...