一级导航
- 首先写页面结构,结构写好了再确定特效。在书写页面结构时,同时要确定每个块的宽高、位置,并通过设置颜色属性调试
- 在写css特效时,首先要注意重置默认样式,即浏览器默认给的一些属性。例如,我们打开检查发现body有一个margin=8的属性,这是谷歌浏览器默认给的,要重置掉
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style type="text/css"> body{ margin: 0; } ul{ margin: 0; padding: 0; list-style-type:none; } a{ text-decoration: none; /* 去掉下划线 */ } /* 上边的ul和body、a都是为了重置浏览器的默认样式 注意,重置默认样式时通过元素名直接修改, 这是因为若ul有这样的默认样式,那么所有的ul都会有,通过元素名可以直接全部修改掉 */ #banner{ /* 先设置大小宽高:可以用qq截图测量 */ width: 1250px; height: 460px; /* color刚开始设置上,是为了便于调试,看看大小位置设置对了没 */ background: aqua; /* 页面的主要内容区永远在中间,可以通过外边距进行调整 直接调父集元素的外边距,子集也会随着往中间跑, 这也是我们写css为什么要从父集写到子集 */ margin: 260px auto; } .nav{ width: 236px; height: 460px; background: rgba(0, 0, 0, .6); /* css3中自带的颜色格式,第四个参数表示透明度 */ } .nav-list{ padding: 20px 0; width: 236px; /* height: 460px; */ height: 420px; /* 这里460是错误的,因为元素的大小包括内边距,所以460要减去两个20 */ position: relative; /* 这里的相对定位,是为了给二级导航的绝对定位作参考 */ } .nav-item-first{ width: 100%; height: 42px; /* text-indent: 30px; 首行缩进 line-height: 42px; 垂直居中:通过设置行高和盒子高度相等,让文字垂直居中 */ } .nav-item-first:hover{ background: #ff9900; } .first-link{ text-indent: 30px; line-height: 42px; /* width: 100%; height: 42px; */ /* 这里a标签是行内元素,无法设置宽高,给了也不管用 */ /* 元素有三种:块元素、行内元素、行内块元素 只有块元素和行内块元素才能设置宽高 为了保证最大兼容尺度,我们通常选用块元素 这是因为行内块元素是css3新增的性质,若浏览器版本过低,无法识别 */ display: block; color: #fff; font-size: 14px; /* 每个浏览器有固定的默认文字大小,例如谷歌是16px。 当有文字时,最好就要给他大小,防止不同浏览器看到的效果不一样 */ } </style></head><body> <div id="banner"> <div class="nav"> <ul class="nav-list"> <li class="nav-item-first"> <a href="" class="fisrst-link">手机 电话卡</a> <!-- <div class="show-warp"> <ul class="item-warp"> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> <li class="shop-item"><img src="" alt=""><a></a></li> </ul> </div> --> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">电视盒子</a> <div class="show-warp"> <ul class="itemwarp"> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">笔记本</a> <div class="show-warp"> <ul class="itemwarp"> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">智能家电</a> <div class="show-warp"> <ul class="itemwarp"> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">健康家居</a> <div class="show-warp"> <ul class="itemwarp"> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">出行 儿童</a> <div class="show-warp"> <ul class="itemwarp"> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">路由器 手机配件</a> <div class="show-warp"> <ul class="itemwarp"> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">移动电源 插线板</a> <div class="show-warp"> <ul class="itemwarp"> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">耳机音响</a> <div class="show-warp"> <ul class="itemwarp"> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">生活 米兔</a> <div class="show-warp"> <ul class="itemwarp"> </ul> </div> </li> </ul> </div> </div></body></html>
二级导航
- 二级导航可以理解为,使一级导航的每个li对应一个区域,当鼠标滑到这个li时,就让区域显示出来。若我们将二级导航写在外边,还要用js强行联系,麻烦;不如直接写在一级导航的li里边
- 写样式时,经常遇到没有给距离样式,却莫名其妙的给了样式。这是由于样式污染,样式污染可能由命名重复、继承、优先级引起。在样式中,所有的文本样式会被继承(如字体大小、粗细、行高、行间距、文字对齐等),我们可以从检查中的inherited from看到。
- 如何避免文本样式的继承污染呢?和文本有关的样式全部写在文本所在的元素,不要把文本样式写在结构父集中。
- div ul li是结构标签,a h1 p是文本标签。我们之前把行高和行间距放到li里边了,所以出错,应该放到a标签里
完整代码
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style type="text/css"> body{ margin: 0; } ul{ margin: 0; padding: 0; list-style-type:none; } a{ text-decoration: none; /* 去掉下划线 */ text-indent: 30px; /* 首行缩进 */ line-height: 42px; /* 垂直居中:通过设置行高和盒子高度相等,让文字垂直居中 */ } /* 上边的ul和body、a都是为了重置浏览器的默认样式 注意,重置默认样式时通过元素名直接修改, 这是因为若ul有这样的默认样式,那么所有的ul都会有,通过元素名可以直接全部修改掉 */ #banner{ /* 先设置大小宽高:可以用qq截图测量 */ width: 1250px; height: 460px; /* color刚开始设置上,是为了便于调试,看看大小位置设置对了没 */ background: aqua; /* 页面的主要内容区永远在中间,可以通过外边距进行调整 直接调父集元素的外边距,子集也会随着往中间跑, 这也是我们写css为什么要从父集写到子集 */ margin: 260px auto; } .nav{ width: 236px; height: 460px; background: rgba(0, 0, 0, .6); /* css3中自带的颜色格式,第四个参数表示透明度 */ } .nav-list{ padding: 20px 0; width: 236px; /* height: 460px; */ height: 420px; /* 这里460是错误的,因为元素的大小包括内边距,所以460要减去两个20 */ position: relative; /* 这里的相对定位,是为了给二级导航的绝对定位作参考 */ } .nav-item-first{ width: 100%; height: 42px; /* text-indent: 30px; 首行缩进 line-height: 42px; 垂直居中:通过设置行高和盒子高度相等,让文字垂直居中 */ } .nav-item-first:hover{ background: #ff9900; } .first-link{ text-indent: 30px; line-height: 42px; /* width: 100%; height: 42px; */ /* 这里a标签是行内元素,无法设置宽高,给了也不管用 */ /* 元素有三种:块元素、行内元素、行内块元素 只有块元素和行内块元素才能设置宽高 为了保证最大兼容尺度,我们通常选用块元素 这是因为行内块元素是css3新增的性质,若浏览器版本过低,无法识别 */ display: block; color: #fff; font-size: 14px; /* 每个浏览器有固定的默认文字大小,例如谷歌是16px。 当有文字时,最好就要给他大小,防止不同浏览器看到的效果不一样 */ } .show-warp{ display: none; /* 让元素彻底隐藏 */ height: 460px; /* height: 460px; width: 500px; background: #000; */ /* 在二级导航中,高度可以设置清楚,但是宽度不是固定的,而是根据商品个数自动收缩 这里设置宽高颜色,是为了调试其位置 */ position: absolute; /* 为了改变元素的位置,我们给元素一个绝对定位 */ /* 接下来要考虑相对定位(即对应的参考系)是谁, 若参考li,那么每个元素的父集li位置都是不同的,没法一起表示 因此把ul作为参考系 */ left: 236px; top: 0; background: #fff; box-shadow: 0 5px 30px #c5c5c5; /* 阴影层 */ } .nav-item-first:hover .show-warp{ display: block; /* 鼠标划过时,显示元素 */ } .shop-item{ position: absolute; width: 265px; height: 76px; line-height: 76px; } .shop-item img{ vertical-align: middle; /* 改变图片和旁边内容的对齐方式 默认是图片和文字底部对齐*/ margin: 0 20px 16px; } </style></head><body> <div id="banner"> <div class="nav"> <ul class="nav-list"> <li class="nav-item-first"> <a href="" class="fisrst-link">手机 电话卡</a> <div class="show-warp"> <ul class="item-warp"> <li class="shop-item"><img src="images/1/1.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/2.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/3.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/4.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/5.jpg" alt="" width="40" height="40"><a>小米8小米8</a></li> <li class="shop-item"><img src="images/1/6.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/7.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/8.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/9.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/10.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/11.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/12.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/13.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/14.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/15.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/16.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/17.png" alt="" width="40" height="40"><a>来来来</a></li> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">电视盒子</a> <div class="show-warp"> <ul class="item-warp"> <li class="shop-item"><img src="images/1/1.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/2.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/3.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/4.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/5.jpg" alt="" width="40" height="40"><a>小米8小米8</a></li> <li class="shop-item"><img src="images/1/6.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/7.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/8.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/9.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/10.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/1.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/2.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/3.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/4.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/5.jpg" alt="" width="40" height="40"><a>小米8小米8</a></li> <li class="shop-item"><img src="images/1/6.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/7.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/8.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/9.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/10.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/11.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/12.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/13.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/14.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/15.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/16.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/17.png" alt="" width="40" height="40"><a>来来来</a></li> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">笔记本</a> <div class="show-warp"> <ul class="item-warp"> <<li class="shop-item"><img src="images/1/1.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/2.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/3.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/4.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/5.jpg" alt="" width="40" height="40"><a>小米8小米8</a></li> <li class="shop-item"><img src="images/1/6.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/7.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/8.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/9.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/10.jpg" alt="" width="40" height="40"><a>小米8</a></li> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">智能家电</a> <div class="show-warp"> <ul class="item-warp"> <li class="shop-item"><img src="images/1/1.png" alt="" width="40" height="40"><a>1</a></li> <li class="shop-item"><img src="images/1/2.jpg" alt="" width="40" height="40"><a>2</a></li> <li class="shop-item"><img src="images/1/3.png" alt="" width="40" height="40"><a>3</a></li> <li class="shop-item"><img src="images/1/4.png" alt="" width="40" height="40"><a>3</a></li> <li class="shop-item"><img src="images/1/5.jpg" alt="" width="40" height="40"><a>5</a></li> <li class="shop-item"><img src="images/1/6.jpg" alt="" width="40" height="40"><a>6</a></li> <li class="shop-item"><img src="images/1/7.png" alt="" width="40" height="40"><a>4</a></li> <li class="shop-item"><img src="images/1/8.png" alt="" width="40" height="40"><a>5</a></li> <li class="shop-item"><img src="images/1/9.png" alt="" width="40" height="40"><a>4</a></li> <li class="shop-item"><img src="images/1/10.jpg" alt="" width="40" height="40"><a>4</a></li> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">健康家居</a> <div class="show-warp"> <ul class="item-warp"> <li class="shop-item"><img src="images/1/1.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/2.jpg" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/3.png" alt="" width="40" height="40"><a>小米8</a></li> <li class="shop-item"><img src="images/1/4.png" alt="" width="40" height="40"><a>小米8</a></li> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">出行 儿童</a> <div class="show-warp"> <ul class="item-warp"> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">路由器 手机配件</a> <div class="show-warp"> <ul class="item-warp"> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">移动电源 插线板</a> <div class="show-warp"> <ul class="item-warp"> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">耳机音响</a> <div class="show-warp"> <ul class="item-warp"> </ul> </div> </li> <li class="nav-item-first"> <a href="" class="fisrst-link">生活 米兔</a> <div class="show-warp"> <ul class="item-warp"> </ul> </div> </li> </ul> </div> </div> <!-- 这里我们使用jQuery,但是不用下载jQuery,而是通过jQuery CDN的引入 --> <script type="text/javascript" src="http://code.jquery.com/jquery-2.2.4.js"></script> <!-- 这里要注意的是,jQueryCDN的引入可能因为网络不好而失效 --> <script type="text/javascript"> // 要变更所有的二级导航,因此要给所有show-warp的所有shop-item设置 $(".show-warp").each(function(){ //获取当前show-warp的所有li var oLi=$(this).find(".shop-item"); //获取li的高度和宽度 var height=oLi.height(); var width=oLi.width(); //获取li的个数 var length=oLi.length; //通过个数确定有几竖列 var col=Math.ceil(length/6);//向上取整 //得到当前show-warp 的宽度 $(this).width(col*width); //给所有的li摆位置 oLi.each(function(i){//i表示当前个数 var x=Math.floor(i/6);//向下取整 var y=i%6; $(this).css({ left:x*width+'px', top:y*height+'px', }) }) }) </script></body></html>