2_31_高度塌陷问题、定位、导航栏(二级导航)_191119

一、高度塌陷问题

解决方案
1、给父元素设置高度
不足:如果子元素大于父元素,则会溢出。

2、 给父元素设置清除浮动,运用overflow属性

3、 使用空标签

(1)	<div style=”clear:both”></div>
(2)	<div class=”box”></div>
<style>
	.box{ 
      	 clear:both;
}
</style>

不足:出现多余代码,代码累积。

4、 通过 after 伪类,在父元素后面添加

例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>高度塌陷</title>
    <style>
        .box1{
            height: 300px;/*方案一*/
            border: 10px solid red;
            overflow: hidden;    /*方案二:设置清除浮动*/
        }
        .box2{
            width: 100px;
            height: 300px;
            background-color: #33CCFF;
            float: left;
        }
        .box3{
            width: 100px;
            height: 300px;
            background-color: #33CCFF;
        }
        /*方案四:通过after伪类*/
        .box1:after{
            content:"asd";  /*内容*/
            display: block;  /*将行内元素变为块级元素*/
            clear:both;   /*清除浮动*/
        }
    </style>
</head>
<body>
<div class="box1">
    <div class="box2">box2</div>
    <div style="clear:both"></div>   <!--方案三:设置空标签-->
</div>

<div class="box3">box3</div>
</body>
</html>

二、定位

什么是 定位:是将指定元素摆放到页面的任意位置。
(通过定位可以任意的摆放元素)

通过 position 属性来定位元素的

(一)相对定位(relative)

1、定义与运用
开启元素定位时( position 的属性值是一个 非 static 的值)
这个时候,可以通过left、right、top、bottom四个属性来设置元素的偏移量。
left: 元素相对于其定位位置的 侧偏移量
right: 元素相对于其定位位置的 侧偏移量
top: 元素相对于其定位位置的 侧偏移量
bottom: 元素相对于其定位位置的 侧偏移量

2、特点
元素的 position 属性位置设置为 relative 时,则开启了元素的相对定位
(1)当开启了元素的相对定位时,如果不设置偏移量,元素不发生任何变化。
(2)相对定位是相对于元素在文档流中原来的位置进行定位的。
(3)相对定位可以使我们的元素提升一个层级,即可以覆盖。
(4)相对定位不会让元素脱离文档流。

3、margin 与相对定位的对比

(1)通过 margin 来实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>相对定位</title>
    <style type="text/css">
      .box1,.box2,.box3,.box4{
          width: 100px;
          height: 100px;
          border: 5px solid #000000;
          background-color: #bfa;
      }
      /*通过 margin 实现 box2 的移动太麻烦,还会牵扯到 box3 的位置变换,不方便*/
        .box2{
            margin-left: 100px;
            margin-top: 100px;
        }
        .box3{
            margin-top: -100px;
        }
      .box4{
        	margin-left: 105px;
            margin-bottom: 110px;
     	 }
    </style>
</head>
<body>
<div class="box1">box1</div>
<div class="box2">box2</div>
<div class="box3">box3</div>
<div class="box4">box4</div>
</body>
</html>

(2)通过 相对定位 来实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>相对定位</title>
    <style type="text/css">
      .box1,.box2,.box3,.box4{
          width: 100px;
          height: 100px;
          border: 5px solid #000000;
          background-color: #bfa;
      }
        .box3{
            position: relative;
            top: -100px;
        }
        .box2{
            position: relative;
            left:200px;
            top: -110px;   /*对比坐标轴来理解,原本是距下边往上移动100px,本应写作 bottom,但可以用top的负值来表示
            ,两者是等价的。这里写成 110px 是因为有边框*/
        }
      .box4{
          position: relative;
          left:105px;
          bottom: 110px;
      }
    </style>
</head>
<body>
<div class="box1">box1</div>
<div class="box2">box2</div>
<div class="box3">box3</div>
<div class="box4">box4</div>
</body>
</html>

4、小练习
在这里插入图片描述

代码即上面比较中的代码

结果:
在这里插入图片描述

(二)绝对定位(absolute)

1、特点
当我们 position 属性设置为 absolute 时,开启了绝对定位
(1)当开启绝对定位时,会使元素脱离文档流
(2)开启绝对定位后,如果不设置偏移量,元素的位置不会发生变化
(3)开启绝对定位后,元素提升一个层级
(4)绝对定位是相当于离他最近的开启了定位的祖先元素进行定位的。 如果其祖先元素没有开启相对定位,则会相当于浏览器窗口进行定位。
(5)绝对定位会改变元素的属性,即行内元素可以变成块级元素。

2、小练习
在这里插入图片描述
代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>绝对定位</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        .box1,.box2,.box3,.box4{
            width: 100px;
            height: 100px;
            border: 5px solid #000000;
            background-color: #bfa;
        }
        .main1{
            position: relative;
        }
        .box3{
            position: absolute;
            top: 110px;
            width: 200px;
            height: 200px;
            background-color: #7cb4ed;
        }
        .main{
            position: relative;
        }
        .box2{
            position: absolute;
            left: 220px;
            bottom: 0px;

        }
        .box4{
            position: absolute;
            left: 105px;
            top: 220px;
        }
    </style>
</head>
<body>
<div class="box1">box1</div>
<div class="main">
    <div class="box2">box2</div>
</div>
<div class="main1">
    <div class="box3">box3</div>
</div>
<div class="box4">box4</div>
</body>
</html>

效果如下:
在这里插入图片描述
注意: 一般情况下,开启的元素的绝对定位,都会同时开启父元素的相对定位。

(三)固定定位(fixed)

1、特点
当元素的 position 属性设置为 fixed 时候,则开启了元素的固定定位
(1)固定定位也是一种绝对定位,它的大部分特点和绝对定位一样
(2)不同的是:
a. 固定定位 永远 是相对于 浏览器 窗口进行定位的。
b.固定定位会 固定 在浏览器的某一个位置,不会随滚动条滚动。

三、导航栏

(一)一级导航

实例一:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>一级导航</title>
    <style text="text/css">
        *{
            margin: 0;
            padding: 0;   /*消除浏览器默认的内外边距*/
        }
        .nav{
            width: 1000px;
            list-style: none;
            margin: 50px auto 0;
            overflow: hidden;
        }
        .nav li{
            float: left;
            width: 25%;  /*占一整列(1000px)的1/4 ,不建议用250px表示,因为一旦列表宽度发生变化,布局就会混乱*/
        }
        .nav a{
            display: block; /*将行内元素变为块级元素*/
            color: white;
            width: 100%;
            text-align: center;
            background-color: #246aee;
            padding: 5px 0;
            text-decoration: none;
            font-weight: bold;
        }
        .nav a:hover{
            background-color: crimson;
        }
    </style>
</head>
<body>
<ul class="nav">
    <li><a href="#">首页</a></li>
    <li><a href="#">新闻</a></li>
    <li><a href="#">练习</a></li>
    <li><a href="#">关于</a></li>
</ul>
</body>
</html>

效果如下:
在这里插入图片描述
实例二:项目升级

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>一级导航</title>
    <style text="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        .nav{
            width: 1000px;
            list-style: none;
            margin: 50px auto 0;
            overflow: hidden;
        }
        .nav li{
            float: left;
            width: 25%;  /*占一整列(1000px)的1/4 ,不建议用250px表示,因为一旦列表宽度发生变化,布局就会混乱*/
        }
        .nav a{
            display: block; /*将行内元素变为块级元素*/
            color: white;
            width: 100%;
            text-align: center;
            background-color: #246aee;
            padding: 5px 0;
            text-decoration: none;
            font-weight: bold;
        }
        .nav a:hover{
            background-color: crimson;
        }
        .nav1{
            width: 1000px;
            list-style: none;
            margin: 0px auto;
            overflow: hidden;
        }
        .nav1 li{
            float: left;
            width: 25%;  /*占一整列(1000px)的1/4 ,不建议用250px表示,因为一旦列表宽度发生变化,布局就会混乱*/
        }
        .nav1 a{
            display: block; /*将行内元素变为块级元素*/
            color: white;
            width: 100%;
            text-align: center;
            background-color: #246aee;
            padding: 5px 0;
            text-decoration: none;
            font-weight: bold;
        }
        .nav1 a:hover{
            background-color: crimson;
        }

    </style>
</head>
<body>
<ul class="nav">
    <li><a href="#">首页</a></li>
    <li><a href="#">新闻</a></li>
    <li><a href="#">练习</a></li>
    <li><a href="#">关于</a></li>
</ul>
<ul class="nav1">
    <li><a href="#">首页</a></li>
    <li><a href="#">新闻</a></li>
    <li><a href="#">练习</a></li>
    <li><a href="#">关于</a></li>
</ul>
</body>
</html>

效果如下:
在这里插入图片描述
(二)二级导航

实例一:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>二级菜单</title>
    <style type="text/css">
        .nav{
            list-style: none;
            background-color: #c5cce5;
            width: 1000px;
            margin: 50px auto 0;   /*列表距离浏览器上方 50px,左右居中*/
        }
        /*.nav:after{*/
            /*content: "";*/
            /*display: block;*/
            /*clear: both;*/
        /*}*/
        .nav li{
            width: 20%;   /* 每个 li 占整个列表的五分之一,这种表达方式即使把列表的宽度改变,它也会按比例分配*/
            float: left;     /*使列表下的五个大的 li 向左浮动*/
            /*position: relative;*/
        }
        .nav li a{
            display: block;
            color: #1833ee;
            font-weight: bold;   /*字体加粗*/
            width: 100%;    /*占每个 li 的全部,每个 li 又是列表的 1/5*/
            padding: 10px;
            text-decoration: none;
            background-color: #c9c7cc;
            text-align: center;  /*字体居中*/
        }
        .nav li a:hover{
            background-color: #b8ee28;
            color:#FF9600;
        }
        .nav2 li{
            float: none;   /* 控制每个 小列表下的 li 不受大列表 .nav li 向左浮动的影响,取消向左浮动*/
        }
        .nav2{
            list-style: none;  /*取消列表的形式*/
            display: none;
        }
        .nav2 li a{
            width: 200px;
            background-color: #FF9600;
            margin: 2px;
        }
        .nav li:hover .nav2{
            display: block;   /*当鼠标滑动至大列表 li 上时,二级菜单 nav2 显示*/
            /*position: absolute;*/
            /*top: 40px;*/
            /*left: 0px;*/
        }
        .nav3 li{
            float: none;
        }
        .nav3{
            list-style: none;
            display: none;
        }
        .nav3 li a{
            width: 200px;
            background-color: #FF9600;
            margin: 2px;
        }
        .nav li:hover .nav3{
            display: block;
            /*position: absolute;*/
            /*top: 40px;*/
            /*left: 0px;*/
        }
    </style>
</head>
<body>
<ul class="nav">
    <li><a href="#">首页</a></li>
    <li><a href="#">课程大厅</a>
        <ul class="nav2">
            <li><a href="#">java</a></li>
            <li><a href="#">jquery</a></li>
            <li><a href="#">js</a></li>
        </ul>
    </li>
    <li><a href="#">学习中心</a>
        <ul class="nav3">
            <li><a href="#">java</a></li>
            <li><a href="#">jquery</a></li>
            <li><a href="#">js</a></li>
        </ul>
    </li>
    <li><a href="#">关于我们</a></li>
    <li><a href="#">练习</a></li>
</ul>
</body>
</html>

效果如下:
在这里插入图片描述
在这里插入图片描述

实例二:项目升级(综合练习)

不成熟的书写
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>中英文变换</title>
    <style>
        .nav{
            list-style: none;
            background-color: #c5cce5;
            width: 500px;
            margin: 40px auto 0;
        }
        .nav li{
            width: 20%;
            float: left;
            overflow: hidden;  /*清除浮动——控制鼠标放上去之后会显示多余中文字部分*/
        }
        .nav li a{
            display:block;
            color: black;
            text-decoration: none;
            background-color: #c5cce5;
            text-align: center;
        }
        .nav li span{
            display: none;  /*暂时隐藏 span 的内容*/
        }
        .nav li a:hover{
            color: white;
            background-color: red;   /*当鼠标滑动到 a 标签上面时 显示的字体颜色、背景颜色*/
            margin-top: -20px;  /*当 鼠标移至 a 标签上时,这一行为可以使英文字覆盖中文字,即改变a 标签中文字的位置
            ,与英文字重叠,达到效果*/
        }
        .nav a:hover span{
            display: block;  /*当鼠标滑动至 a 标签上时 span 的内容显示,此时显示是紧接在中文字下方的 */
        }
        p{
            position: relative;  /* 相对定位 —— 元素相对于原来的位置进行定位——控制红条的位置*/
            top: 22px;
            width: 550px;
            border: 6px solid red;
            left: 20px;
            margin: auto;
        }
    </style>
</head>
<body>
<ul class="nav">
    <li><a href="#">首页<span>Home</span></a></li>
    <li><a href="#">课程大厅<span>Course</span></a></li>
    <li><a href="#">学习中心<span>Learning</span></a></li>
    <li><a href="#">关于我们<span>About</span></a></li>
    <li><a href="#">练习<span>Exercise</span></a></li>
</ul>
<p></p>
</body>
</html>

效果如下:
在这里插入图片描述
在这里插入图片描述
注意: 最下面的红线,可以通过建立一个空的 p 标签,然后增加他的宽度 border 即可实现。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值