问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用CSS如何做导航条?

发布网友 发布时间:2022-04-28 12:36

我来回答

3个回答

懂视网 时间:2022-04-28 16:58

本文给大家介绍如何使用纯CSS制作特效导航条,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

先上张图,看看效果:

在继续阅读下文之前,你可以先缓一缓。尝试思考一下上面的效果或者动手尝试一下,不借助 JS ,能否巧妙的实现上述效果。

OK,继续。这个效果是我在业务开发的过程中遇到的一个类似的小问题。其实即便让我借助 Javascript ,我的第一反应也是,感觉很麻烦啊。所以我一直在想,有没有可能只使用 CSS 完成这个效果呢?

定义需求

我们定义一下简单的规则,要求如下:

<ul>
 <li>不可思议的CSS</li>
 <li>导航栏</li>
 <li>光标小下划线跟随</li>
 <li>PURE CSS</li>
 <li>Nav Underline</li>
</ul>
  • 导航栏目的 li 的宽度是不固定的

  • 当从导航的左侧 li 移向右侧 li,下划线从左往右移动。同理,当从导航的右侧 li 移向左侧 li,下划线从右往左移动。

  • 实现需求

    第一眼看到这个效果,感觉这个跟随动画,仅靠 CSS 是不可能完成的。 如果想只用 CSS 实现,只能另辟蹊径,使用一些讨巧的方法。 好,下面就借助一些奇技淫巧,使用 CSS 一步一步完成这个效果。分析一下难点:

    宽度不固定

    第一个难点, li 的宽度是不固定的。所以,我们可能需要从 li 本身的宽度上做文章。 既然每个 li 的宽度不一定,那么它对应的下划线的长度,肯定是是要和他本身相适应的。自然而然,我们就会想到使用它的 border-bottom 。

    li { border-bottom: 2px solid #000;}

    那么,可能现在是这样子的(li 之间是相连在一起的,li 间的间隙使用 padding 产生):

    当然,这里一开始都是没有下划线的,所以我们可能需要把他们给隐藏起来。

    li { border-bottom: 0px solid #000;}

    推翻重来,借助伪元素

    这样好像不行,因为隐藏之后,hover li 的时候,需要下划线动画,而 li 本身肯定是不能移动的。所以,我们考虑借助伪元素。将下划线作用到每个 li 的伪元素之上。

    li::before {
     content: "";
     position: absolute;
     top: 0;
     left: 0;
     width: 100%;
     height: 100%;
     border-bottom: 2px solid #000;
    }

    下面考虑第一步的动画,hover 的时候,下划线要从一侧运动展开。所以,我们利用绝对定位,将 li 的伪元素的宽度设置为0,在 hover 的时候,宽度从 width: 0 -> width: 100%,CSS 如下:

    li::before {
     content: "";
     position: absolute;
     top: 0;
     left: 0;
     width: 0;
     height: 100%;
     border-bottom: 2px solid #000;
    }
    li:hover::before {
     width: 100%;
    }

    得到,如下效果:

    左移左出,右移右出

    OK,感觉离成功近了一步。现在还剩下一个最难的问题:

    如何让线条跟随光标的移动动作,实现当从导航的左侧 li 移向右侧 li,下划线从左往右移动。同理,当从导航的右侧 li 移向左侧 li,下划线从右往左移动。

    我们仔细看看,现在的效果:

    当从第一个 li 切换到第二个 li 的时候,第一个 li 下划线收回的方向不正确。所以,可以能我们需要将下划线的初始位置位移一下,设置为 left: 100%,这样每次下划线收回的时候,第一个 li 就正确了:

    li::before {
     content: "";
     position: absolute;
     top: 0;
     left: 100%;
     width: 0;
     height: 100%;
     border-bottom: 2px solid #000;
    }
    li:hover::before {
     left: 0;
     width: 100%;
    }

    看看效果:

    额,仔细对比两张图,第二种效果其实是捡了芝麻丢了西瓜。第一个 li 的方向是正确了,但是第二个 li 下划线的移动方向又错误了。

    神奇的 ~ 选择符

    所以,我们迫切需要一种方法,能够不改变当前 hover 的 li 的下划线移动方式却能改变它下一个 li 的下划线的移动方式(好绕口)。

    没错了,这里我们可以借助 ~ 选择符,完成这个艰难的使命,也是这个例子中,最最重要的一环。

    对于当前 hover 的 li ,其对应伪元素的下划线的定位是 left: 100%,而对于 li:hover ~ li::before,它们的定位是 left: 0。CSS 代码大致如下:

    li::before {
     content: "";
     position: absolute;
     top: 0;
     left: 100%;
     width: 0;
     height: 100%;
     border-bottom: 2px solid #000;
     transition: 0.2s all linear;
    }
    li:hover::before {
     width: 100%;
     left: 0;
    }
    li:hover ~ li::before {
     left: 0;
    }

    至此,我们想要的效果就实现拉!撒花。看看:

    效果不错,就是有点僵硬,我们可以适当改变缓动函数以及加上一个动画延迟,就可以实现上述开头里的那个效果了。当然,这些都是锦上添花的点缀。(以上非原创,转自网络)

    完整代码实例如下:

    <!DOCTYPE html>
    <html>
     <head>
     <meta charset="UTF-8">
     <title></title>
     </head>
     <style>
     *{margin:0;padding:0;}
     a{text-decoration:none;color:#000;}
     ul{margin-top:100px;}
     li{float:left;list-style:none;padding:0 20px;cursor:pointer;position:relative;}
     li::before {
      content: "";
      position: absolute;
      top: 0;
      left: 100%;
      width: 0;
      height: 100%;
      border-bottom: 2px solid #4C7C9C;
      transition: 0.2s all linear;
      z-index:-1;
     }
     li:hover::before {
      width: 100%;
      left: 0;
     }
     li:hover ~ li::before {
      left: 0;
     } 
     </style>
     <body>
     <ul>
      <li><a href="http://www.baidu.com">11111</a></li>
      <li><a href="http://www.taobao.com">22222</a></li>
      <li><a href="http://www.sina.com">33333</a></li>
      <li><a href="http://www.jd.com">44444</a></li>
      <li><a href="http://www.360.com">55555</a></li>
     </ul>
     </body>
    </html>

    实际项目中若li里面有a标签出现不能点击的情况,注意检查伪类和li的层级关系,设置好各自z-index值。

    总结:

    热心网友 时间:2022-04-28 14:06

    单独的css是无法完成导航条的,需要结合html,一般导航条的制作都是通过一个div包裹着ul,使用li来排列完成导航条的html部分,css中,我们需要给这个div宽高,还需要设置好li的宽,高,还有一个float属性,这样基本上导航条就制作完成,请看代码:
    <html>
    <head>
    <style>
    #div1{
    width:600px;
    height:40px;
    font-size:13px;
    }
    #div1 ul li{
    list-style:none;
    width:50px; //具体的高宽需要根据实际要求
    height:30px;
    }

    </head>
    <body>
    <div id='div1'>
    <ul>
    <li><a href=''>目录1</a></li>
    <li><a href=''>目录2</a></li>
    <li><a href=''>目录3</a></li>
    <li><a href=''>目录4</a></li>
    </ul>
    </div>
    </body>
    </html>

    热心网友 时间:2022-04-28 15:24

    你会插入table吧!先插入一个1行13列的table!
    <table align="center" cellpadding="0" cellspacing="0" >
    <tr>
    <td>内容</td>
    <td>竖线</td>
    <td>内容</td>
    <td>竖线</td>
    <td>内容</td>
    <td>竖线</td>
    <td>内容</td>
    <td>竖线</td>
    <td>内容</td>
    <td>竖线</td>
    <td>内容</td>
    <td>竖线</td>
    <td>内容</td>
    </tr>
    </table>
    然后在内容上写上你的菜单,竖线上写上你的竖线!内容上的超链接就定义好超链接颜色!
    例如:a{ text-decoration:none; color:#000000;}
    a:hover{ text-decoration:underline; color:#FF0000;}
    至于每个菜单之间的距离,你在td上面定义,如果定义线颜色,也可以在td上面定义!高度用height,颜色如果在样式上写就color,直接写就用font-color吧!
    PS:你补习下Html的基本知识吧,很多东西很难说!制作就用dreamweaver吧,容易上手
    怎么用css做网页左边的导航怎么用css做网页左边的导航框

    导航栏下面放一个Div,专门用来显示对应导航栏目的内容。点击导航栏触发点击事件,在事件函数中获取点击的栏目id,通过此id确定往p中添加那个内容。可以用p.innerHTML来更新p显示的内容。或者,导航栏下面放置多个Div,数量等于导航栏目的个数,所有p要都重叠在一起。在点击事件函数中控制p的显示和隐藏。h...

    如何用css做导航栏如何用css做导航栏

    1/8首先我们的html里,添加好导航内容。2/8后面的就是网页的具体内容了,这里的代码简单一些。3/8样式里,我们先定义一些菜单里的样式。4/8这时运行页面时,在滚动条滚动下去后,导航是会消失不见的。5/8为了让导航栏固定在顶部,我们可以在导航容器里添加样式position:fixed;top:0;关键是第一个样...

    HTML+CSS制作导航条

    1、首先打开Sublime Text软件,新建一个html页面,并且在html页面中准备好html结构,如下图所示 2、接下来我们在html的body结构里添加导航条的内容,如下图所示 3、然后就需要在style标签中用CSS对导航条的样式进行定义了,如下图所示,书写样式的时候一定要注意写在style标签里面 4、最后运行html页面,...

    CSS 实现自适应导航栏

    CSS实现自适应导航栏的两种方法在移动端设计中,导航栏的自适应性至关重要。主要包含返回按钮、居中标题和可变工具栏。为了实现标题的自适应展示,我们通常需要解决标题过长时的省略和整体居中问题。不完美实现与挑战早期的尝试可能包括使用flex布局,虽然能保证标题居中,但当左右功能区宽度差异明显时,效果会...

    css中如何设置导航条的方法总结

    要实现上图所示的布局效果,有两种布局方法:语义布局和视觉布局3.使用CSS3制作导航条和毛玻璃效果 导航条对于每一个Web前端攻城狮来说并不陌生,但是毛玻璃可能会相对陌生一些。简单的说,毛玻璃其实就是让图片或者背景使用相应的方法进行模糊处理。这种效果对用户来说是十分具有视觉冲击力的。4.CSS3+Js...

    CSS样式制作导航条的步骤

    一、定义一个盒子(“menu”),用来装这个导航的。二、用无序列表(ul)中的列(li)放导航的内容。三、把li的浮动(float)设置为向左浮动(float:left;),这样,就实现了水平导航条了。四、在做其他的一些修饰。(下面我给我弄的一个简单的导航条给你理解)&lt;!DOCTYPE html PUBLIC "-//W3C...

    CSS如何实现网页导航栏置顶

    1、在电脑上打开软件,新建一个html文件,在head部分,编写css样式, list-style-type: none;是除掉导航前面默认带的点,li a,li a.active ,li a:hover:not(.active) 设置鼠标滑到导航栏的颜色变化。2、在html页面body里面编写导航栏内容,可以看到是通过的格式来实现导航。3、在浏览器中打开页...

    div+css怎么实现这个导航栏的样式呀?

    正好在写这么个导航条效果l &lt;!---头部导航开始---&gt; 快速导航 产品目录 设备保修 技术咨询 &lt;/

    使用ul标签和css制作导航条

    第一步,打开软件Adobe Dreamweave CS6,创建一个新的HTML。第二步,在工作区域(body)用标签 ul 和 li 输入导航的内容。第三,编辑样式CSS。在标签之间写入样式表。,第四,紧接上一步。由于无线序列具有默认样式,前面的圆点(),所以先写去除默认样式的样式。样式为:ul,li { list-style:none...

    淘宝店铺导航条字体怎么设置(css)? 注意 是字体 不是颜色

    1、导航栏CSS样式设置,预览:导航样式是选择设置后,预览区会自动发生变化,涉及到“经过"的效果,是指鼠标放到该元素上产生的效果,需要把鼠标放设置的元素上查看设置效果。2、颜色、点击颜色选择器,在颜色选择界面,选择你喜欢的颜色,或者设置指定的颜色(在#位置,填写颜色编号,可以指定需要的颜色。这...

    dw如何做导航条 dw如何做首页导航条 CSS导航条 导航条怎么做 做导航条时 div做导航条 网页设计导航条怎么做 table做导航条 无序列表做导航条
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    防静电环氧地坪施工工艺 ...30.如果分子减去2,这个分数就等于1,原分数是多少 一个分数,分子和分母的和是36,如果分母减去2,这个分数就等于1,求... ...如果分子减去1,这个分数就等于2,原分数是多少 ...如果在分子上加上11.这个分数就等于1,这个数是多少? ...分母的和为23,如果把分母减去3,这个分数就等于1,原来这个分数是多少... 医生回答:请问为什么我在家里就会连续打许多个喷嚏,会流鼻涕,在学校的... 一个分数,分母与分子的和为23,将分子加上5,则成为三分之一.这个数是... 每当我感冒的时候,我就会连打8个喷嚏以上,还有很多的鼻涕~并且鼻塞! ...分子减去二,这个分数就等于一,那么原分数是多少? 手机内录? 有个谜语 各位猜猜 有个谜语谁能帮解一下? 来几个谜语 有答案 根据李克特5级评分法设计出来的问卷结果可以用效度分析吗? 如果想进行排序的话,等级排列法和李克特量表在功能上有什么区别呢? 哪里有达赛莱克特草莓苗 急~!30分!李克特5级量表法制作的薪酬满意度调查问卷,用SPSS录入数据后,怎样得出方差、标准差、均值? 李克特量表和语义差异量表有什么区别 有谁知道记忆宫殿的一些资料?(书或什么的内容等)急急急……帮帮忙~~ 求关于记忆力训练的资源,有记忆宫殿的更好~~~谢谢 李克特五分量表可以有不了解这一项吗 读心神探里记忆宫殿是哪种书 沉默的羔羊讲的是什么故事?怎么看不懂? 莱克特5点量表除了加法,还可以怎样计算? 汉尼拔的结局是什么? 想要跑步效果事半功倍,有什么新奇跑步法? 腌制的萝卜发粘了还能吃吗 为什么腌萝卜放了两天就会变酸?是在坛中放着也一样,有什么办法可以不让... 腌的咸菜盐放少变酸了,还能吃吗 装修完保洁费用通常是多少 家政保洁怎么收费标准?厨房、卫生间收费标准? 家庭保洁的费用是怎么收的呢?居住面积还是建筑面积? 请家政人员打扫卫生怎么计费? 添加本行同名借记卡是什么意思 本地同名借记卡是不是同一家银行的同一家支行? 我在工行有两张同名借记卡卡,其中一张卡里的理财能够从一个卡转移到 怎样才算同名卡? 现在听音乐怎么还收费? 银行卡同名进出什么意思 游戏王中什么是同名卡?必须名字全部一样吗? 重名银行卡能办理吗 有借记卡为什么借款还显示需要一张工行柜面办理的记借卡? 现在网上听歌都要付费了,那点歌机怎么进歌的? 融e借提示:您没有满足条件的电子银行注册借记卡,是什么意思啊,要怎么弄,在线急等!!! 灵活金借记卡不是本人名下的储蓄卡行吗? - 信息提示 现在听歌、看剧都要花钱买,这是营销手段还是保护版权? 如何查同名的银行卡 有人说保险是骗人的,可我买了几份保险,每年交十几万元,有没有风险!