整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          css3隨手寫個(gè)底部導(dǎo)航欄效果,P8大佬恐怖如斯

          行準(zhǔn)備工作

          這邊對(duì)基本的樣式進(jìn)行了設(shè)置,首先在html部分設(shè)置了一個(gè)名為nav的div,隨后進(jìn)行基本的默認(rèn)樣式的清除,并且設(shè)置盒子為ie盒子方便后續(xù)的計(jì)算,整體都設(shè)置為彈性盒,方便后續(xù)矢量文字的操作,對(duì)導(dǎo)航欄nav進(jìn)行定位,方便后續(xù)位置上的操作

          
          <body>
              <!-- 目前就一個(gè)簡(jiǎn)單的nav,推薦大家語義化來寫 -->
              <div class="nav"></div>
          </body>
          
          <style>
              /* 清除一些默認(rèn)樣式 */
              *{
                  margin: 0;
                  padding: 0;
                  box-sizing: border-box;
                  list-style: none;
              }
              a{
                   text-decoration: none;/*確保在瀏覽器中顯示鏈接時(shí),沒有任何文本裝飾,如下劃線。 */
              }
              /* 對(duì)整體進(jìn)行設(shè)置,并且都設(shè)置為彈性盒,方便進(jìn)行操作 */
              body{
                  display: flex;
                  justify-content: center;
                  align-items: center;
                  min-height: 100vh;
                  background: #222327;
              }
              /* 設(shè)置導(dǎo)航欄樣式 */
              .nav{
                  /* 對(duì)導(dǎo)航欄位置進(jìn)行定位處理,方便后續(xù)的圖標(biāo)位置的設(shè)置 */
                  position: relative; 
                  width: 400px;
                  height: 70px;
                  background: #fff;
                  display: flex;
                  justify-content: center;
                  align-items: center;
                  border-radius: 10px;
              }
          </style>
          

          引入矢量文字

          這里面呢引用了阿里巴巴的矢量文字效果,具體如何使用請(qǐng)見www.iconfont.cn/manage/inde… 里面的教程,這邊我挑了五個(gè)字體圖標(biāo)加入到了網(wǎng)頁中,并且用ul和lil加入到了導(dǎo)航欄中,目前是豎著排列的,后續(xù)加入css樣式之后會(huì)好起來,并且在第一個(gè)li上加入了active的css樣式,用于設(shè)置選中效果


          <link rel="stylesheet" href="//at.alicdn.com/t/c/font_4173165_2g4t5a6pg9v.css">
              <div class="nav">
                  <ul>
                      <li class="active"> <span><i class="iconfont icon-shouye"></i></span></li>
                      <li > <span><i class="iconfont icon-liuyan"></i></span></li>
                      <li > <span><i class="iconfont icon-code"></i></span></li>
                      <li > <span><i class="iconfont icon-box-empty"></i></span></li>
                      <li > <span><i class="iconfont icon-gitee-fill-round"></i></span></li>
                  </ul>
              </div>

          對(duì)導(dǎo)航欄和ui li字體圖標(biāo)進(jìn)行設(shè)置

          這里面呢針對(duì)ul和li進(jìn)行了設(shè)置,使之達(dá)到了圖下的效果,對(duì)ul 和li進(jìn)行了彈性盒的設(shè)置,li中的使用flex:1讓這些矢量文字按等份劃分容器寬度,使之達(dá)到了一個(gè)距離平均的樣式,并且設(shè)置了這個(gè)zindex的疊加級(jí)別

              .nav{
                  /* 對(duì)導(dǎo)航欄位置進(jìn)行定位處理,方便后續(xù)的圖標(biāo)位置的設(shè)置 */
                  position: relative; 
                  width: 400px;
                  height: 70px;
                  background: #fff;
                  display: flex;
                  justify-content: center;
                  align-items: center;
                  border-radius: 10px;
              }
              .nav ul{
                  display: flex;
                  width: 350px;
              }
              .nav ul li{
                  height: 60px;
                  /* flex:1是讓所有的li平均分nav這個(gè)容器 */
                  flex: 1;
                  position: relative;
                 z-index: 2;
                 display: flex;
                 justify-content: center;
              }

          繼續(xù)設(shè)置i元素和span元素

          這里呢針對(duì)了span元素和i元素進(jìn)行了設(shè)置,通過span元素蔣i元素中的矢量圖標(biāo)設(shè)置到水平垂直都居中的位置,并且設(shè)置了圓角,加入了動(dòng)畫和動(dòng)畫延遲,針對(duì)i元素將文字大小設(shè)置了,并且在html中加入了對(duì)應(yīng)圖標(biāo)的文字效果,并且為例美觀在每個(gè)li元素中都添加了一個(gè)選中時(shí)候的不同的顏色,使用了變量--clr用于獲取選中效果 行內(nèi)樣式是一種直接在HTML元素上指定樣式的方法,在這種情況下,你使用 style 屬性將 --clr 變量設(shè)為不同色

            .nav ul li span{
                  /* 進(jìn)行定位,使之通過span元素帶動(dòng)矢量圖標(biāo)進(jìn)行水平垂直到中心位置 */
                  position: relative;
                  display: flex;
                  justify-content: center;
                  align-items: center;
                  width: 55px;
                  height: 55px;
                  border-radius: 50%;
                  /* 設(shè)置鼠標(biāo)移入的樣式 */
                  cursor: pointer;
                  /* 設(shè)置動(dòng)畫過度事件以及延遲 */
                  transition: 0.5s;
                  transition-delay: 0s;
              }
              .nav ul li span i{
                  color: #222327;
                  font-size: 1.5em;
              }
          <body>
              <!-- 目前就一個(gè)簡(jiǎn)單的nav,推薦大家語義化來寫 -->
              <div class="nav">
                  <ul>
                      <!-- 設(shè)置active效果,用于獲取選中效果 用于獲取選中效果 行內(nèi)樣式是一種直接在HTML元素上指定樣式的方法,在這種情況下,你使用 style 屬性將 --clr 變量設(shè)為不同色 -->
                      <li class="active" style="--clr:#f44336"><span><i class="iconfont icon-shouye"></i>首頁</span></li>
                      <li style="--clr:#0fc70f"> <span><i class="iconfont icon-liuyan"></i>留言</span></li>
                      <li style="--clr:#2196f3"> <span><i class="iconfont icon-code"></i>代碼</span></li>
                      <li style="--clr:#b145e9"> <span><i class="iconfont icon-box-empty"></i>盒子</span></li>
                      <li style="--clr:#ffa111"> <span><i class="iconfont icon-gitee-fill-round"></i>gitee</span></li>
                      <div class="indicator"></div>
                  </ul>
              </div>
          </body>

          下面設(shè)置選中時(shí)候的樣式,在這里呢針對(duì)span元素設(shè)置了選中的時(shí)候會(huì)向上位移到這個(gè)地方,并且在矢量圖標(biāo)的地方設(shè)置了開始選中的時(shí)候?qū)⑽淖诸伾臑楹捅尘邦伾粯拥念伾@樣當(dāng)點(diǎn)擊的那一刻,圖標(biāo)會(huì)出現(xiàn)消失的情況,當(dāng)超出導(dǎo)航欄到黑色部分的時(shí)候,文字就會(huì)顯示出來,在后面,設(shè)置了一個(gè)半圓的背景圖,當(dāng)背景圖位移到文字的位置的時(shí)候,矢量文字就會(huì)顯示出來


          /* 下面是針對(duì)選中效果做的樣式處理 */
              .nav ul li.active span {
                  /* 設(shè)置了一開始的背景顏色,后面會(huì)被取代,設(shè)置了點(diǎn)擊的時(shí)候會(huì)向上移動(dòng) */
                  background: orange;
                  transform: translateY(-27px);
                  transition-delay: 0.25s;
              }
          
              .nav ul li.active span i {
                  /* 設(shè)置了點(diǎn)擊時(shí)候矢量圖標(biāo)的文字顏色 */
                  color: #fff;
              }
          

          設(shè)置模糊效果

          這里呢加入了一個(gè)模糊的效果,配合后面的選中的時(shí)候圖標(biāo)顏色顯示會(huì)形成一個(gè)類似于色彩過度的效果,并且將i元素上面設(shè)置的顏色顯示出來

              .nav ul li span::before {
                  content: '';
                  position: absolute;
                  top: 10px;
                  left: 0;
                  width: 100%;
                  height: 100%;
                  background: orange;
                  border-radius: 50%;
                  filter: blur(40px);
                  opacity: 0;
                  transition: 0.5s;
                  transition-delay: 0s;
              }
              .nav ul li span::before {
                  opacity: 0.5;
                  transition-delay: 0.25s;
              }
                  /* 這里將i元素設(shè)置的顏色顯示出來 這兩個(gè)樣式塊中都使用了 background: var(--clr); 屬性,可以將背景顏色設(shè)置為clr 變量所表示的值。這種使用自定義變量的方式,可以在代碼中統(tǒng)一定義顏色值,以便在需要時(shí)進(jìn)行統(tǒng)一更改。*/
                 .nav ul li.active span {
                  background: var(--clr);
              }
          
              .nav ul li span::before {
                  background: var(--clr);
              }
            

          接下來設(shè)置背景圓

          這里呢設(shè)置了背后的那個(gè)向下突兀的圓,其原理是通過位置的調(diào)整和顏色的與背景顏色的一致加上zindex的圖冊(cè)優(yōu)先級(jí)的顯示,構(gòu)成了這么一個(gè)背景半圓形圖

          .indicator {
                  /* 這里進(jìn)行了定位,并且設(shè)置了背景園的位置,同時(shí)將圓的背景顏色與背景顏色設(shè)為一致,會(huì)形成那種向下突兀的圓形,并且加入了動(dòng)畫 ps:這個(gè)過度的小圓弧我是真設(shè)置不好,湊合看吧,大佬們有能力的可以試試設(shè)置一下*/
                  position: absolute;
                  top: -35px;
                  width: 70.5px;
                  height: 70px;
                  background: #222327;
                  border-radius: 50%;
                  z-index: 1;
                  transition: 0.5s;
              }
              /* 設(shè)置左邊半弧 */
              .indicator::before {
                  content: '';
                  position: absolute;
                  top: 16px;
                  left: -34px;
                  width: 10px;
                  height: 5px;
                  background: transparent;
                  border-radius: 50%;
                  box-shadow: 20.5px 19px 0 4px #fff;
              }
          /* 設(shè)置右邊半弧 */
              .indicator::after {
                  content: '';
                  position: absolute;
                  top: 16px;
                  left: 54px;
                  width: 10px;
                  height: 5px;
                  background: transparent;
                  border-radius: 50%;
                  box-shadow: 20px 19px 0 4px #fff;
              }

          ****動(dòng)畫設(shè)置,配合js形成點(diǎn)擊的時(shí)候,active會(huì)移動(dòng)到點(diǎn)擊的目標(biāo)身上

          這里呢使用了nth-child選擇器選中對(duì)應(yīng)的i元素,注意,這里設(shè)置的平移效果是由clac函數(shù)計(jì)算而來,選中其中一個(gè)i元素,并且當(dāng)且僅當(dāng)具有active類之后的所有兄弟中的.indicator類元素,有一個(gè)指示器元素(.indicator)。指示器的位置會(huì)根據(jù)活動(dòng)項(xiàng)目(具有active類的<li>元素)的位置進(jìn)行調(diào)整。 根據(jù)活動(dòng)項(xiàng)目的位置設(shè)置指示器的水平平移距離,實(shí)現(xiàn)一個(gè)在導(dǎo)航菜單中顯示當(dāng)前選中項(xiàng)目的效果。指示器的位置和平移距離是根據(jù)活動(dòng)項(xiàng)目的索引和固定的長(zhǎng)度單位(70px)進(jìn)行計(jì)算的

          /*/* nth-child()選中低某個(gè)i元素,然后配合js完成背景圓的移動(dòng) 
          在CSS中,calc() 是一個(gè)用于執(zhí)行計(jì)算的函數(shù)。它允許在CSS屬性值中使用數(shù)學(xué)表達(dá)式。
          這種計(jì)算函數(shù)通常用于允許動(dòng)態(tài)計(jì)算和調(diào)整元素的尺寸、間距或位置。在 calc() 函數(shù)中,可以使用不同的運(yùn)算符(如加號(hào) +、減號(hào) -、乘號(hào) *、除號(hào) /)來結(jié)合數(shù)值和單位進(jìn)行計(jì)算。
          它可以包含其他長(zhǎng)度單位(如像素 px、百分比 % 等),并且可以與其他CSS屬性值和變量一起使用。
          
          當(dāng)一個(gè) `<li>` 元素具有 `active` 類時(shí),對(duì)應(yīng)的 `.indicator` 元素會(huì)相對(duì)于活動(dòng)項(xiàng)目的位置水平平移一個(gè)特定的距離。每個(gè) `.indicator` 元素的平移距離相對(duì)于其前面的活動(dòng)項(xiàng)目索引和一個(gè)固定的長(zhǎng)度單位(`70px`)計(jì)算得出。
          
          */ */
             
             .nav li:nth-child(1).active~.indicator{
                  transform: translateX(calc(70px*0));
              }
          
              .nav li:nth-child(2).active~.indicator {
                  transform: translateX(calc(70px*1));
              }
          
              .nav li:nth-child(3).active~.indicator {
                  transform: translateX(calc(70px*2));
              }
          
              .nav li:nth-child(4).active~.indicator {
                  transform: translateX(calc(70px*3));
              }
          
              .nav li:nth-child(5).active~.indicator {
                  transform: translateX(calc(70px*4));
              }
              


          這里配合js代碼,通過foreach為點(diǎn)擊的li或者為所有的li進(jìn)行添加或者移入active樣式

          <script>
          //通過 `lis.forEach(li => li.addEventListener('click', function () {...}))` 遍歷 `lis` 數(shù)組中的每個(gè)元素,并為每個(gè)元素都添加一個(gè) ‘click’ 事件監(jiān)聽器。
          //在每次點(diǎn)擊事件中,使用 `lis.forEach(item => {...})` 遍歷 `lis` 數(shù)組中的每個(gè)元素,將它們的 `active` 類都移除,然后在當(dāng)前被點(diǎn)擊的元素上添加 `active` 類,
              const lis = document.querySelectorAll('.nav li')
              lis.forEach(li => li.addEventListener('click', function () {
                  lis.forEach(item => {
                      item.classList.remove('active');
                      this.classList.add('active');
                  })
              }))
          </script>

          效果展示

          總結(jié)

          這里配合js使用的動(dòng)畫是值得我學(xué)習(xí)的,通過js點(diǎn)擊賦予不同的liactive樣式,又根據(jù)active所在的li元素經(jīng)過計(jì)算對(duì).indicator元素進(jìn)行平移,使之完成這個(gè)動(dòng)畫效果


          基于css3寫出的底部導(dǎo)航欄效果(詳細(xì)注釋
          原文鏈接:https://juejin.cn/post/7262334378759405605

          果圖

          html部分:先寫用div畫好六個(gè)導(dǎo)航的卡片,再利用css添加響應(yīng)效果

          <div class='card-holder'>
              <div class='card-wrapper'>
                  <a href='#'>
                      <div class='card bg-01'>
                          <span class='card-content'>item #1</span>
                      </div>
                  </a>
              </div>
              <div class='card-wrapper'>
                  <a href='#'>
                      <div class='card bg-02'>
                          <span class='card-content'>long menu item #2</span>
                      </div>
                  </a>
              </div>
              <div class='card-wrapper'>
                  <a href='#'>
                      <div class='card bg-03'>
                          <span class='card-content'>menu item #3</span>
                      </div>
                  </a>
              </div>
              <div class='card-wrapper'>
                  <a href='#'>
                      <div class='card bg-04'>
                          <span class='card-content'>item #4</span>
                      </div>
                  </a>
              </div>
              <div class='card-wrapper'>
                  <a href='#'>
                      <div class='card bg-05'>
                          <span class='card-content'>menu item #5</span>
                      </div>
                  </a>
              </div>
              <div class='card-wrapper'>
                  <a href='#'>
                      <div class='card bg-06'>
                          <span class='card-content'>long menu item #1</span>
                      </div>
                  </a>
              </div>
          </div>

          css部分:通過hover選擇器和transition屬性實(shí)現(xiàn)導(dǎo)航響應(yīng)式操作,即可實(shí)現(xiàn)如圖效果

          a:link,
          a:hover,
          a:visited,
          a:active {
            color: #fff;
            text-decoration: none;
          }
          body {
            height: 100%;
            width: 100%;
            margin: 0;
            padding: 0;
            background: #fff;
          }
          .card-holder {  
            position: fixed;
            width: 0px;
            overflow: visible;
          }
          .card-wrapper {
            display: inline-block;
            float: right;
            clear: both;
          }
          .card {
            position: relative;
            left: 32px;
            padding: 16px 32px 16px 64px;
            margin: 8px;  
            background: #fff;
            transition: all 0.3s ease-in-out 0.1s;
          }
          //添加導(dǎo)航的響應(yīng)式效果
          .card:hover {
            position: relative;
            left: 100%;
            margin-left: -32px;
            transition: all 0.3s ease-in-out;
          }
          .card-content {
            display: inline-block;
            color: #fff;
            font-family: 'Droid Sans', sans-serif;
            font-size: 16px;
            font-weight: bold;
            white-space: nowrap;
          }
          .bg-01 { background: #539770; }
          .bg-02 { background: #4B7D74; }
          .bg-03 { background: #8DC2BC; }
          .bg-04 { background: #EDD6B4; }
          .bg-05 { background: #BE7467; }
          .bg-06 { background: #E2AE63; }

          然后就能實(shí)現(xiàn)我們這個(gè)實(shí)用又美觀的側(cè)邊導(dǎo)航欄啦

          篇文章將教大家如何編寫導(dǎo)航欄,如果大家掌握之后,通過自定義樣式,完全可以實(shí)現(xiàn)個(gè)性化的導(dǎo)航欄。

          效果圖

          首先我們看下效果圖,后面的編輯和查看導(dǎo)航也是相同的效果。

          效果圖

          實(shí)現(xiàn)方式

          接下來我們直接通過代碼的方式來展示如何完成導(dǎo)航欄的編寫

          • css部分代碼

          首先是div的通用樣式

          div通用樣式

          然后是鼠標(biāo)懸浮的效果

          鼠標(biāo)懸浮效果

          最后是菜單欄的效果

          菜單欄效果

          • js代碼控制菜單欄效果

          首先是鼠標(biāo)懸停和鼠標(biāo)離開菜單時(shí)的效果

          鼠標(biāo)懸停和移除菜單欄

          然后是關(guān)于高亮效果的展示和取消

          高亮效果的顯示和取消

          最后是菜單欄被點(diǎn)擊時(shí)的函數(shù)

          點(diǎn)擊菜單欄的函數(shù)

          • html部分代碼

          首先我們來看一下導(dǎo)航欄html代碼

          導(dǎo)航欄的html代碼

          然后是文件菜單的html代碼

          文件菜單的html代碼

          其次是編輯菜單的html代碼

          編輯菜單的html代碼

          最后是查看菜單的html代碼

          查看菜單的html代碼

          總結(jié)

          至此,一個(gè)完整的自定義導(dǎo)航欄效果就完成了,如果覺得不好看的,完全可以自己設(shè)計(jì)樣式讓它更符合自己的品味,如果感興趣的希望自己把代碼試敲一遍,畢竟代碼要自己實(shí)踐才有效果。


          主站蜘蛛池模板: 高清精品一区二区三区一区| 91久久精一区二区三区大全| 国产一区二区三区在线免费| 国产一区二区影院| 一区二区三区91| 精品福利一区二区三| 国产福利无码一区在线| 国产精品视频一区二区猎奇| 国产精品美女一区二区三区 | 精品久久一区二区三区| 精品少妇一区二区三区视频| 精品视频在线观看一区二区| 无码国产精品一区二区免费式影视| 国产一区二区三区高清视频 | 视频一区视频二区在线观看| 亚洲av区一区二区三| 亚洲一区二区三区乱码在线欧洲| 在线观看日韩一区| 亚洲香蕉久久一区二区| 变态拳头交视频一区二区| 无码人妻啪啪一区二区| 国产裸体歌舞一区二区| 人妻无码一区二区三区四区| 51视频国产精品一区二区| 国语精品一区二区三区| 亚洲日韩国产一区二区三区| 日本精品一区二区三本中文| 一区二区亚洲精品精华液| 亚洲第一区视频在线观看| 夜色福利一区二区三区| 久久青草精品一区二区三区| 国产成人无码AV一区二区在线观看 | 国产区精品一区二区不卡中文| 亚洲欧美日韩一区二区三区在线| 蜜桃视频一区二区三区在线观看| 中文字幕一区二区三区日韩精品| 精品国产亚洲一区二区在线观看| 日本精品一区二区久久久| 琪琪see色原网一区二区| 天天爽夜夜爽人人爽一区二区 | 亚洲国产老鸭窝一区二区三区|