CSS(Cascading Style Sheet)

1 基本概念

CSS(Cascading Style Sheet)级联样式表,用来控制页面布局与页面样式
比如可以修改颜色、大小、位置、层级、动画等等

2 CSS 的三种位置

2.1 CSS行内样式

写在 HTML 元素的开始标签里,只对当前行生效
特点:复用性差

<h4 style="color:red;">我是标题</h4>

2.2 CSS内部样式

写在 head 标签中的 style 标签里,对当前页面所有元素生效
特点:加载速度快,首页常用

<head>
  <style>
     h1 {
          color:red;
        }
  </style>
</head>

2.3 CSS外部样式

写在独立的.css 文件中,在html 文件中引入外部的.css 文件

  • rel:必写属性,表示引入文件是什么类型 stylesheet 样式表
  • href:要引入 CSS 文件的路径

特点:可以被多个页面共享,复用性强,常用于二三级页面

<html>
        <head>
                <link rel="stylesheet" href="Demo.css">
        </head>
</html>

2.4 关于优先级

  • 渲染同一个元素,样式不同会叠加生效,比如背景色和文字颜色会同时生效
  • 如果渲染的样式相同,按照如下优先级排序:
  • !important>行内样式>(内部样式=外部样式)
  • 内部样式与外部样式优先级一样,后写的样式会把之前的样式覆盖掉
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS的三种位置</title>
    <!-- 2.CSS内部样式,在head标签中加style标签,对当前页面所有被选中的元素生效 -->
    <style>
        p {
            color: blue;
        }
        h4 {
            background-color: yellow;
            color: green !important;
        }
    </style>
    <!-- 3.CSS外部样式
    rel="stylesheet"必写属性,表示当前引入的文件类型是CSS样式文件  -->
    <link rel="stylesheet" href="Demo.css">
</head>
<body>
    <div>我是div</div>
    <div>我是div</div>
    <div>我是div</div>
    <hr>
    <h4>我是标题</h4>
    <!--1.CSS行内样式 加在当前行元素上并且只对当前行元素生效 -->
    <h4 style="color: red;">我是标题</h4>
    <h4>我是标题</h4>
    <hr>
    <p>我是段落</p>
    <p>我是段落</p>
    <p>我是段落</p>
</body>
</html>

Demo.css

div {
    width: 100px;
    height: 100px;
    border: 5px solid red;
}
h4 {
    color: blue;
}

3 常用选择器速查

  • 标签名选择器:选中指定标签的所有元素,写法: 标签名 { CSS 样式 }
  • 类选择器:选中指定的一类元素,写法: .class 值 { CSS 样式 }
  • id 选择器:选中指定的一个元素,写法: #id 值 { CSS 样式 }
  • 伪类选择器:
    • 选中超链接未被访问时时的状态,写法:a:link{ CSS 样式 }
    • 选中超链接已被访问时的状态,写法:a:visited{ CSS 样式 }
    • 选中元素的悬停状态(非超链接独有),写法: div:hover{ CSS 样式 }
    • 选中超链接激活时的状态,写法:a:active{ CSS 样式 }
    • 注意:a 标签伪类的顺序: :link :visited :hover :active
  • 群组选择器:选中多种不同的元素,写法: #id 值,.class 值,标签名{ CSS 样式 }
  • 通用选择器:选中所有元素,写法: *{ CSS 样式 }
  • 属性选择器:选中指定属性与属性值的元素,写法: [type=“text”]{ CSS 样式 }
  • 后代选择器:选中祖先元素中包含的所有后代元素,写法: div span{ CSS 样式 }
  • 子代选择器:选中父元素中下的直接子元素,写法: div>span{ CSS 样式 }
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS选择器</title>
    <style>
        /* 标签名选择器 */
        h4 {
            color: red;
        }
        div {
            width: 120px;
            height: 120px;
            background-color: cyan;
        }
        /* id选择器 */
        #d2 {
            color: red;
        }
        /* 类选择器 */
        .error {
            background-color: red;
            color: white;
        }
        .success {
            background-color: green;
            color: white;
        }
        /* 伪类选择器 :hover选中元素的悬停状态*/
        /* 紧挨着写 #d2与:hover 是与的关系,只有同时满足才可以被选中 */
        #d2:hover {
            background-color: pink;
        }
        /*群组选择器 只要满足其中一个,就可以被选中*/
        #d2,h4,.error {
            text-decoration: underline;
        }
        /* 通配选择器 匹配所有元素*/
        * {
            font-style: italic;
        }
        a:link { /* 选中超链接未被访问过的状态 */
            color: gray;
        }
        a:visited { /* 选中超链接已经被访问过的状态 */
            color: green;
        }
        a:hover { /* 选中元素悬停时的状态(不是超链接独有的) */
            color: red;
        }
        a:active { /* 选中超链接激活时的状态 */
            color: orange;
        }
        /* 属性选择器 */
        input[type="text"] {
            background-color: yellow;
        }
        /* 后代选择器 选中包含在内的所有后代元素 子元素 孙元素...*/
        #d1 span {
            background-color: magenta;
        }
        /* 子代选择器 大于号,选中本元素的直接子元素 可以逐级向下写多层  */
        #d1>div>span {
            color: yellow;
        }
    </style>
</head>
<body>
    <h4>我是标题</h4>
    <p>我是段落</p>
    <a href="#">我是超链接</a>
    <h4>我是标题</h4>
    <div>我是div1</div>
    <div id="d2">我是div2</div>
    <div>我是div3</div>
    <hr>
    <span class="error">用户名已被占用</span>
    <span class="error">操作失败</span>
    <br>
    <span class="success">有效的手机号</span>
    <span class="success">新增成功</span>
    <hr>
    <a href="https://www.baidu.com">百度首页</a>
    <a href="abc">错误地址</a>
    <hr>
    <input type="text">
    <input type="password">
    <hr>
    <div id="d1">
        <span>1</span>
        <div>
            <span>2</span>
            <b>测试</b>
        </div>
        <span>3</span>
    </div>
</body>
</html>

4 CSS常用值

  1. px:像素,屏幕上最小的一个发光点
  2. 颜色表示法:
  • 单词表示,如:red
  • 十六进制表示法,如:color:#0000FF;
    • 前两位表示红色,中间两位表示绿色,最后两位表示蓝色
  • 简写的十六进制表示法,如:color:#00F;
    • 三种颜色两位数字都相同,才可以简写
  • rgb(red,green,blue)表示法,如:color:rgb(0,0,255);
    • 值的范围是 0~255
  • rgba(red,green, blue,alpha)表示法,如:color:rgba(0,0,255,0.5);
    • 不透明度,0 表示完全透明,1 表示完全不透明

自然界的颜色有几百万种,但描述颜色的单词只有几百个该怎么办呢? 自然界中太阳光的三原色:红色 绿色 蓝色
可以通过这三种颜色调配出任意的其他颜色 RGB 24 位色表示法 在计算机中,使用 8 个 bit 位存储红色,8 个 bit
位存储绿色,8 个 bit 位存储蓝色,8 个 bit 位能存 2^8=256 个值,也就是 0~255,也就是 256256256
1677 万种色彩,人眼最多识别 300~500 万种色彩,已经超过了人眼的极限,也称作 24 位真彩色,写法:rgb(255,0,0)
RGBA 32 位色表示法 最后一个 A 是(alpha)表示不透明度参数 最后 8 个 bit 位存储不透明度 1 完全不透明 0
完全透明 rgba(255,0,0,0.85) 表示红色,透明度 0.85 注意这个小数的 0 可以省略,比如
rgba(255,0,0,0.85);可以简写成 rgba(255 , 0 , 0 , .85); 十六进制哈希表示法 前/中/后
两位数值分别代表 红/绿/蓝 色的色谱范围。数值从 0-9 a-f
#0000FF 这里的字母大小写均可 但注意此种表示法只能表示 24 位色,没有透明度 十六进制缩写表示法
#00F 这里的字母大小写均可 当十六进制哈希表示法的表示结果为:#0000FF 当每种颜色的两个数字相同时: 可以使用十六进制缩写表示法简写成一个数字:#00F 注意:如果每种颜色的两个数字不同,则不能简写,比如#808080 就不可以简写

5 背景图处理

背景颜色:background-color:#fff;

  • 颜色可以使用任何的色值(十六进制 rgb rgba 单词等) 背景颜色会在元素的最底层

背景图片插入:background-image:url(路径);

  • 注意:背景图和 img 标签的图片插入是有区别的!
  • img 标签插入的图片在默认情况下直接就能显示图片
  • 背景图必须给所在元素设置宽高才能显示出来

图片重复问题:background-repeat

  • 图片被平铺到元素中会出现两种情况:
  • 图片大于元素,图片显示不全
  • 图片小于元素,会重复,哪个方向有空余空间,就向哪个方向重复
  • background-repeat: no-repeat; 背景图仅显示一次,不重复
  • background-repeat: repeat; 默认值,X-Y 轴都重复
  • background-repeat: repeat-x; 仅在 X 轴(水平方向)重复
  • background-repeat: repeat-y; 仅在 Y 轴(垂直方向)重复

背景图尺寸:background-size

  • 没有设置任何尺寸时,默认使用图片本身的大小
  • 设置尺寸时,值 1 是背景图的宽度,值 2 是背景图的高度
  • background-size: 600px 300px;
  • background-size: 100% 100%;
  • 注意:图片比例要合适,否则会尺寸失真

background-position:left top; 默认值(左上)

  • 第一个值表示水平方向 第二个值表示垂直方向
  • X 轴(水平方向)的值:left 左 center 中 right 右
  • Y 轴(竖直方向)的值:top 上 center 中 bottom 下
  • center center 表示水平与竖直方向均居中,可以简写成一个 center
  • 还可以写像素值,原点(0px 0px)就是左上角
  • 正值向右/向下移动;负值向左/向上移动
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS色值与背景图</title>
    <style>
        h1 {
            /*1.单词表示法*/
            color: red;
            /*2.rgb(红,绿,蓝) 范围:0~255 */
            color: rgb(255,0,0);
            color: rgb(0,255,0);
            color: rgb(0,0,255);
            /*3.十六进制表示法 0~9 A~F
            前两位表示红色 中间两位表示绿色 最后两位表示蓝色*/
            color: #FF0000;
            color: #00FF00;
            color: #0000ff;
            /*4.十六进制简写*/
            color: #f00;
            color: #0f0;
            color: #00f;
            color: #000;
            color: #fff;
            color: #808080;
            /* 5.rgba(red,green,blue,alpha)表示法
            1完全不透明 0透明到看不见 0.5半透明 */
            color: rgba(0,0,255,0.2);
        }
        .d1 {
            /*1.插入背景图*/
            background-image: url(img/mr.png);
            /*2.背景图必须设置所在区域大小*/
            width: 50px;
            height: 100px;
            /*可以同时添加背景色,没有图的地方有颜色*/
            background-color: cyan;
            /*3.背景图尺寸 宽度 高度*/
            background-size: 50px 100px;
        }
        .d2 {
            width: 300px;
            height: 300px;
            border: 2px solid #f00;
            background-image: url(img/mr.png);
            /*4.背景图重复*/
            background-repeat: no-repeat; /*不允许重复*/
            /*5.背景图位置 水平方向 垂直方向*/
            background-position: 0px 0px; /*原点 左上角*/
            background-position: 100px 50px; /*右下 正数*/
            background-position: -50px -50px; /*左上 负数*/
            background-position: center; /*两个center简写成1个 居中*/
            background-position: 50% 50%; /*百分比 居中*/
            background-position: 100% 100%; /*右下角*/
        }
        .d3 {
            /*想要插入背景图 必须设置所在区域大小*/
            width: 611px;
            height: 376px;
            background-color: #e8e8e8;
            /*插入背景图*/
            background-image: url(img/computer1.png);
            /*设置背景图不重复*/
            background-repeat: no-repeat;
            /*背景图尺寸 宽 高*/
            background-size: 318px 319px;
            /*背景图位置 水平 垂直*/
            background-position: 90% 60%;
        }
    </style>
</head>
<body>
    <h1>测试颜色</h1>
    <hr>
    <!-- .d*3 生成3个class值为d的div   -->
    <div class="d1"></div>
    <div class="d2"></div>
    <div class="d3"></div>
</body>
</html>

6 元素的显示模式

  1. 块级元素:display:block;
    排列方式:按照书写的顺序,从上往下依次排列
    特点:独占一行,还可以设置宽高
    常见标签:div h1~h6 p form table ul ol li…
  2. 行内元素:display:inline;
    排列方式:按照书写顺序从左往右依次排列
    特点:共占一行,不能设置宽高
    常见标签:span a i b s…
  3. 行内块元素:display:inline-block;
    排列方式:按照书写顺序从左往右依次排列
    特点:共占一行,可以修改宽高
    常见标签:input button
  4. 元素消失:display:none;
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>元素显示模式</title>
    <style>
      /*块级元素 display:block;
      独占一行 可以设置宽高*/
      div {
        height: 100px;
        border: 2px solid #00f;
      }
      #d2 {
        width: 500px;
      }
      /*行内元素:display:inline 共处一行 无法设置宽高
      如果想具有块级元素特点,可以使用display:block切换为块级元素 */
      span {
        width: 200px;
        height: 200px;
        background-color: #f00;
        display: block;
      }
      /*3.行内块:inline-block 共处一行 可以设置大小 */
      input,button {
          width: 200px;
          height: 200px;
      }
      #d3 {
          /*4.让元素消失 */
          display: none;
      }
    </style>
</head>
<body>
  <div id="d1"></div>
  <div id="d2"></div>
  <div id="d3"></div>
  <hr>
  <span>1234567890</span>
  <span>1234567890fhoweifhwiowid</span>
  <span>1234567890</span>
  <hr>
  <input type="text">
  <input type="text">
  <input type="text">
  <button>点我提交</button>
</body>
</html>

7 字体处理

color: 设置文字颜色
font-size :设置文字的大小

  • 谷歌浏览器默认字体大小 16px,最小 12px,低于 12px 也以 12px 显示

font-family: “幼圆”; 设置文字字体

  • 执行顺序是从前向后执行的
  • 字体名称要使用引号包裹
  • 商用字体要考虑到版权问题
  • 尽量少用奇怪的字体,因为客户可能会没有

字体文件在电脑 C 盘的“Fonts”文件夹中
打开“计算机”->C 盘-> “Windows”-> “Fonts”即可看到所有已安装的字体

font: 35px “微软雅黑”;字号和字体可以一起设置
text-decoration :设置文本修饰线

  • underline 下划线
  • none 去掉所有修饰线
  • line-through 添加一条删除线

line-height:设置文本行高

  • 称为行间距,指的是行与行文本之间的距离
  • 如果需要单行文字在元素内垂直居中,可以让行高为元素的高度即可

text-align :设置块级元素内文本的水平对齐方式

  • 对齐方式:left 左对齐 / center 居中对齐 / right 右对齐

text-shadow: 20px 20px 5px red;

  • 文本阴影:X 轴偏移量 Y 轴偏移量 羽化值 阴影颜色

font-weight :字重(字体粗细),可取值:

  • normal 400 正常体
  • lighter 300 细体
  • bold 600 粗体

text-indent: 2em;用于设置内容的首行缩进

  • 一般用于中文段落最开始,首行需要缩进两个中文字符

font-style: italic; 文字倾斜效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文字处理</title>
    <style>
        p {
            /*文字大小 谷歌浏览器默认的字号是16px 最小字号12px*/
            font-size: 30px;
            /*字体 可以设置多个*/
            font-family: "幼圆uuuu","宋体";
            /*简写:字号 字体*/
            font: 35px "微软雅黑";
        }
        a {
            /*文本修饰线*/
            text-decoration: none; /*去除修饰线*/
            text-decoration: line-through;/*删除线*/
            text-decoration: underline;/*下划线*/
            text-decoration: overline;/*顶部线*/
        }
        div {
            width: 200px;
            height: 200px;
            border: 5px solid #00f;
            /*文字水平对齐方式:居中*/
            text-align: center;
            /*行高:设置行与行之间的距离
            如果单行文字的行高与div一样高,可以设置文字垂直居中效果*/
            line-height: 200px;
        }
        h1 {
            /*字体字重*/
            font-weight: bold;/*加粗*/
            font-weight: normal;/*正常体*/
            font-weight: lighter;/*细体*/
            font-style: italic;/*字体样式:斜体*/
        }
        span {
            /*文本阴影:X轴偏移量 Y轴偏移量 羽化值 阴影颜色
            水平方向:正数向右 负数向左
            垂直方向:正数向下 负数向上
            羽化值:数值越大,阴影越模糊*/
            text-shadow: 20px -50px 2px red;
        }
    </style>
</head>
<body>
  <p>我是测试文字 123 ABC abc</p>
  <a href="#">超链接</a>
  <div>
      测试文字
  </div>
  <span>测试文字</span>
  <h1>标题字</h1>
</body>
</html>

8 盒子模型

一个 HTML 元素,需要占用页面的布局空间,这个空间由以下几个部分组成:

  • content 内容区域 元素本身的大小
  • padding 内间距 元素内容与边框之间的距离
  • border 元素的边框
  • margin 外间距 元素与元素之间的距离

涉及到四个方向 left 左 right 右 top 上 bottom 下

8.1 外间距(margin)

外间距的写法:

  • margin-bottom: 50px; 设置单侧外间距(top上 / right右 / bottom下/ left左)
  • margin:10px; 四个方向都是 10px
  • margin:10px 20px; 上下 10px 左右 20px
  • margin:10px 20px 30px; 上 10px 左右 20px 下 30px
  • margin:10px 20px 30px 40px; 上 10px 右 20px 下 30px 左 40px
  • margin: 0 auto; 上下 0 左右居中(块级元素左右外间距计算成等值,能实现水平居中效果)

规律:按照 上右下左 顺时针 依次赋值 没有的找对门

外间距指的元素外部与其它元素之间的距离

  1. 块级与行内块元素四个方向的外间距均生效
  2. 行内元素的左右外间距可以用,上下外间距不生效
  3. 父子贴边问题:给父元素加 BFC 结界 overflow:hidden;
    第 1 个子元素的上外间距与最后 1 个子元素的下外间距都会包裹在父元素范围之内
  4. 相邻兄弟间如果有重叠的外间距,取最大值显示
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>外间距测试</title>
    <style>
        body {
            /*可以去掉body默认四个方向的8px外间距*/
            margin: 0;
        }
        /* div默认宽度为其父级宽度的100% 默认高度为0 */
        .fu {
            background-color: rgba(255,255,0,.3); /*不透明度.3 0透明 1不透明*/
            /*给父元素设置BFC结界 把首尾元素超出的外间距包裹在内*/
            overflow: hidden;
        }
        .fu>div {
            width: 100px;
            height: 100px;
            background-color: rgba(0,0,255,.6);
            border: 2px solid #00f;
            color: #fff;
        }
        /* 相邻兄弟垂直方向的外间距取大值显示,不会叠加 */
        .z1 {
            margin-bottom: 30px;
            margin-top: 50px;/*第1个子元素的上外间距会超出父元素的范围*/
        }
        .z2 {
            margin-top: 50px;
        }
        .z4 {
            margin-bottom: 50px;/*最后1个子元素的下外间距会超出父元素的范围*/
        }
        .z3 {
            /* 上 右 下 左 顺时针依次赋值 没有值就找对门的值 */
            margin: 10px 20px 30px 40px;
            margin: 10px;
            margin: 10px 20px;
            margin: 10px 20px 30px;
            /*上下0 左右auto让浏览器自动计算为相等的值 实现块级元素的水平居中 */
            margin: 0 auto;
        }
        span {
            border: 2px solid #f00;
        }
        .s2 {
            /* 行内元素垂直方向的外间距不生效,不要使用! */
            margin: 30px 20px;
        }
    </style>
</head>
<body>
<span>span1</span><span class="s2">span2</span><span>span3</span>

<!-- .fu>.z*4 -->
<div class="fu">
    <div class="z1">子元素div1</div>
    <div class="z2">子元素div2</div>
    <div class="z3">子元素div3</div>
    <div class="z4">子元素div4</div>
</div>
</body>
</html>

8.2 边框(border)

设置边框:border:1px solid #000; 粗细 线型 颜色
设置某一个方向的边框:border-top: 1px solid #000; 设置上边框的粗细 线型 颜色
去掉边框: border:none; 或者 border:0;
线型:solid 单实线 dashed 虚线 dotted 点状线 double 双实线…
边框圆角: border-radius: 100px;

  • 数值越大,角越圆
  • 边框圆角为正方形高度的一半,可以切圆形

8.3 内间距(padding)

内间距的写法:

  • padding-top: 50px; 设置单侧内间距(top 上/right 右/bottom 下/left 左)
  • padding:10px; 四个方向都是 10px
  • padding:10px 20px; 上下 10px 左右 20px
  • padding:10px 20px 30px; 上 10px 左右 20px 下 30px
  • padding:10px 20px 30px 40px; 上 10px 右 20px 下 30px 左 40px
    规律:按照 上右下左 顺时针 依次赋值 没有的找对门

内间距指的是元素内容与边框之间的距离

  1. 块级与行内块元素的四个方向的内间距均生效
  2. 行内元素的左右内间距正常生效,但上下内间距不生效

内间距使用场景

让元素内部距离外层父级元素的边有点距离,主要为了美化,如:

  • 输入框的文字不要贴边显示
  • 文本卡片内容不要贴边显示

切换盒子模型计算方案:

  • box-sizing: border-box;边框盒子
  • 效果:加内间距与边框都不会让元素变大,都算在元素设置的 width 与 height 中
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>边框与内间距</title>
    <style>
        .d1 {
            width: 200px;
            height: 200px;
            background-color: #0aa1ed;
            /* 设置四个方向的 粗细 线型 颜色*/
            border: 5px solid #f00;
            /* 设置单方向的边框 */
            border-top: 8px solid #ff0;
            /* 边框圆角 值越大 角越圆 值为正方形宽高的一半是圆形 */
            border-radius: 100px;
        }
        .d2 {
            width: 200px;
            height: 200px;
            border: 5px solid #f0f;
            padding-left: 50px;
            padding-top: 50px;
            /*默认的计算方案:加内间距与边框都会让元素变大*/
            /*切换成"边框盒子"计算方案后,内间距与边框都会算在预设的大小里,是固定大小*/
            box-sizing: border-box;
            margin: 50px; /*外间距不算在元素本身的大小里,但是会占据页面布局空间*/
        }
        span {
            border: 3px solid #f00;
        }
        .s2 {
            /* 行内元素垂直方向的内外间距都不能使用! 水平方向可以正常生效 */
            padding: 50px;
        }
    </style>
</head>
<body>
    <div class="d1"></div>
    <div class="d2">内间距测试</div>
    <hr>
    <span>我是span</span>
    <span class="s2">我是span</span>
    <span>我是span</span>
    <h1>我是标题</h1>
</body>
</html>

9 CSS优先级

  1. 当渲染同一个元素的不同的样式时,会叠加效果
  2. 当渲染同一个元素的相同样式时,后面的会把前面的样式覆盖掉
  3. 在CSS中,有一些属性是具有继承特性的,也就是父元素的CSS属性会传递到子元素上,使用的是就近原则,哪个近,就用哪个的样式
  4. 元素可以使用继承过来的祖先元素的样式,但如果我们给元素设定了样式,就会使用我们设定的值.也就是说,元素自设样式的优先级是要高于继承样式的
  5. 除了我们自己设定的CSS样式以外,HTML元素本身就有样式效果,只要我们指定过样式,优先级就要高于浏览器自带的样式效果

10 流与文档流

流(Stream):车流 水流 多个对象有序排列称为流
文档流:网页中多个元素按照自己的特性有序排列,形成了文档流
如:块级从上到下排列,行内与行内块从左到右排列
文档流中元素的特点:

  • 依次紧密排列
  • 多个 div/span 在竖直/水平方向紧挨着
  • 流中的元素绝不可能出现一个元叠摞在另外一个元素上面的情况
  • 如果项目中需要出现堆叠的效果,就只能"脱离文档流"

三种显示模式总结

  1. 块级元素
    • 代码:display:block;
    • 宽度与高度:宽度默认为父级宽度的100%,高度靠内容撑开,默认为0,设置宽高有效
    • 排列方式:从上到下排列
    • 四个方向的内外间距:四个方向都生效
  2. 行内元素
    • 代码:display:inline;
    • 宽度与高度:宽高被内容撑开,设置宽高无效
    • 排列方式:从左到右排列
    • 四个方向的内外间距:左右生效,上下不生效
  3. 行内块元素
    • 代码:display:inline-block;
    • 宽度与高度:有默认样式,设置宽高有效
    • 排列方式:从左到右排列
    • 四个方向的内外间距:四个方向都生效

1.行内元素与行内块元素统称为内联元素
2.我们可以修改HTML元素的display属性值,切换元素的显示模式

11 浮动

浮动可以让块级元素横向排列
float 属性:

  • float:left; 左浮动,向父级元素的左侧边界靠拢
  • float:right; 右浮动,向父级元素右侧边界靠拢

浮动特点:

  1. 浮动会破坏原有的文档流布局,变为浮动布局,元素可以横向排列
  2. 浮动后的元素会脱离文档流,释放原有的布局空间
  3. 浮动后的子元素不再支撑父元素的高度
  4. 如果一个父元素中所有的子元素都浮动了,父元素会高度坍塌(失高)
    解决方案:给父元素设置 overflow:hidden;
    会根据子元素浮动后的实际高度给父元素自动填充高度,解决失高问题
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>浮动布局</title>
    <style>
        .fu {
            background-color: #ff0;
            /*子元素都浮动走,父元素会失高
            可以给父元素设置BFC结界,此时父元素会根据子元素浮动后的实际高度自动填充高度*/
            overflow: hidden;
        }
        .fu>div {
            width: 100px;
            height: 100px;
            border: 3px solid #f00;
        }
        .z1 {
            background-color: #f00;
            /* 浮动元素会脱离文档流 不再占用文档流的布局空间 也就是不再支撑父元素的高度 */
            float: left;
        }
        .z2 {
            background-color: #0f0;
            float: left;
        }
        .z3 {
            background-color: #00f;
            float: left;
        }
    </style>
</head>
<body>
<!-- .fu>.z*3 -->
<div class="fu">
    <div class="z1"></div>
    <div class="z2"></div>
    <div class="z3"></div>
</div>
</body>
</html>

12 CSS定位

12.1 静态定位(默认值) position:static;

就是默认的文档流布局,元素处于文档流中,只能依次排列,不能随意改变自己的位置
使用其他定位属性后,可以让元素通过 top/bottom/left/right 四个属性移动
层级 z-index:使用定位后,元素发生重叠时可以调整层级

  1. z-index 的值越大,层级越高,值大的元素会覆盖值小的元素
  2. 值为整数值,没有任何单位
  3. 默认值是 auto,可以看作是层级 0,z-index 还可以取负值

12.2 相对定位 position:relative;

移动参照物:元素自己原来的位置

  1. 不会脱离文档流并保留原有位置,还可以支撑父元素,不影响父级
  2. 与外间距 margin 的区别:margin 会影响其他元素,相对定位不会挤开兄弟元素,但可能会遮盖
  3. 常用于需要微调元素位置时使用
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>相对定位</title>
    <style>
        .fu {
            background-color: #ff0;
        }
        .fu>div {
            width: 100px;
            height: 100px;
        }
        .z1 {
            background-color: #f00;
            /* 注意!要先加position才能移动位置 调整层级 */
            position: relative;
            z-index: 10;/*整数 默认0 数值越大 层级越高 */
            left: 25px;
        }
        .z2 {
            background-color: #0f0;
            /*相对定位
            移动参照物:自己原来的位置
            不脱离文档流 不释放布局空间 也不会挤开其它元素*/
            position: relative;
            left: 50px;
            bottom: 50px;
            z-index: -1;
        }
        .z3 {
            background-color: #00f;
        }
    </style>
</head>
<body>
<div class="fu">
    <div class="z1"></div>
    <div class="z2"></div>
    <div class="z3"></div>
</div>
</body>
</html>

12.3 绝对定位 position:absolute;

移动参照物:离自己最近的使用了定位属性的上级元素
会一路向上找,终点是 html 根元素

  1. 绝对定位的元素会脱离文档流,释放布局空间
  2. 小技巧:”子绝父相”子元素使用绝对定位,父级设置相对定位后就可以变成子元素移动的参照物
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>绝对定位</title>
    <style>
        .fu {
            background-color: #ff0;
            position: relative;
            width: 500px;
        }
        .fu>div {
            width: 100px;
            height: 100px;
        }
        .z1 {
            background-color: #f00;
        }
        .z2 {
            background-color: #0f0;
            position: absolute;
            top: 0;
            right: 0;
        }
        .z3 {
            background-color: #00f;
        }
    </style>
</head>
<body>
<div class="fu">
    <div class="z1"></div>
    <div class="z2"></div>
    <div class="z3"></div>
</div>
</body>
</html>

12.4 固定定位 position:fixed;

移动参照物:html 根元素(浏览器窗口)

  1. 固定定位也会脱离文档流
  2. 我们可以利用固定定位实现页面固定广告与撑满全屏的效果
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>固定定位</title>
    <style>
        .fu {
            background-color: #ff0;
        }
        .fu>div {
            width: 100px;
            height: 100px;
        }
        .z1 {
            background-color: #f00;
        }
        .z2 {
            background-color: #0f0;
            /* 固定定位 参照物为html元素 会脱离文档流 释放布局空间 */
            position: fixed;
            right: 0;
            bottom: 0;
        }
        .z3 {
            background-color: #00f;
        }
    </style>
</head>
<body>
<div class="fu">
    <div class="z1"></div>
    <div class="z2"></div>
    <div class="z3"></div>
</div>
</body>
</html>

12.5 布局方式总结

  1. 浮动布局 float:left/right;
    • 元素会脱离文档流,释放布局空间
    • 如果所有子元素都浮动,父元素会高度坍塌
    • 浮动元素可以使用 margin 微调自己的位置
    • 用途:可在页面中实现"两端对齐"或“横置”的效果
  2. 静态定位(默认文档流布局)position:static;
    • 块级元素从上往下依次排列
    • 行内/行内块元素从左往右依次排列,一行放不下才换行
    • 文档流中的元素都是紧密排列的,没有大的空隙和元素堆叠的现象
  3. 相对定位 position:relative;
    • 移动参照物:自己作为静态定位元素时原来的位置
    • 不会脱离文档流、不会释放布局空间
    • 可以使用 top bottom left right 调整自己的位置
    • 可以使用 z-index 调整层级
    • 用途:微调自己的位置,但不会挤开其它元素
    • 用途:为使用绝对定位的后代元素提供定位参照物
  4. 绝对定位 position:absolute;
    • 移动参照物:离自己最近的使用了非 static 定位的上级元素,终点是 html 根元素
    • 会脱离文档流并且释放布局空间
    • 可以使用 top bottom left right 调整自己的位置
    • 可以使用 z-index 调整层级
    • 用途:在页面上覆盖到其它元素上方的指定位置
  5. 固定定位 position:fixed;
    • 移动参照物:html 根元素
    • 会脱离文档流并且释放布局空间
    • 可以使用 top bottom left right 调整自己的位置
    • 可以使用 z-index 调整层级
    • 用途:制作覆盖整个窗口的遮罩层、或制作页面固定广告

13 元素的放大与过渡

  • transform: scale(n); 变换:放大(倍数) 放大至原来的n倍
    • n>1放大n倍 n=1 大小不变 0<n<1缩小n倍 0缩小到看不见
  • transition: 2s; 添加过渡 让变换有一点过渡时间,不要一瞬间完成 太突兀
  • 注意: 过渡要加给div,而不是悬停,否则离开 div 时没有过渡,效果不好
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>元素放大与过渡</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: #f00;
            margin: 100px auto 0; /*外间距: 上 左右 下*/
            /*过渡时间 注意不要加在:hover中,否则不悬停时就没有过渡效果了*/
            transition: 2s;
        }
        div:hover {
            background-color: #0aa1ed;
            /*变换:缩放(n)
            n>1放大n倍  n=1 大小不变  0<n<1缩小n倍 0缩小到看不见*/
            transform: scale(2);
            border-radius: 50px;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

14 页面版心

版心指的是一般在页面中定宽且居中,用来显示页面主要内容的一块区域

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>居中测试</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .main {
            background-color: lightgreen;
        }
        .center {
            background-color: lightblue;
            width: 1000px;
            margin: 0 auto;
        }
        .card {
            width: 200px;
            height: 300px;
            background-color: pink;
            border: 3px solid #000;
            /*让块级元素自己水平居中,要加给块级元素自己上*/
            margin: 0 auto;
            /*让块级元素内的(文字/图片)水平居中,加在块级父元素上*/
            text-align: center;
            line-height: 300px;
        }
    </style>
</head>
<body>
<div class="main">
    <div class="center">
        <div class="card">我是内容</div>
        <div class="card">我是内容</div>
        <div class="card">我是内容</div>
        <div class="card">我是内容</div>
    </div>
</div>
</body>
</html>

15 元素阴影效果

box-shadow: 5px 5px 10px 5px lightgreen;
值 1: 水平方向偏移量 正数向右 负数向左
值 2: 垂直方向偏移量 正数向下 负数向上
值 3: 羽化值 数值越大 阴影越虚化 最小值 0 不允许有负数
值 4: 阴影范围 数值越大 阴影的范围越大 0 与当前元素一样大
值 5: 阴影的颜色
值 6: 阴影的位置,默认在元素外部,也可以写 inset 改在元素内部

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>元素阴影</title>
    <style>
        div {
            width: 200px;
            height: 200px;
            background-color: #ff0;
            /*元素阴影
            X轴偏移量 正数向右
            Y轴偏移量 正数向下
            羽化值 数值越大 阴影越虚化 0不虚化
            阴影扩展半径 数值越大 阴影范围越大 阴影颜色*/
            box-shadow: 5px 5px 5px 5px red;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

16 元素溢出

如果内容超出了预设的区域,我们称之为“溢出”,溢出一般有以下几种处理方式

  • overflow: visible; 默认值 溢出可见
  • overflow: hidden; 溢出隐藏,超出部分裁掉 可解决父子贴边问题与父元素失高问题
  • overflow: scroll; 两个方向都有滚动条
  • overflow: auto; 自动给溢出的方向设置滚动条
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>元素溢出</title>
    <style>
        div {
            border: 5px solid #f00;
            width: 200px;
            height: 1500px;
            /* 溢出 */
            overflow: visible; /* 默认值 溢出可见 */
            overflow: hidden; /* 溢出隐藏 多余的部分直接裁掉 */
            overflow: scroll; /* 两个方向都显示滚动条 */
            overflow: auto; /* 溢出的方向才自动加滚动条 */
        }
    </style>
</head>
<body>
    <div>
        <img src="img/1.jpg">
        <img src="img/1.jpg">
        <img src="img/1.jpg">
    </div>
</body>
</html>

17 垂直方向的对齐方式

指的是元素自己在垂直方向上,与其左右两侧内容的对齐方式,有以下几种对齐方式:

  • vertical-align: top; 顶线对齐
  • vertical-align: bottom; 底线对齐
  • vertical-align: middle; 中线对齐
  • vertical-align: baseline; 基线对齐 默认值
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>元素垂直对齐方式</title>
    <style>
      img {
          width: 200px;
          /*元素在垂直方向上,与左右两侧元素的对齐方式*/
          vertical-align: top; /*顶线对齐*/
          vertical-align: bottom; /*底线对齐*/
          vertical-align: middle; /*基线对齐 默认值*/
          vertical-align: baseline; /*中线对齐*/
      }
    </style>
</head>
<body>
  abyj<img src="img/1.jpg">国圈<img src="img/1.jpg">
</body>
</html>

18 单行文本溢出替换为省略号

文本在父级元素中是默认会换行的,也就是一行放不下的文字会换到下一行显示
所以我们需要强制文本不换行才能实现文本溢出的效果
我们还可以把溢出的文字替换成省略号

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>单行文本溢出替换省略号</title>
    <style>
        div {
            background-color: yellow;
            /*限制父元素的宽度,否则文字写不下会换行,不会溢出*/
            /*且以下三句为组合代码,缺一不可!*/
            width: 200px;
            /*强制文本不换行*/
            white-space: nowrap;
            /*溢出隐藏 多余的文字直接裁掉*/
            overflow: hidden;
            /*溢出的文字替换为省略号*/
            text-overflow: ellipsis;
        }
    </style>
</head>
<body>
    <div>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsum, quo, saepe. Cum ea in numquam odio repudiandae! Aperiam, asperiores et ex in magni odit quibusdam repellat tempore temporibus ullam veniam.
    </div>
</body>
</html>

19 完整的学子代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学子页面</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .main {
            background-color: #fff;
        }
        .center {
            width: 1000px;
            margin: 0 auto;
        }
        .f1 {
            overflow: hidden;
            margin-bottom: 10px;
        }
        .f1>.left {
            width: 611px;
            height: 376px;
            background-color: #e8e8e8;
            float: left;
            margin-right: 10px;
            position: relative;
        }
        .f1>.left>img {
            width: 318px;
            height: 319px;
            position: absolute;
            top: 35px;
            left: 265px;
        }
        /*给图片设置过渡时间为2s,注意不要加到:hover里!*/
        .scale {
            transition: 2s;
        }
        /*悬停时让图片放大至原来的1.1倍*/
        .scale:hover {
            transform: scale(1.1);
        }
        .f1>.left>.text {
            width: 245px;
            height: 232px;
            /*background-color: pink;*/
            margin-top: 68px;
            margin-left: 36px;
        }
        .f1 .text>.p_title {
            font-size: 32px;
            color: #333;
            font-weight: lighter;
        }
        .f1 .text>.p_intro {
            font-size: 12px;
            color: #666;
            font-weight: lighter;
            margin-top: 12px;
            margin-bottom: 24px;
        }
        .f1 .text>.p_price {
            font-size: 24px;
            color: #0aa1ed;
            font-weight: bold;
            margin-bottom: 12px;
        }
        .f1 .text>a {
            display: block;
            width: 132px;
            height: 40px;
            background-color: #0aa1ed;
            color: #fff;
            text-decoration: none;
            font-size: 20px;
            text-align: center;
            line-height: 40px;
            border-radius: 5px;
        }
        .f1>.right {
            width: 375px;
            height: 376px;
            background-color: #e8e8e8;
            float: left;
            position:relative;
        }
        .f1>.right>img {
            width: 292px;
            height: 232px;
            position:absolute;
            top: 130px;
            left:75px;
        }
        .f1>.right>.text {
            width: 245px;
            height: 232px;
            /*background-color: magenta;*/
            margin-top: 39px;
            margin-left: 25px;
            /*注意:必须先用定位属性,才能调整层级!*/
            position: relative;
            z-index: 10;
        }
        .f2 {
            overflow: hidden;
        }
        .f2>.left {
            width: 366px;
            height: 233px;
            background-color: #e8e8e8;
            float: left;
            margin-right: 20px;
            font-family: "simhei";
        }
        .f2>.left>.tit {/*设置左侧标题*/
            height: 35px;
            background-color: #0aa1ed;
            position: relative;
        }
        .f2>.left>.tit>img {/*设置图片*/
            width: 29px;
            height: 20px;
            position: absolute;
            top: 8px;
            left: 10px;
        }
        .f2>.left>.tit>span {/*标题文字*/
            color: #fff;
            position: absolute;
            left: 49px;
            line-height: 35px;
        }
        .f2>.left>.item_all {/*左侧下方内容*/
            padding-left: 12px;
        }
        .f2>.left>.item_all>.tit_p {/*导航项标题*/
            font-size: 12px;
            color: #62B5EC;
            margin-top: 17px;
            margin-bottom: 9px;
        }
        .f2>.left>.item_all>ul {
            /*去除列表项前的标识符*/
            list-style: none;
            /*防止因所有li浮动后失去高度*/
            overflow: hidden;
        }
        .f2>.left>.item_all>ul>li {
            /*所有列表导航项浮动横置*/
            float: left;
            margin-right: 10px;
        }
        .f2>.left>.item_all>ul>li>a {
            text-decoration: none;
            font-size: 12px;
            /*超链接的文字颜色需要单独设置*/
            color: #0aa1ed;
        }
        .f2>.card {
            width: 198px;
            height: 233px;
            background-color: #e8e8e8;
            float: left;
            margin-right: 8px;
            font-size: 12px;
            text-align: center;
        }
        .f2>.card>.p_intro {
            font-weight: lighter;
        }
        .f2>.card>.p_price {
            color: #0aa1ed;
            font-weight: bold;
            margin: 6px;
        }
        .f2>.card>a {
            display: block;
            width: 100px;
            height: 24px;
            background-color: #0aa1ed;
            color: #fff;
            text-decoration: none;
            text-align: center;
            line-height: 24px;
            margin: 0 auto;
        }
        .f2>.card>img {
            width: 100%;
        }
        .f2>.card3 {
            margin-right: 0;
        }
    </style>
</head>
<body>
    <!-- 设置当前功能块 也就是最外层的背景色 -->
    <div class="main">
        <!-- 版心:固定的宽度且居中 -->
        <div class="center">
            <!-- 一楼 -->
            <div class="f1">
                <!-- 一楼左侧 -->
                <div class="left">
                    <div class="text">
                        <p class="p_title">灵越 燃7000系列</p>
                        <p class="p_intro">
                            酷睿双核i5处理器|256GB SSD| 8GB内存 <br>
                            英特尔HD显卡620含共享显卡内存
                        </p>
                        <p class="p_price">¥4999.00</p>
                        <a href="#">查看详情</a>
                    </div>
                    <img src="img/computer1.png" class="scale">
                </div>
                <!-- 一楼右侧 -->
                <div class="right">
                    <div class="text">
                        <p class="p_title">颜值 框不住</p>
                        <p class="p_intro">
                            酷睿双核i5处理器|256GB SSD| 8GB内存 <br>
                            英特尔HD显卡620含共享显卡内存
                        </p>
                        <p class="p_price">¥6888.00</p>
                        <a href="#">查看详情</a>
                    </div>
                    <img src="img/computer2.png" class="scale">
                </div>
            </div>
            <!-- 二楼 -->
            <div class="f2">
                <!-- 二楼左侧-->
                <div class="left">
                    <div class="tit">
                        <img src="img/icon.png">
                        <span>电脑,办公/1F</span>
                    </div>
                    <div class="item_all">
                        <p class="tit_p">电脑整机</p>
                        <ul><!--ul>li*6>a-->
                            <li><a href="">笔记本</a></li>
                            <li><a href="">游戏机</a></li>
                            <li><a href="">台式机</a></li>
                            <li><a href="">一体机</a></li>
                            <li><a href="">服务器</a></li>
                            <li><a href="">联想</a></li>
                        </ul>
                        <p class="tit_p">电脑配件</p>
                        <ul><!--ul>li*6>a-->
                            <li><a href="">CPU</a></li>
                            <li><a href="">SSD硬盘</a></li>
                            <li><a href="">显示器</a></li>
                            <li><a href="">显卡</a></li>
                            <li><a href="">组装电脑</a></li>
                            <li><a href="">机箱</a></li>
                        </ul>
                        <p class="tit_p">外设/游戏</p>
                        <ul><!--ul>li*6>a-->
                            <li><a href="">键盘</a></li>
                            <li><a href="">鼠标</a></li>
                            <li><a href="">U盘</a></li>
                            <li><a href="">移动硬盘</a></li>
                            <li><a href="">游戏设备</a></li>
                            <li><a href="">智能单车</a></li>
                        </ul>
                    </div>
                </div>
                <!-- 二楼卡片 -->
                <div class="card">
                    <img src="img/computer3.png" alt="" class="scale">
                    <p class="p_intro">
                        戴尔(DELL)XPS13-9360-R1609 13.3<br>
                        寸微边框笔记本电脑
                    </p>
                    <p class="p_price">¥4600.00</p>
                    <a href="#">查看详情</a>
                </div>
                <div class="card">
                    <img src="img/computer4.png" alt="" class="scale">
                    <p class="p_intro">
                        14.8mm超轻薄笔记本电脑 航海王版 <br>
                        13.3英寸微边框笔记本电脑
                    </p>
                    <p class="p_price">¥5600.00</p>
                    <a href="#">查看详情</a>
                </div>
                <div class="card card3">
                    <img src="img/computer3.png" alt="" class="scale">
                    <p class="p_intro">
                        联想(Lenovo) YOGA900 多彩版 13.3 <br>
                        英寸微边框笔记本电脑
                    </p>
                    <p class="p_price">¥6600.00</p>
                    <a href="#">查看详情</a>
                </div>
            </div>
        </div>
    </div>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值