Skip to content

1.其他样式

1.1 圆角边框

在 CSS3 中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。
border-radius 属性用于设置元素的外边框圆角。

radius半径原理:(椭)圆与边框的交集形成圆角的效果 img_73.png

语法:

aiignore
border-radius:length;

应用示例:

html
<!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>
        div {
            width: 200px;
            height: 200px;
            background-color: plum;
            border-radius: 50px;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

img_72.png

注意事项:

  1. 参数值可以为数值或百分比的形式
  2. 如果是正方形,想要设置为一个圆,把数值修改为高度或者宽度的一半即可,或者直接写为 50%
html
<!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>
        div {
            width: 200px;
            height: 200px;
            background-color: plum;
            border-radius: 100px;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

img_74.png

  1. 该属性是一个简写属性,可以跟四个值,分别代表左上角、右上角、右下角、左下角
  2. 分开写:border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius
  3. 兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用
  4. 如果是一个矩形,设置为高度的一半就可以
html
<!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>
        div {
            width: 300px;
            height: 100px;
            background-color: plum;
            border-radius: 50px;
        }
    </style>
</head>
<body>
<div></div>
</body>
</html>

img_75.png

1.2 盒子阴影

CSS3 中新增了盒子阴影,我们可以使用 box-shadow 属性为盒子添加阴影。
语法:

aiignore
box-shadow: h-shadow v-shadow blur spread color inset;
参数值描述
h-shadow必需。水平阴影的位置,允许负值
v-shadow必需。垂直阴影的位置,允许负值
blur可选。模糊距离
spread可选。阴影的尺寸
color可选。阴影的颜色
inset可选。将外部阴影改为内部阴影
html
<!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>
        div {
            height: 200px;
            width: 200px;
            background-color: plum;
        }
        div:hover{
            box-shadow: 10px 10px 10px 10px rgba(0, 0, 0, 0.3);
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

img_76.png

注意事项:

  1. 默认的是外阴影(outset),但是不可以写这个单词,否则会导致阴影无效
  2. 盒子阴影不占用空间,不会影响其他盒子排列
  3. 水平和垂直阴影位置如果为负值就是在左侧
  4. 要实现鼠标放上去实现阴影的效果就是标签:hover然后写阴影样式

1.3 文字阴影

在 CSS3 中,我们可以使用 text-shadow 属性将阴影应用于文本。

语法:

aiignore
text-shadow: h-shadow v-shadow blur color;
参数值描述
h-shadow必需。水平阴影的位置,允许负值
v-shadow必需。垂直阴影的位置,允许负值
blur可选。模糊距离
color可选。阴影的颜色
html
<!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>
        div {
            font-size: 50px;
            color: plum;
            font-weight: 700;
            text-shadow: 5px 5px 5px rgba(0, 0, 0, 0.3);
        }
    </style>
</head>
<body>
    <div>我是一段文字</div>
</body>
</html>

img_77.png

2.浮动

2.1 传统网页布局的三种方式

CSS 提供了三种传统布局方式(简单说,就是盒子如何进行排列顺序):

  • 普通流(标准流)
  • 浮动
  • 定位

这三种布局方式都是用来摆放盒子的,盒子摆放到合适位置,布局自然就完成了。
注意:实际开发中,一个页面基本都包含了这三种布局方式(后面移动端学习新的布局方式)。

2.2 标准流(普通流/文档流)

所谓的标准流: 就是标签按照规定好默认方式排列

  1. 块级元素会独占一行,从上向下顺序排列。常用元素:divhrph1~h6uloldlformtable
  2. 行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。常用元素:spanaiem

以上都是标准流布局,我们前面学习的就是标准流,标准流是最基本的布局方式。

2.3 为什么需要浮动

总结:有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局。
因为浮动可以改变元素标签默认的排列方式。
浮动最典型的应用:可以让多个块级元素一行内排列显示。
网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动

2.4 什么是浮动

float 属性用于创建浮动框, 将元素块移动到浏览器的一边,直到左边缘或右边缘及包含块或另一个浮动框的边缘。
语法:

aiignore
选择器 { float: 属性值; }
属性值描述
none元素不浮动(默认值)
left元素向左浮动
right元素向右浮动

2.5 浮动特性

加了浮动之后的元素,会具有很多特性,需要我们掌握的.

  1. 浮动元素会脱离标准流(脱标:浮动的盒子不再保留原先的位置)
    • 脱离标准普通流的控制(浮)移动到指定位置(动),俗称脱标
    • 浮动的盒子不再保留原先的位置 img9.png
html
<!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>
        .box1 {
            float: left;
            height: 100px;
            width: 100px;
            background-color: red;
        }
        .box2 {
            height: 200px;
            width: 200px;
            background-color: green;
        }
    </style>
</head>
<body>
    <div class="box1">浮动的盒子</div>
    <div class="box2">标准流的盒子</div>
</body>
</html>

img_78.png

  1. 浮动的元素会一行内显示并且元素顶部对齐
html
<!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>
        div {
            float: left;
            width: 100px;
            height: 100px;
            background-color: green;
        }
        .one {
          width: 100px;
            height: 100px;
            background-color: red;  
        }
        .four {
          width: 100px;
            height: 100px;
            background-color: plum;  
        }
        .two {
          width: 100px;
            height: 200px;
            background-color: blue;  
        }
    </style>
</head>
<body>
    <div class="one">1</div>
    <div class="two">2</div>
    <div>3</div>
    <div class="four">4</div>
</body>
</html>

img_79.png

  1. 浮动的元素会具有行内块元素的特性
    • 如果p标签不给添加浮动,就还是保留原有的块级元素的特性,不设置宽度默认浏览器宽度 img_80.png

    • 如果给p添加浮动,p标签就变成了行内块元素,不设置宽度不会跟浏览器开宽度相同,只跟p标签中的文字宽度有关 img_81.png

    • 浮动元素的大小根据内容来决定

    • 浮动的盒子中间是没有缝隙的

    • 任何元素都可以浮动,不管原先是什么模式的元素,添加浮动之后具有行内块元素相似的特性

2.6 浮动元素经常和标准流父级搭配使用

为了约束浮动元素位置, 我们网页布局一般采取的策略是:
先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧 img10.png

2.6.1 实验案例

  1. 使用所学知识模拟实现下图效果 img_83.png
html
<!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>
        .box {
            width: 1200px;
            height: 460px;
            background-color: plum;
            margin: 0 auto;
        }
        .left {
            float: left;
            width: 230px;
            height: 460px;
            background-color: blue;
        }
        .right {
            float: left;
            width: 970px;
            height: 460px;
            background-color: skyblue;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="left"></div>
        <div class="right"></div>
    </div>
</body>
</html>

img_82.png

  1. 使用所学知识模拟实现下图效果 img_84.png
html
<!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>
        * {
           margin: 0;
           padding: 0; 
        }
        li {
            list-style: none;
        }
        .box {
            width: 1226px;
            height: 285px;
            background-color: pink;
            margin: 0 auto;
        }
        .box li {
            width: 296px;
            height: 285px;
            background-color: plum;
            float: left;
            margin-right: 14px;
        }
        .box .last {
            margin-right: 0;
        }

    </style>

</head>
<body>
    <ul class="box">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li class="last">4</li>
    </ul>
</body>
</html>

img_85.png

  1. 使用所学知识模拟实现下图效果 img_86.png
html
<!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>
        .box1 {
            width: 1226px;
            height: 615px;
            background-color: pink;
            margin: 0 auto;
        }
        .box2 {
            width: 234px;
            height: 615px;
            background-color: blue;
            float: left;
        }
        .box3 {
            width: 992px;
            height: 615px;
            background-color: skyblue;
            float: left;
        }
        .box3>div {
            width: 234px;
            height: 300px;
            background-color: plum;
            float: left;
            margin-left: 14px;
            margin-bottom: 14px;
        }
    </style>
</head>
<body>
    <div class="box1">
        <div class="box2">左青龙</div>
        <div class="box3">
            <div>1</div>
            <div>2</div>
            <div>3</div>
            <div>4</div>
            <div>5</div>
            <div>6</div>
            <div>7</div>
            <div>8</div>
        </div>
    </div>
</body>
</html>

img_87.png

3.常见的网页布局

  1. 浮动和标准流的父盒子搭配。 先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置 img11.png

  2. 一个元素浮动了,理论上其余的兄弟元素也要浮动。 一个盒子里面有多个子盒子,如果其中一个盒子浮动了,其他兄弟也应该浮动,以防止引起问题。 浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流. img12.png

  3. 实现下图效果 img_88.png

html
<!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>
        * {
            margin: 0;
            padding: 0;
        }
        li {
            list-style: none;
        }
        .top {
            height: 50px;
            background-color: gray;
        }
        .banner {
            height: 200px;
            width: 900px;
            background-color: plum;
            margin: 10px auto;
        }
        .box {
            height: 300px;
            width: 900px;
            background-color: pink;
            margin: 10px auto;
        }
        .box>ul>li {
            height: 300px;
            width: 210px;
            background-color: skyblue;
            float: left;
            margin-right: 20px;
        }
        .box ul .last {
            margin-right: 0;
        }
        .fotter {
            height: 50px;
            background-color: gray;
        }
        .litter {
            height: 75px;
            width: 900px;
            background-color: green;
            margin: 10px auto;
        }
        .litter>ul>li {
            height: 75px;
            width: 210px;
            background-color: goldenrod;
            float: left;
            margin-right: 20px;
        }
        .litter ul .last {
            margin-right: 0;
        }
    </style>
</head>
<body>
    <div class="top">top</div>
    <div class="banner">banner</div>
    <div class="litter">
         <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li class="last">4</li>
        </ul>
    </div>
    <div class="box">
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li class="last">4</li>
        </ul>
    </div>
    <div class="fotter">fotter</div>
</body>
</html>

img_89.png

浮动布局注意事项:

  1. 浮动和标准流的父盒子搭配
    先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置
  2. 一个元素浮动了,理论上其余的兄弟元素也要浮动
    浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流

如果一个父盒子中有三个子盒子,其中第一个、第三个盒子没浮动,第二个盒子浮动,实际效果是什么?
演示效果:

html
<!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>
        .box {
            height: 500px;
            width: 500px;
            background-color: pink;
        }
        .div1 {
            height: 100px;
            width: 50px;
            background-color: green;
        }
        .div2 {
            float: left;
            height: 150px;
            width: 150px;
            background-color: red;
        }
        .div3 {
            height: 200px;
            width: 250px;
            background-color: blue;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="div1">大哥</div>
        <div class="div2">二哥</div>
        <div class="div3">三弟</div>
    </div>
</body>
</html>

img_90.png

4.清除浮动

4.1 为什么需要清除浮动

由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为 0 时,就会影响下面的标准流盒子。 img13.png

4.2 清除浮动的本质

清除浮动的本质是清除浮动元素造成的影响:浮动的子标签无法撑开父盒子的高度
注意:

  • 如果父盒子本身有高度,则不需要清除浮动
  • 清除浮动之后,父级就会根据浮动的子盒子自动检测高度。
  • 父级有了高度,就不会影响下面的标准流了

4.3 清除浮动样式

语法:

aiignore
选择器{clear:属性值;}
属性值描述
left不允许左侧有浮动元素(清除左侧浮动的影响)
right不允许右侧有浮动元素(清除右侧浮动的影响)
both同时清除左右两侧浮动的影响
none不清除浮动(默认值)

我们实际工作中,几乎只用 clear: both;
清除浮动的策略是: 闭合浮动.

4.4 清除浮动的多种方式

4.4.1 额外标签法

额外标签法也称为隔墙法,额外标签法会在浮动元素末尾添加一个空的标签。

html
<!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>
        .box {
            width: 900px;
            margin: 0 auto;
            border: 2px solid blue;
        }
        .div1 {
            float: left;
            height: 100px;
            width: 100px;
            background-color: pink;
        }
        .div2 {
            float: left;
            height: 150px;
            width: 100px;
            background-color: pink;
        }
        .box2 {
            height: 300px;
            background-color: black;
        }
        .clear {
            clear: both;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="div1"></div>
        <div class="div2"></div>
        <div class="clear"></div>
    </div>
    <div class="box2"></div>
</body> 
</html>

优点:通俗易懂,书写方便
缺点:添加许多无意义的标签,结构化较差
注意:要求这个新的空标签必须是块级元素。

4.4.2 父级添加overflow属性

可以给父级添加 overflow 属性,将其属性值设置为 hidden、 auto 或 scroll 。
示例:

html
<!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>
        .box {
            width: 900px;
            margin: 0 auto;
            border: 2px solid blue;
            overflow: hidden;
        }
        .div1 {
            float: left;
            height: 100px;
            width: 100px;
            background-color: pink;
        }
        .div2 {
            float: left;
            height: 150px;
            width: 100px;
            background-color: pink;
        }
        .box2 {
            height: 300px;
            background-color: black;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="div1"></div>
        <div class="div2"></div>
    </div>
    <div class="box2"></div>
</body> 
</html>

优点:代码简洁
缺点:无法显示溢出的部分
注意:是给父元素添加代码

4.4.3 父级添加after伪元素

:after 方式是额外标签法的升级版。给父元素添加:

html
<!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>
        .clearfix:after {  
            content: ""; 
            display: block; 
            height: 0; 
            clear: both; 
            visibility: hidden;  
        } 
        .clearfix {  /* IE6、7 专有 */ 
            zoom: 1;
        }   
        .box {
            width: 900px;
            margin: 0 auto;
            border: 2px solid blue;
        }
        .div1 {
            float: left;
            height: 100px;
            width: 100px;
            background-color: pink;
        }
        .div2 {
            float: left;
            height: 150px;
            width: 100px;
            background-color: pink;
        }
        .box2 {
            height: 300px;
            background-color: black;
        }
    </style>
</head>
<body>
    <div class="box clearfix">
        <div class="div1"></div>
        <div class="div2"></div>
    </div>
    <div class="box2"></div>
</body> 
</html>

优点:没有增加标签,结构更简单
缺点:照顾低版本浏览器

4.4.4 父级添加双伪元素

给父元素添加

html
<!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>  
    .clearfix:before,.clearfix:after {
            content:"";
            display:table; 
        }
        .clearfix:after {
            clear:both;
        }
        .clearfix {
            zoom:1;
        }
        .box {
            width: 900px;
            margin: 0 auto;
            border: 2px solid blue;
        }
        .div1 {
            float: left;
            height: 100px;
            width: 100px;
            background-color: pink;
        }
        .div2 {
            float: left;
            height: 150px;
            width: 100px;
            background-color: pink;
        }
        .box2 {
            height: 300px;
            background-color: black;
        }
    </style>
</head>
<body>
    <div class="box clearfix">
        <div class="div1"></div>
        <div class="div2"></div>
    </div>
    <div class="box2"></div>
</body> 
</html>

去除浮动之前效果:
img_92.png 去除浮动之后效果:
img_91.png

4.5 清除浮动总结

  1. 父级没高度。
  2. 子盒子浮动了。
  3. 影响下面布局了,我们就应该清除浮动了。
清除浮动方式优点缺点适用场景
额外标签法通俗易懂,书写方便添加无意义标签,结构化差简单布局,少量浮动元素
父级overflow代码简洁溢出内容会被隐藏不需要显示溢出的父容器
after伪元素结构简单,不添加额外标签需要兼容旧浏览器现代浏览器项目
双伪元素结构最优,兼容性好代码稍复杂需要兼容旧浏览器的项目

Released under the MIT License.