跳转至

前端开发

动画

====

CSS3,我们可以创建动画,它可以取代许多网页动画图像,Flash 动画,和 Javascripts。

CSS3 @keyframes 规则

要创建CSS3动画,你将不得不了解@keyframes规则。

@keyframes规则是用来创建动画。 @keyframes规则内指定一个 CSS样式和动画将逐步从目前的样式更改为新的样式。

**注意:**Internet Explorer 10、Firefox 以及 Opera 支持 @keyframes 规则和 animation 属性。 Chrome 和 Safari 需要前缀 -webkit-。

CSS3 动画

当在@keyframe创建动画,把它绑定到一个选择器,否则动画不会有任何效果。

指定至少这两个 CSS3 的动画属性绑定向一个选择器:

  • 规定动画的名称
  • 规定动画的时长

例子:

Text Only
1
2
3
4
5
#animated_div {
    animation: animated_div 5s infinite;
    -moz-animation: animated_div 5s infinite;
    -webkit-animation: animated_div 5s infinite;
}

CSS3动画是什么?

  • 动画是使元素从一种样式逐渐变化为另一种样式的效果。
  • 您可以改变任意多的样式任意多的次数。
  • 请用百分比来规定变化发生的时间,或用关键词 "from" 和 "to",等同于 0% 和 100%。
  • 0% 是动画的开始,100% 是动画的完成。
  • 为了得到最佳的浏览器支持,您应该始终定义 0% 和 100% 选择器。

例子:

Text Only
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@keyframes animated_div {
    0% {
        left: 0px;
    }
    20% {
        left: 50px;
        background-color: green;
    }
    40% {
        left: 140px;
        background-color: red;
    }
    60% {
        left: 280px;
        background-color: yellow;
    }
    80% {
        left: 425px;
        background-color: blue;
    }
    100% {
        left: 0px;
        background-color: pink;
    }
}

常用属性

属性 描述 CSS
@keyframes 规定动画。 3
animation 所有动画属性的简写属性,除了 animation-play-state 属性。 3
animation-name 规定 @keyframes 动画的名称。 3
animation-duration 规定动画完成一个周期所花费的秒或毫秒。默认是 0。 3
animation-timing-function 规定动画的速度曲线。默认是 "ease"。 3
animation-delay 规定动画何时开始。默认是 0。 3
animation-iteration-count 规定动画被播放的次数。默认是 1。 3
animation-direction 规定动画是否在下一周期逆向地播放。默认是 "normal"。 3
animation-play-state 规定动画是否正在运行或暂停。默认是 "running"。 3

vue项目中封装localStorage和sessionStorage

1. 为什么需要封装localStorage和sessionStorage?

因为封装localStorage和sessionStorage可以提高程序的维护性、可重用性和扩展性,同时也可以使代码更为简单、易懂。

2. 以下是一个简单的代码封装示例

可以新建一个utils目录文件,在该文件下新建storage.js文件进行封装

JavaScript
// 封装localhost和Session

// 本地储存
export const Local = {
  // 设置永久缓存
  set (key, val) {
    window.localStorage.setItem(key, JSON.stringify(val));
  },
  // 获取永久缓存
  get (key) {
    let json = window.localStorage.getItem(key);
    return JSON.parse(json);
  },
  // 移除永久缓存
  remove (key) {
    window.localStorage.removeItem(key);
  },
  // 移除全部永久缓存
  clear () {
    window.localStorage.clear();
  },
};

// 临时储存
export const Session = {
  // 设置临时缓存
  set (key, val) {
    window.sessionStorage.setItem(key, JSON.stringify(val));
  },
  // 获取临时缓存
  get (key) {
    let json = window.sessionStorage.getItem(key);
    return JSON.parse(json);
  },
  // 移除临时缓存
  remove (key) {
    window.sessionStorage.removeItem(key);
  },
  // 移除全部临时缓存
  clear () {
    window.sessionStorage.clear();
  },
}

export default {
  Local,
  Session
}

3.在vue组件中使用

按需引入

Bash
import { Session } from '@/utils/storage'

页面使用

JavaScript
1
2
3
4
5
6
7
8
 // 设置临时缓存
Session.set("key", value)
 // 获取临时缓存
Session.get("key")
 // 移除临时缓存
Session.remove("key")
 // 移除全部临时缓存
Session.clear()

HTML标签

标题标签

HTML
1
2
3
4
5
6
<h1>标题一共六级选,</h1>
<h2>文字加粗一行显。</h2>
<h3>由大到小依次减,</h3>
<h4>从重到轻随之变。</h4>
<h5>语法规范书写后,</h5>
<h6>具体效果刷新见。</h6>

vscode生成html快捷方式

  • 生成页面骨架结构。 输入! 按下 Tab 键

文字标签

HTML
加粗-> <strong></strong>或者<b></b>
HTML
倾斜-><em></em>或者<i></i>
HTML
删除线<del></del>或者<s></s>
HTML
下划线<ins></ins>或者<u></u>

图像标签

属性 属性值 说明
src 图片路径 必须属性
alt 文本 替换文本。图像不能显示的时候显示的文字
title 文本 提示文本。鼠标放到图像上,显示的文字
width 像素 设置图像的宽度
height 像素 设置图像的高度
border 像素 设置图像的边框粗细

图像标签和路径

相对路径分类 符号 说明
同一级路径 图像文件处于html同一级,如<img src="baidu.gif"/>
下一级路径 / 图像文件位于html文件的下一级 如<img src="imags/baidu.gif" />
上一级路径 ../ 图像文件位于html文件的上一级 如<img src="../baidu.gif" />

相对路径是从代码所在的这个文件出发,去寻找目标文件的,而我们这里所说的上一级 、下一级和同一级就是 图片相对于 HTML 页面的位置。

  • 绝对路径:是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。

例如,“D:\web\img\logo.gif”或完整的网络地址“http://www.itcast.cn/images/logo.gif”。

超链接标签

链接的语法格式

HTML
<a href="跳转目标" target="目标窗口的弹出">文本或者图像</a>
属性 作用
href 用于指定链接目标的url地址,(必须属性)当为标签应用href属性时,它就有了超链接的功能
target 用于指定链接页面的打开方式,其中_self为默认值,__blank为在新窗口中打开方式

链接分类

  • 外部链接: 例如 < a href="http:// www.baidu.com "> 百度。
  • 内部链接:网站内部页面之间的相互链接. 直接链接内部页面名称即可,例如 < a href="index.html"> 首页 。
  • 空链接: 如果当时没有确定链接目标时,< a href="#"> 首页 。
  • 下载链接: 如果 href 里面地址是一个文件或者压缩包,会下载这个文件。
  • 网页元素链接: 在网页中的各种网页元素,如文本、图像、表格、音频、视频等都可以添加超链接.
  • 锚点链接: 点我们点击链接,可以快速定位到页面中的某个位置.
  • 在链接文本的href属性中,设置属性值为#名字的形式如 图像标签
  • 找到目标位置标签,里面添加一个 id 属性 = 刚才的名字 ,如:<span id="img">图像标签</span>

HTML中的注释和特殊字符

注释

如果需要在HTML文档中添加一些便于阅读和理解但又不需要 显示在页面中的注释文字,就需要使用注释标签。HTML中的注释以“< !–" 开头,以“–>”结束。

一句话: 注释标签里面的内容是给程序猿看的,这个代码是不执行不显示到页面中的.添加注释是为了更好地解释代码的功能,便于相关开发人员理解和阅读代码,程序是不会执行注释内容的。

特殊字符

特殊字符 描述 字符的代码
空格符 &nbsp;
< 小于号 &lt;
> 大于号 &gt;
& 和号 &amp;
¥ 人民币 &yen;
© 版权 &copy;
® 注册商标 &reg;
摄氏度 &deg;
± 正负号 &plusmn;
x 乘号 &times;
÷ 除号 &divide;
² 平方 &sup2;
³ 立方 &sup3;

重点记住:空格、大于号、小于号这三个,其余的使用很少,如果需要回头查阅即可。

HTML 标签(下)

表格标签

表格不是用来布局页面的,而是用来展示数据的.

表格基本用法

`
单元表格里的文字1 单元表格里的文字2 单元表格里的文字3 单元表格里的文字4
单元表格里的文字11 单元表格里的文字21 单元表格里的文字31 单元表格里的文字41
                                                                                           
单元表格里的文字1单元表格里的文字2单元表格里的文字3单元表格里的文字4
单元表格里的文字11单元表格里的文字21单元表格里的文字31单元表格里的文字41
` 1.
是用于定义表格的标签。 2. 标签用于定义表格中的行,必须嵌套在
标签中。 3. 用于定义表格中的单元格,必须嵌套在标签中。 4.字母 td 指表格数据(table data),即数据单元格的内容。 一般表头单元格位于表格的第一行或第一列,表头单元格里面的文本内容加粗居中显示. 标签表示 HTML 表格的表头部分(table head 的缩写) ### 表格属性 表格标签这部分属性我们实际开发我们不常用,后面通过 CSS 来设置. 目的有2个: 1.记住这些英语单词,后面 CSS 会使用. 2.直观感受表格的外观形态. | 属性名 | 属性值 | 描述 | | ----------- | ------------------- | ----------------------------------------- | | align | left、center、right | 规定表格相对周围元素的对齐方式 | | border | 1或“” | 固定表格单元是否拥有边框,默认没有边框 | | cellpadding | 像素值 | 规定单元边沿与其内容之间的空白,默认1像素 | | cellspacing | 像素值 | 规定单元格之间的空白,默认为2像素 | | width | 像素值或百分比 | 规定表格的宽度 | ### 案例 ![](https://gitlab.com/zw2d/blogimg/-/raw/main/pictures/2023/12/11_14_13_25_20231211-20231211141322.png)
HTML
 <table align="center" width="500" height="249" border="1" cellspacing="0">
     <thead>
         <tr>
             <th>排名</th>
             <th>关键词</th>
             <th>趋势</th>
             <th>进入搜索</th>
             <th>最近七日</th>
             <th>相关链接</th>
         </tr>
     </thead>
     <tbody>
         <tr>
             <td>1</td>
             <td>鬼吹灯</td>
             <td><img src="down.jpg" /></td>
             <td>456</td>
             <td>123</td>
             <td>
                 <a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a>
             </td>
         </tr>

         <tr>
             <td>1</td>
             <td>鬼吹灯</td>
             <td><img src="down.jpg" /></td>
             <td>456</td>
             <td>123</td>
             <td>
                 <a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a>
             </td>
         </tr>
         <tr>
             <td>3</td>
             <td>西游记</td>
             <td><img src="up.jpg" /></td>
             <td>456</td>
             <td>123</td>
             <td>
                 <a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a>
             </td>
         </tr>
         <tr>
             <td>1</td>
             <td>鬼吹灯</td>
             <td><img src="down.jpg" /></td>
             <td>456</td>
             <td>123</td>
             <td>
                 <a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a>
             </td>
         </tr>
         <tr>
             <td>1</td>
             <td>鬼吹灯</td>
             <td><img src="down.jpg" /></td>
             <td>456</td>
             <td>123</td>
             <td>
                 <a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a>
             </td>
         </tr>
         <tr>
             <td>1</td>
             <td>鬼吹灯</td>
             <td><img src="down.jpg" /></td>
             <td>456</td>
             <td>123</td>
             <td>
                 <a href="#">贴吧</a> <a href="#">图片</a> <a href="#">百科</a>
             </td>
         </tr>
     </tbody>
</table>
在表格标签中,分别用:标签 表格的头部区域、标签 表格的主体区域. 这样可以更好的分清表格结构。 ### 表格结构标签 1. :用于定义表格的头部。 内部必须拥有 标签。 一般是位于第一行。 2. :用于定义表格的主体,主要用于放数据本体 。 3. 以上标签都是放在
标签中。 ### 合并单元格 #### 合并单元格的方式 * 跨行合并:rowspan="合并单元格的个数" * 跨列合并:colspan="合并单元格的个数" * 跨行:最上侧单元格为目标单元格, 写合并代码 * 跨列:最左侧单元格为目标单元格, 写合并代码 `                                                                                                                                                                                                                                                                                                
个人简历
姓    名:           性    别:                  照片   
婚姻状况:出生年月:
民    族:政治面貌:
身    高:学    历:
`                                                                                                                                                                                                                                                                                                
个人简历
姓    名:           性    别:                  照片   
婚姻状况:出生年月:
民    族:政治面貌:
身    高:学    历:
### 表格总结 我们学习了 * table 标签 * tr 行 标签 * td 单元格 标签 * th 表头单元格 标签 * thead 表格头部区域标签 ## 列表标签 表格是用来显示数据的,那么列表就是用来`布局`的。 列表最大的特点就是整齐、整洁、有序,它作为布局会更加自由和方便。 根据使用情景不同,列表可以分为三大类:无序列表、有序列表和自定义列表。 ### 无序列表 1.无序列表的各个列表项之间没有顺序级别之分,是并列的。 2.
    中只能嵌套
  • ,直接在
      标签中输入其他标签或者文字的做法是不被允许的。 3.
    • 之间相当于一个容器,可以容纳所有元素。 4.无序列表会带有自己的样式属性,但在实际使用时,我们会使用 CSS 来设置。 ### 有序列表 1.
        中只能嵌套
      1. ,直接在
          标签中输入其他标签或者文字的做法是不被允许的。 2.
        1. 之间相当于一个容器,可以容纳所有元素。 3.有序列表会带有自己样式属性,但在实际使用时,我们会使用 CSS 来设置。 li最小,ul和ol都包含li ### 自定义列表 在 HTML 标签中,
          标签用于定义描述列表(或定义列表),该标签会与
          (定义项目/名字)和
          (描述每一个项目/名字)一起使用。 其基本语法如下: 1.
          里面只能包含
          。 2.
          个数没有限制,经常是一个
          对应多个
          HTML
          <dl>
              <dt>关注我们</dt>
              <dd>新浪微博</dd>
              <dd>官方微信</dd>
              <dd>联系我们</dd>
              <dt>关注我们</dt>
              <dd>新浪微博</dd>
              <dd>官方微信</dd>
              <dd>联系我们</dd>
          </dl>
          
          ## 表单标签 ### 表单元素 type 属性的属性值及其描述如下: ![](https://gitlab.com/zw2d/blogimg/-/raw/main/pictures/2023/12/11_15_46_42_20231211-20231211154640.png) 其它属性: ![](https://gitlab.com/zw2d/blogimg/-/raw/main/pictures/2023/12/11_15_51_49_20231211-20231211155147.png) 1.name 和value 是每个表单元素都有的属性值,主要给后台人员使用. 2.name 表单元素的名字, 要求 单选按钮和复选框要有相同的name值. 3.checked属性主要针对于单选按钮和复选框, 主要作用一打开页面,就要可以默认选中某个表单元素. 4.maxlength 是用户可以在表单元素输入的最大字符数, 一般较少使用. ## 综合案例                                                                                                                                                                                                                                                                                            
          性别          
                      男             女          
                 
          生日          
                                                       
                 
          所在地区
          婚姻状况:          
                      未婚 已婚             离婚          
                 
          学历
          喜欢的类型           帅哥           妩媚的           可爱的           美女           都喜欢        
          自我介绍                  
                           
          我同意注册条款和会员加入标准
          我是会员,立即登录

          我承诺

                     
                           
          • 年满18岁、单身
          •                
          • 抱着严肃的态度
          •                
          • 真诚寻找另一半
          •            
                 

          CSS学习第二天

          CSS 的三大特性

          CSS 有三个非常重要的三个特性:层叠性、继承性、优先级。

          优先级

          1. 权重是有4组数字组成,但是不会有进位。
          2. 可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..
          3. 等级判断从左向右,如果某一位数值相同,则判断下一位数值。
          4. 可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.
          5. 继承的权重是0, 如果该元素没有直接选中,不管父元素权重多高,子元素得到的权重都是 0。

          层叠性

          CSS 层叠性口诀:长江后浪推前浪,前浪死在沙滩上。

          • 样式冲突,遵循的原则是就近原则,哪个样式离结构近,就执行哪个样式
          • 样式不冲突,不会层叠

          继承性

          继承性口诀:龙生龙,凤生凤,老鼠生的孩子会打洞

          CSS中的继承: 子标签会继承父标签的某些样式,如文本颜色和字号。简单的理解就是:子承父业。

          盒子模型

          网页布局的核心本质: 就是利用 CSS 摆盒子

          所谓 盒子模型:就是把 HTML 页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。 CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边框、外边距、内边距、和 实际内容

          边框(border)

          border可以设置元素的边框。边框有三部分组成:边框宽度(粗细) 边框样式 边框颜色

          CSS
          border : border-width || border-style || border-color
          
          属性 作用
          border-width 定义边框粗细,单位是px
          border-style 边框的样式
          border-color 边框颜色

          边框样式 border-style 可以设置如下值:

          • none:没有边框即忽略所有边框的宽度(默认值)
          • solid:边框为单实线(最为常用的)
          • dashed:边框为虚线
          • dotted:边框为点线

          demo:请给一个 200*200 的盒子,设置上边框为红色,其余边框为蓝色(提示:一定注意边框的层叠性)

          HTML
          1
          2
          3
          4
          5
          6
          7
          8
          9
          <style>
              .box {
                  width: 200px;
                  height: 200px;
                  border: 1px solid blue;
                  border-top: 1px solid red;
              }
          </style>
          <div class="box"></div>
          

          内边距(padding)

          padding 属性用于设置内边距,即边框与内容之间的距离。

          属性 表达意思
          padding:5px; 1个值,代表上下左右都有5像素内边距
          padding:5px 10px; 2个值,代表上下内边距是5像素,左右内边距是10像素;
          padding:5px 10px 20px; 3个值,代表上内边距5像素,左边内边距10像素,下内边距20像素;
          padding:5px 10px 20px 30px; 4个值,上、右、下、左,遵循顺时针
          案例

          image-20231214103810762

          HTML
          <style>
              .nav {
                  height: 41px;
                  border-top: 3px solid #ff8500;
                  border-bottom: 1px solid #edeef0;
                  background-color: #fcfcfc;
                  line-height: 41px;
              }
              .nav a {
                  /* a属于行内元素 此时必须要转换 行内块元素 */
                  display: inline-block;
                  height: 41px;
                  padding: 0 20px;
                  font-size: 12px;
                  color: #4c4c4c;
                  text-decoration: none;
              }
              .nav a:hover {
                  background-color: #eee;
                  color: #ff8500;
              }
          </style>
          <div class="nav">
              <a href="">设为首页</a>
              <a href="">手机新浪网</a>
              <a href="">移动客户端</a>
              <a href="">博客</a>
              <a href="">微博</a>
              <a href="">关注我们</a>
          </div>
          

          可以把display改成block和inline看看效果。

          案例2

          image-20231214113428560

          HTML
          <style>
              body {
              background-color: #f5f5f5;
              }
              .product {
              width: 298px;
              height: 415px;
              background-color: #fff;
              /* 让块级的盒子水平居中对齐 */
              margin: 100px auto;
              }
              .product .review {
              height: 70px;
              font-size: 14px;
              padding: 0 28px;
              margin-top: 30px;
              }
              .product img {
              /* 图片的宽度和父亲一样宽 */
              width: 100%;
              }
              .appraise {
              font-size: 12px;
              color: #b0b0b0;
              margin-top: 20px;
              padding: 0 28px;
              }
              .info {
              font-size: 14px;
              margin-top: 15px;
              padding: 0 28px;
              }
              .info span {
              color: #ff6700;    
              }
              .info em {
              font-style: normal;
              color: #ebe4e0;
              margin: 0 6px 0 15px;
              }
          </style>
          <div class="product">
              <img src="images/img.jpg" />
              <p class="review">快递牛,整理不错蓝牙可以说秒连。红米给力</p>
              <div class="appraise">来自于117384232的评价</div>
              <div class="info">
                  Redmi AirDots真无线...
                  <em>|</em>
                  <span>99.00元</span>
              </div>
          </div>
          

          圆角边框

          在 CSS3 中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。

          border-radius 属性用于设置元素的外边框圆角。

          语法:

          CSS
          border-radius:length;
          
          • 参数值可以为数值或百分比的形式
          • 如果是正方形,想要设置为一个圆,把数值修改为高度或者宽度的一半即可,或者直接写为 50%
          • 该属性是一个简写属性,可以跟四个值,分别代表左上角、右上角、右下角、左下角
          • 分开写:border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius
          • 兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用.

          盒子阴影

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

          语法:

          CSS
          box-shadow: h-shadow v-shadow blur spread color inset;
          

          image-20231214115203023

          注意:

          1.默认的是外阴影(outset), 但是不可以写这个单词,否则造成阴影无效 2.盒子阴影不占用空间,不会影响其他盒子排列。

          文字阴影

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

          语法:

          CSS
          text-shadow: h-shadow v-shadow blur color;
          

          image-20231214115243978

          day09-前端基础CSS第七天

          学习目标:

          ​ 能够使用精灵图

          ​ 能够使用字体图标

          ​ 能够写出 CSS 三角

          ​ 能够写出常见的 CSS 用户界面样式

          ​ 能够说出常见的布局技巧

          1. 精灵图(重点)

          1.1 为什么需要精灵图

          1571482435259

          一个网页中往往会应用很多小的背景图像作为修饰,当网页中的图像过多时,服务器就会频繁地接收和发送请求图片,造成服务器请求压力过大,这将大大降低页面的加载速度。

          为什么使用精灵图(目的):

          为了有效地减少服务器接收和发送请求的次数提高**页面的**加载速度,出现了 CSS 精灵技术(也称 CSS Sprites、CSS 雪碧)。

          核心原理

          ​ 将网页中的一些小背景图像整合到一张大图中 ,这样服务器只需要一次请求就可以了。

          精灵图举例:

          1571519067073

          1.2 精灵图(sprites)的使用

          使用精灵图核心:

          1. 精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中。
          2. 这个大图片也称为 sprites 精灵图 或者 雪碧图
          3. 移动背景图片位置, 此时可以使用 background-position 。
          4. 移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同
          5. 因为一般情况下都是往上往左移动,所以数值是负值。
          6. 使用精灵图的时候需要精确测量,每个小背景图片的大小和位置。

          使用精灵图核心总结:

          1. 精灵图主要**针对于小的背景图片**使用。

          2. 主要借助于背景位置来实现---background-position

          3. 一般情况下精灵图都是**负值**。(千万注意网页中的坐标: x轴右边走是正值,左边走是负值, y轴同理。)

          1.3 案例:拼出自己名字

          1.3.1 案例效果

          1571519368229

          1.3.2 代码参考

          结构

          HTML
          1
          2
          3
          4
          <span class="p">p</span>
          <span class="i">i</span>
          <span class="n">n</span>
          <span class="k">k</span>
          

          样式

          CSS
          span {
              display: inline-block;
              background: url(images/abcd.jpg) no-repeat;
          }
          .p {
              width: 100px;
              height: 112px;
              /* background-color: pink; */
              background-position:  -493px -276px;
          }
          .i {
              width: 60px;
              height: 108px;
              /* background-color: pink; */
              background-position: -327px -142px;
          }
          .n {
              width: 108px;
              height: 109px;
              /* background-color: pink; */
              background-position: -215px -141px;
          }
          .k {
              width: 105px;
              height: 114px;
              /* background-color: pink; */
              background-position: -495px -142px;
          }
          

          2. 字体图标

          2.1 字体图标的产生

          字体图标使用场景: 主要用于显示网页中通用、常用的一些小图标。

          精灵图是有诸多优点的,但是缺点很明显。

          1.图片文件还是比较大的。

          2.图片本身放大和缩小会失真。

          3.一旦图片制作完毕想要更换非常复杂。

          此时,有一种技术的出现很好的解决了以上问题,就是**字体图标 iconfont**。

          字体图标**可以为前端工程师提供一种方便高效的图标使用方式,**展示的是图标,本质属于字体

          2.2 字体图标的优点

          轻量级:一个图标字体要比一系列的图像要小。一旦字体加载了,图标就会马上渲染出来,减少了服务器请求

          • 灵活性:本质其实是文字,可以很随意的改变颜色、产生阴影、透明效果、旋转等
          • 兼容性:几乎支持所有的浏览器,请放心使用
          • 注意: 字体图标不能替代精灵技术,只是对工作中图标部分技术的提升和优化。

          总结:

          1.如果遇到一些结构和样式比较简单的小图标,就用字体图标。1571519724473

          2.如果遇到一些结构和样式复杂一点的小图片,就用精灵图。

          1571519739775

          使用步骤

          字体图标是一些网页常见的小图标,我们直接网上下载即可。 因此使用可以分为:

          1.字体图标的下载

          2.字体图标的引入 (引入到我们html页面中)

          3.字体图标的追加 (以后添加新的小图标)

          2.3 字体图标的下载

          推荐下载网站:

          IcoMoon 成立于 2011 年,推出了第一个自定义图标字体生成器,它允许用户选择所需要的图标,使它们成一字型。该字库内容种类繁多,非常全面,唯一的遗憾是国外服务器,打开网速较慢。

          这个是阿里妈妈 M2UX 的一个 iconfont 字体图标字库,包含了淘宝图标库和阿里妈妈图标库。可以使用 AI制作图标上传生成。 重点是,免费!

          2.4 字体图标的引入

          下载完毕之后,注意原先的文件不要删,后面会用

          1. 把下载包里面的 fonts 文件夹放入页面根目录下

          1571520092646

          • 字体文件格式

          不同浏览器所支持的字体格式是不一样的,字体图标之所以兼容,就是因为包含了主流浏览器支持的字体文件。

          1).TureType( .ttf )格式.ttf字体是Windows和Mac的最常见的字体,支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+;

          2).Web Open Font Format( .woff )格式woff字体,支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+;

          3).Embedded Open Type( .eot )格式.eot字体是IE专用字体,支持这种字体的浏览器有IE4+;

          4).SVG( .svg )格式.svg字体是基于SVG字体渲染的一种格式,支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+;

          2.在 CSS 样式中全局声明字体: 简单理解把这些字体文件通过css引入到我们页面中。

          一定注意字体文件路径的问题

          Text Only
           @font-face {
             font-family: 'icomoon';
             src:  url('fonts/icomoon.eot?7kkyc2');
             src:  url('fonts/icomoon.eot?7kkyc2#iefix') format('embedded-opentype'),
               url('fonts/icomoon.ttf?7kkyc2') format('truetype'),
               url('fonts/icomoon.woff?7kkyc2') format('woff'),
               url('fonts/icomoon.svg?7kkyc2#icomoon') format('svg');
             font-weight: normal;
             font-style: normal;
           }
          
          1. html 标签内添加小图标。

          1571520411345

          1. 给标签定义字体。
          Text Only
          1
          2
          3
           span {
             font-family: "icomoon";
           }
          

          注意:务必保证 这个字体和上面@font-face里面的字体保持一致

          1571520485350

          2.5 字体图标的追加

          如果工作中,原来的字体图标不够用了,我们需要添加新的字体图标到原来的字体文件中。

          把压缩包里面的 selection.json 从新上传,然后选中自己想要新的图标,从新下载压缩包,并替换原来的文件即可。

          1571520554317

          2.6 字体图标加载的原理:

          1571520617270

          3. CSS 三角

          3.1 介绍

          网页中常见一些三角形,使用 CSS 直接画出来就可以,不必做成图片或者字体图标。

          一张图, 你就知道 CSS 三角是怎么来的了, 做法如下:

          1571520965966

          CSS
          1
          2
          3
          4
          5
          6
          7
          8
           div {
              width: 0; 
              height: 0;
              border: 50px solid transparent;
              border-color: red green blue black;
              line-height:0;
              font-size: 0;
           }
          
          1. 我们用css 边框可以模拟三角效果
          2. 宽度高度为0
          3. 我们4个边框都要写, 只保留需要的边框颜色,其余的不能省略,都改为 transparent 透明就好了
          4. 为了照顾兼容性 低版本的浏览器,加上 font-size: 0; line-height: 0;

          3.2 案例:京东三角

          3.2.1效果图

          1571521183026

          3.2.2 代码参考
          HTML
          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
              <meta http-equiv="X-UA-Compatible" content="ie=edge">
              <title>CSS 三角制作</title>
              <style>
                  .box1 {
                      width: 0;
                      height: 0;
                      /* border: 10px solid pink; */
                      border-top: 10px solid pink;
                      border-right: 10px solid red;
                      border-bottom: 10px solid blue;
                      border-left: 10px solid green;
                  }
                  .box2 {
                      width: 0;
                      height: 0;
                      border: 50px solid transparent;
                      border-left-color: pink;
                      margin: 100px auto;
                  }
                  .jd {
                      position: relative;
                      width: 120px;
                      height: 249px;
                      background-color: pink;
                  }
                  .jd span {
                      position: absolute;
                      right: 15px;
                      top: -10px;
                      width: 0;
                      height: 0;
                      /* 为了照顾兼容性 */
                      line-height: 0;  
                      font-size: 0;
                      border: 5px solid transparent;
                      border-bottom-color: pink;
                  }
              </style>
          </head>
          <body>
              <div class="box1"></div>
              <div class="box2"></div>
              <div class="jd">
                  <span></span>
              </div>
          </body>
          </html>
          

          4. CSS 用户界面样式

          什么是界面样式

          所谓的界面样式,就是更改一些用户操作样式,以便提高更好的用户体验。

          • 更改用户的鼠标样式
          • 表单轮廓
          • 防止表单域拖拽

          4.1 鼠标样式 cursor

          CSS
          1
          2
          3
           li {
              cursor: pointer; 
           }
          

          设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状。

          1571521805183

          4.2 轮廓线 outline

          给表单添加 outline: 0; 或者 outline: none; 样式之后,就可以去掉默认的蓝色边框。

          CSS
          1
          2
          3
           input {
              outline: none; 
           }
          

          4.3 防止拖拽文本域 resize

          实际开发中,我们文本域右下角是不可以拖拽的。

          CSS
          1
          2
          3
           textarea{ 
              resize: none;
           }
          

          vertical-align 属性应用

          5. vertical-align 属性应用

          CSS 的 vertical-align 属性使用场景: 经常用于设置图片或者表单(行内块元素)和文字垂直对齐。

          官方解释: 用于设置一个元素的**垂直对齐方式**,但是它只针对于行内元素或者行内块元素有效。

          语法:

          CSS
          vertical-align : baseline | top | middle | bottom 
          

          1571522023413

          1571522040645

          5.1 图片、表单和文字对齐

          图片、表单都属于行内块元素,默认的 vertical-align 是基线对齐。

          1571522093729

          此时可以给图片、表单这些行内块元素的 vertical-align 属性设置为 middle 就可以让文字和图片垂直居中对齐了。

          5.2 解决图片底部默认空白缝隙问题

          bug:图片底侧会有一个空白缝隙,原因是行内块元素会和文字的基线对齐。

          主要解决方法有两种:

          1.给图片**添加 **vertical-align:middle | top| bottom 等。 (提倡使用的)

          2.把图片转换为块级元素 display: block;

          1571522162225

          6. 溢出的文字省略号显示

          6.1 单行文本溢出显示省略号

          1571522317809

          单行文本溢出显示省略号--必须满足三个条件:

          CSS
          1
          2
          3
          4
          5
          6
          7
          8
            /*1. 先强制一行内显示文本*/
             white-space: nowrap;   默认 normal 自动换行
          
            /*2. 超出的部分隐藏*/
             overflow: hidden;
          
            /*3. 文字用省略号替代超出的部分*/
             text-overflow: ellipsis;
          

          6.2 多行文本溢出显示省略号(了解)

          1571522334591

          多行文本溢出显示省略号,有较大兼容性问题,适合于webKit浏览器或移动端(移动端大部分是webkit内核)

          CSS
          /*1. 超出的部分隐藏 */
          overflow: hidden;
          
          /*2. 文字用省略号替代超出的部分 */
          text-overflow: ellipsis;
          
          /* 3. 弹性伸缩盒子模型显示 */
          display: -webkit-box;
          
          /* 4. 限制在一个块元素显示的文本的行数 */
          -webkit-line-clamp: 2;
          
          /* 5. 设置或检索伸缩盒对象的子元素的排列方式 */
          -webkit-box-orient: vertical;
          

          更推荐让后台人员来做这个效果,因为后台人员可以设置显示多少个字,操作更简单。

          7. 常见布局技巧

          巧妙利用一个技术更快更好的布局:

          1. margin负值的运用
          2. 文字围绕浮动元素
          3. 行内块的巧妙运用
          4. CSS三角强化

          7.1. margin负值运用

          1571522666082

          1571522683897

          1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框

          2.鼠标经过某个盒子的时候,提高当前盒子的层级即可(如果没有有定位,则加相对定位(保留位置),如果有定位,则加z-index)

          7.2 文字围绕浮动元素

          效果

          1571522777745

          布局示意图

          1571522761996

          巧妙运用浮动元素不会压住文字的特性

          7.3 行内块巧妙运用

          1571522898744

          页码在页面中间显示:

          1. 把这些链接盒子转换为行内块, 之后给父级指定 text-align:center;
          2. 利用行内块元素中间有缝隙,并且给父级添加 text-align:center; 行内块元素会水平会居中

          1571522910580

          7.4. CSS 三角强化 案例

          7.4.1 原理

          1571550959181

          1571551000391

          1571548058053

          HTML
          <style>
              .box1 {
                  width: 0;
                  height: 0;
          
                  /* 把上边框宽度调大 */
                  /* border-top: 100px solid transparent;
                  border-right: 50px solid skyblue; */
                  /* 左边和下边的边框宽度设置为0 */
                  /* border-bottom: 0 solid blue;
                  border-left: 0 solid green; */
          
                  /* 1.只保留右边的边框有颜色 */
                  border-color: transparent red transparent transparent;
                  /* 2. 样式都是solid */
                  border-style: solid;
                  /* 3. 上边框宽度要大, 右边框 宽度稍小, 其余的边框该为 0 */
                  border-width: 100px 50px 0 0 ;
              }
          
          </style>
          </head>
          <body>
              <div class="box1"></div>
          </body>
          
          7.4.2 案例效果

          1571548099631

          7.4.3 代码参考
          HTML
          <!DOCTYPE html>
          <html lang="en">
              <head>
                  <meta charset="UTF-8">
                  <meta name="viewport" content="width=device-width, initial-scale=1.0">
                  <meta http-equiv="X-UA-Compatible" content="ie=edge">
                  <title>CSS三角强化的巧妙运用</title>
                  <style>
                      .price {
                          width: 160px;
                          height: 24px;
                          line-height: 24px;
                          border: 1px solid red;
                          margin: 0 auto;
                      }
                      .miaosha {
                          position: relative;
                          float: left;
                          width: 90px;
                          height: 100%;
                          background-color:red;
                          text-align: center;
                          color: #fff;
                          font-weight: 700;
                          margin-right: 8px;
          
                      }
                      .miaosha i {
                          position: absolute;
                          right: 0;
                          top: 0;
                          width: 0;
                          height: 0;
                          border-color: transparent #fff transparent transparent;
                          border-style: solid;
                          border-width: 24px 10px 0 0;
                      }
                      .origin {
                          font-size: 12px;
                          color: gray;
                          text-decoration: line-through;
                      }
                  </style>
              </head>
              <body>
                  <div class="price">
                      <span class="miaosha">
                          ¥1650
                          <i></i>
                      </span>
                      <span class="origin">¥5650</span>
                  </div>
              </body>
          </html>
          

          8. CSS 初始化

          不同浏览器对有些标签的默认值是不同的,为了消除不同浏览器对HTML文本呈现的差异,照顾浏览器的兼容,我们需要对CSS 初始化

          简单理解: CSS初始化是指重设浏览器的样式。 (也称为CSS reset)

          每个网页都必须首先进行 CSS初始化。

          这里我们以 京东CSS初始化代码为例。

          Unicode编码字体:

          把中文字体的名称用相应的Unicode编码来代替,这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。

          比如:

          黑体 \9ED1\4F53 宋体 \5B8B\4F53 微软雅黑 \5FAE\8F6F\96C5\9ED1

          day08-前端基础CSS第六天

          今日目标

          • 能够说出 为什么要用定位
          • 能够说出 定位的 4 种分类
          • 能够说出 4 种定位各自的特点
          • 能够说出 为什么常用子绝父相布局
          • 能够写出 淘宝轮播图布局
          • 能够说出 显示隐藏的 3 种方式以及区别

          1. 定位(position) 介绍

          1.1 为什么使用定位

          我们先来看一个效果,同时思考一下**用标准流或浮动能否实现类似的效果**?

          场景1: 某个元素可以自由的在一个盒子内移动位置,并且压住其他盒子.

          场景2:当我们滚动窗口的时候,盒子是固定屏幕某个位置的。

          结论**:要实现以上效果,**标准流 或 浮动都无法快速实现

          所以:

          1.浮动可以让多个块级盒子一行没有缝隙排列显示, 经常用于横向排列盒子。

          2.定位则是可以让盒子自由的在某个盒子内移动位置或者固定屏幕中某个位置,并且可以压住其他盒子。

          1.2 定位组成

          定位:将盒子**定**在某一个位置,所以**定位也是在摆放盒子, 按照定位的方式移动盒子**

          定位也是用来布局的,它有两部分组成:

          定位 = 定位模式 + 边偏移

          定位模式 用于指定一个元素在文档中的定位方式。**边偏移**则决定了该元素的最终位置。

          1.2.1 边偏移(方位名词)

          边偏移 就是定位的盒子移动到最终位置。有 top、bottom、left 和 right 4 个属性。

          边偏移属性 示例 描述
          top top: 80px 顶端**偏移量,定义元素相对于其父元素**上边线的距离
          bottom bottom: 80px 底部**偏移量,定义元素相对于其父元素**下边线的距离
          left left: 80px 左侧**偏移量,定义元素相对于其父元素**左边线的距离
          right right: 80px 右侧**偏移量,定义元素相对于其父元素**右边线的距离

          定位的盒子有了边偏移才有价值。 一般情况下,凡是有定位地方必定有边偏移。

          1.2.2 定位模式 (position)

          在 CSS 中,通过 position 属性定义元素的**定位模式**,语法如下:

          CSS
          1
          2
          3
          选择器 { 
              position: 属性值; 
          }
          

          定位模式是有不同分类的,在不同情况下,我们用到不同的定位模式。

          定位模式决定元素的定位方式 ,它通过 CSS 的 position 属性来设置,其值可以分为四个:

          语义
          static **静态**定位
          relative **相对**定位
          absolute **绝对**定位
          fixed **固定**定位

          1.3 定位模式介绍

          1.3.1. 静态定位(static) - 了解
          • 静态定位**是元素的**默认**定位方式,**无定位的意思。它相当于 border 里面的none,静态定位static,不要定位的时候用。

          • 语法:

          Text Only
          1
          2
          3
          选择器 { 
              position: static; 
          }
          
          • 静态定位 按照标准流特性摆放位置,它没有边偏移。

          • 静态定位在布局时我们几乎不用的

          1.3.2. 相对定位(relative) - 重要
          • **相对定位**是元素在移动位置的时候,是相对于它自己**原来的位置**来说的(自恋型)。
          • 语法:
          Text Only
          1
          2
          3
          选择器 { 
              position: relative; 
          }
          
          • 相对定位的特点:(务必记住)

          • 1.它是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)。

          • 2.**原来**在标准流的**位置**继续占有,后面的盒子仍然以标准流的方式对待它。

            因此,相对定位并没有脱标。它最典型的应用是给绝对定位当爹的。。。

          • 效果图:

          相对定位案例

          1.3.3. 绝对定位(absolute) - 重要
          1.3.3.1 绝对定位的介绍
          • **绝对定位**是元素在移动位置的时候,是相对于它**祖先元素**来说的(拼爹型)。

          • 语法:

          Text Only
          1
          2
          3
           选择器 { 
            position: absolute; 
           }
          
          1. 完全脱标 —— 完全不占位置;

          2. 父元素没有定位,则以**浏览器**为准定位(Document 文档)。

          1. 父元素要有定位

          2. 元素将依据最近的已经定位(绝对、固定或相对定位)的父元素(祖先)进行定位。

          • 绝对定位的特点总结:(务必记住)

          1.如果**没有祖先元素**或者**祖先元素没有定位**,则以浏览器为基准定位(Document 文档)。

          2.如果祖先元素有定位(相对、绝对、固定定位),则以最近一级的有定位祖先元素为参考点移动位置。

          3.绝对定位**不再占有原先的位置**。所以绝对定位是脱离标准流的。(脱标)

          1.3.3.2 定位口诀 —— 子绝父相

          弄清楚这个口诀,就明白了绝对定位和相对定位的使用场景。

          这个**“子绝父相”太重要了,是我们学习定位的**口诀,是定位中最常用的一种方式这句话的意思是:子级是绝对定位的话,父级要用相对定位。

          因为绝对定位的盒子是拼爹的,所以要和父级搭配一起来使用。

          ①子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子。

          ②父盒子需要加定位限制子盒子在父盒子内显示。

          ③父盒子布局时,需要占有位置,因此父亲只能是相对定位。

          这就是子绝父相的由来,所以**相对定位经常用来作为绝对定位的父级**。

          总结: 因为父级需要占有位置,因此是相对定位, 子盒子不需要占有位置,则是绝对定位

          当然,子绝父相不是永远不变的,如果父元素不需要占有位置,**子绝父绝**也会遇到。

          疑问:为什么在布局时,**子级元素**使用**绝对定位**时,**父级元素**就要用**相对定位**呢?

          观察下图,思考一下在布局时,**左右两个方向的箭头图片**以及**父级盒子**的定位方式。

          子绝父相截图

          分析

          1. 方向箭头**叠加在其他图片上方,应该使用**绝对定位,因为**绝对定位完全脱标**,完全不占位置。
          2. 父级盒子**应该使用**相对定位,因为**相对定位不脱标**,后续盒子仍然以标准流的方式对待它。
          3. 如果父级盒子也使用**绝对定位**,会完全脱标,那么下方的**广告盒子**会上移,这显然不是我们想要的。

          结论父级要占有位置,子级要任意摆放,这就是**子绝父相**的由来。

          1.3.4. 固定定位(fixed) - 重要
          • 固定定位**是元素**固定于浏览器可视区的位置。(认死理型) 主要使用场景: 可以在浏览器页面滚动时元素的位置不会改变。

          • 语法:

          Text Only
          1
          2
          3
           选择器 { 
            position: fixed; 
           }
          
          • 固定定位的特点:(务必记住):

          1.以浏览器的可视窗口为参照点移动元素。

          • 跟父元素没有任何关系
          • 不随滚动条滚动。

          2.固定定位**不在占有原先的位置**。

          • 固定定位也是**脱标**的,其实**固定定位也可以看做是一种特殊的绝对定位**。(认死理型)

          • 完全脱标—— 完全不占位置;

          • 只认**浏览器的可视窗口** —— 浏览器可视窗口 + 边偏移属性 来设置元素的位置;
            • 跟父元素没有任何关系;单独使用的
            • 不随滚动条滚动。

          固定定位举例:

          固定定位案例

          提示:IE 6 等低版本浏览器不支持固定定位。

          1.3.5 粘性定位(sticky) - 了解
          • **粘性定位**可以被认为是相对定位和固定定位的混合。 Sticky 粘性的

          • 语法:

          Text Only
          1
          2
          3
          4
           选择器 { 
               position: sticky; 
               top: 10px; 
           }
          
          • 粘性定位的特点:

          1.以浏览器的可视窗口为参照点移动元素(固定定位特点)

          2.粘性定位占有原先的位置(相对定位特点)

          3.必须添加 top 、left、right、bottom **其中一个**才有效

          跟页面滚动搭配使用。 兼容性较差,IE 不支持。

          1.3.6 定位总结
          定位模式 是否脱标 移动位置 是否常用
          static 静态定位 不能使用边偏移 很少
          relative 相对定位 否 (占有位置) 相对于自身位置移动 基本单独使用
          absolute绝对定位 是(不占有位置) 带有定位的父级 要和定位父级元素搭配使用
          fixed 固定定位 是(不占有位置) 浏览器可视区 单独使用,不需要父级
          sticky 粘性定位 否 (占有位置) 浏览器可视区 当前阶段少
          • 一定记住 相对定位、固定定位、绝对定位 两个大的特点: 1. 是否占有位置(脱标否) 2. 以谁为基准点移动位置。

          • 学习定位重点学会子绝父相。

          • 注意:

          • 边偏移**需要和**定位模式**联合使用,**单独使用无效

          • topbottom 不要同时使用;
          • leftright 不要同时使用。

          2. 综合案例:学成在线-hot 模块添加

          2. 1 案例截图

          1571385860679

          2.2 案例分析

          1. 一个大的 li 中包含 一个课程图片,课程介绍文字信息,还有hot的小图标;
          2. hot图片**重叠**在课程图片上面—— 脱标,不占位置,需要使用**绝对定位**;
          3. hot图片**重叠**在**li的右上方 —— 需要**使用边偏移确定准确位置。

          2.3 案例小结

          1. 子绝父相 —— 子元素**使用**绝对定位父元素**使用**相对定位
          2. 与浮动的对比
          3. 绝对定位:脱标,利用边偏移指定准确位置
          4. 浮动:脱标,不能指定准确位置,让多个块级元素在一行显示

          课堂练习:模拟老师的随堂案例完成**哈根达斯**案例(5 分钟)。

          结构修改:

          HTML
          <!-- 修改.box-bd里面的li标签内容,添加一个hot图标 -->
          
          <li>
               <!-- 添加hot小图片 -->
              <em>
                  <img src="images/hot.png" alt="">
              </em>
              <img src="images/pic.png" alt="">
              <h4>
                  Think PHP 5.0 博客系统实战项目演练
              </h4>
              <div class="info">
                  <span>高级</span> • 1125人在学习
              </div>
          </li>
          

          样式修改:

          CSS
          .box-bd ul li {
              /* 子绝父相 */
              /* 父元素相对定位 */
              position: relative;
              float: left;
              width: 228px;
              height: 270px;
              background-color: #fff;
              margin-right: 15px;
              margin-bottom: 15px;
          
          }
          .box-bd ul li > img {
              width: 100%;
          }
          .box-bd ul li h4 {
              margin: 20px 20px 20px 25px;
              font-size: 14px;
              color: #050505;
              font-weight: 400;
          }
          .box-bd ul li em {
               /* 子元素绝对定位 */
              position: absolute;
              top: 4px;
              right: -4px;
          }
          

          3. 定位(position)的应用

          3.1. 固定定位小技巧: 固定在版心左侧位置。

          小算法:

          1.让固定定位的盒子 left: 50%. 走到浏览器可视区(也可以看做版心) 的一半位置。

          2.让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走 版心宽度的一半位置

          就可以让固定定位的盒子**贴着版心右侧对齐**了。

          案例效果:

          1571389241926

          HTML
          <style>
                  .w {
                      width: 800px;
                      height: 1400px;
                      background-color: pink;
                      margin: 0 auto;
                  }
                  .fixed {
                      position: fixed;
                      /* 1. 走浏览器宽度的一半 */
                      left: 50%;
                      /* 2. 利用margin 走版心盒子宽度的一半距离 */
                      margin-left: 405px;
                      width: 50px;
                      height: 150px;
                      background-color: skyblue;
                  }
              </style>
          </head>
          <body>
              <div class="fixed"></div>
              <div class="w">版心盒子 800像素</div>
          
          </body>
          

          3.2. 堆叠顺序(z-index)

          • 在使用**定位**布局时,可能会**出现盒子重叠的情况**。此时,可以使用 z-index 来控制盒子的前后次序 (z轴)

          • 语法:

          Text Only
          1
          2
          3
          选择器 { 
            z-index: 1; 
          }
          
          • z-index 的特性如下:

          • 属性值正整数负整数**或 **0,默认值是 0,数值越大,盒子越靠上;

          • 如果**属性值相同**,则按照书写顺序,后来居上
          • 数字后面**不能加单位**。

          注意z-index 只能应用于**相对定位**、绝对定位**和**固定定位**的元素,其他**标准流、**浮动**和**静态定位**无效。

          • 应用 z-index 层叠等级属性可以**调整盒子的堆叠顺序**。如下图所示:

          zindex示意图

          案例演示:堆叠顺序。

          4. 定位(position)的拓展

          4.1 绝对定位的盒子居中

          注意:加了**绝对定位/固定定位的盒子**不能通过设置 margin: auto 设置**水平居中**。

          但是可以通过以下计算方法实现水平和垂直居中,可以按照下图的方法:

          绝对定位水平居中

          1. left: 50%;:让**盒子的左侧**移动到**父级元素的水平中心位置**;
          2. margin-left: -100px;:让盒子**向左**移动**自身宽度的一半**。

          盒子居中定位示意图

          绝对定位居中示意图

          4.2 定位特殊特性

          绝对定位和固定定位也和浮动类似。

          1.行内元素添加绝对或者固定定位,可以直接设置高度和宽度。

          2.块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小。

          前面我们讲过, display 是 显示模式, 可以改变显示模式有以下方式:

          • 可以用inline-block 转换为行内块
          • 可以用浮动 float 默认转换为行内块(类似,并不完全一样,因为浮动是脱标的)
          • 绝对定位和固定定位也和浮动类似, 默认转换的特性 转换为行内块。

          所以说, 一个行内的盒子,如果加了**浮动**、固定定位**和**绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等。

          4.3 脱标的盒子不会触发外边距塌陷

          浮动元素、**绝对定位(固定定位)**元素的都不会触发外边距合并的问题。 (我们以前是用padding border overflow解决的)

          也就是说,我们给盒子改为了浮动或者定位,就不会有垂直**外边距合并的问题**了。

          4.4 绝对定位(固定定位)会完全压住盒子

          浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片)

          但是绝对定位(固定定位) 会压住下面标准流所有的内容。

          浮动之所以不会压住文字,因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素

          5. 综合案例 - 淘宝轮播图(重点)

          5.1 效果图

          5.2 布局分析

          1571397019689

          5.3 步骤

          1. 大盒子我们类名为: tb-promo 淘宝广告

          2. 里面先放一张图片。

          3. 左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next

          ​ 左按钮样式(border-radius:左上,右上,右下,左下),

          ​ 右按钮定位,提取左右按钮共同的样式代码(并集选择器)

          1. 底侧小圆点ul 继续做。 类名为 promo-nav

          ​ 中间长方形椭圆 ul的定位(水平居中,离底部15px)

          ​ 长方形需要五个小圆点,ul无序列表,li浮动,椭圆中小圆点的样式

          5.4 知识点:圆角矩形设置4个角

          圆角矩形可以为4个角分别设置圆度, 但是是有顺序的

          Text Only
          1
          2
          3
          4
          border-top-left-radius:20px;
          border-top-right-radius:20px;
          border-bottom-right-radius:20px;
          border-bottom-left-radius:20px;
          
          • 如果4个角,数值相同
          CSS
          border-radius: 15px;
          
          • 里面数值不同,我们也可以按照简写的形式,具体格式如下:
          CSS
          border-radius: 左上角 右上角  右下角  左下角;
          

          还是遵循的顺时针。

          5.5 代码参考

          HTML
          <!DOCTYPE html>
          <html lang="en">
          
          <head>
              <meta charset="UTF-8">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
              <meta http-equiv="X-UA-Compatible" content="ie=edge">
              <title>淘宝轮播图做法</title>
              <style>
                  * {
                      margin: 0;
                      padding: 0;
                  }
                  li {
                      list-style: none;
                  }
          
                  .tb-promo {
                      position: relative;
                      width: 520px;
                      height: 280px;
                      background-color: pink;
                      margin: 100px auto;
                  }
          
                  .tb-promo img {
                      width: 520px;
                      height: 280px;
                  }
          
                  /* 并集选择器可以集体声明相同的样式 */
                  .prev,
                  .next {
                      position: absolute;
                      /* 绝对定位的盒子垂直居中 */
                      top: 50%;
                      margin-top: -15px;
                      /* 加了绝对定位的盒子可以直接设置高度和宽度 */
                      width: 20px;
                      height: 30px;
                      background: rgba(0, 0, 0, .3);
                      text-align: center;
                      line-height: 30px;
                      color: #fff;
                      text-decoration: none;
                  }
          
                  .prev {
                      left: 0;
                      /* border-radius: 15px; */
                      border-top-right-radius: 15px;
                      border-bottom-right-radius: 15px;
                  }
          
                  .next {
                      /* 如果一个盒子既有left属性也有right属性,则默认会执行 left属性 同理  top  bottom  会执行 top */
                      right: 0;
                      /* border-radius: 15px; */
                      border-top-left-radius: 15px;
                      border-bottom-left-radius: 15px;
                  }
                  .promo-nav {
                      position: absolute;
                      bottom: 15px;
                      left: 50%;
                      margin-left: -35px;
                      width: 70px;
                      height: 13px;
                      /* background-color: pink; */
                      background: rgba(255,255,255, .3);
                      border-radius: 7px;
                  }
                  .promo-nav li {
                      float: left;
                      width: 8px;
                      height: 8px;
                      background-color: #fff;
                      border-radius: 50%;
                      margin: 3px;
                  }
                  /* 不要忘记选择器权重的问题 */
                 .promo-nav .selected {
                      background-color: #ff5000;
                  }
              </style>
          </head>
          
          <body>
              <div class="tb-promo">
                  <img src="images/tb.jpg" alt="">
                  <!-- 左侧按钮箭头 -->
                  <a href="#" class="prev"> &lt; </a>
                  <!-- 右侧按钮箭头 -->
                  <a href="#" class="next"> &gt; </a>
                  <!-- 小圆点 -->
                  <ul class="promo-nav">
                      <li class="selected"></li>
                      <li></li>
                      <li></li>
                      <li></li>
                      <li></li>
                  </ul>
              </div>
          </body>
          
          </html>
          

          6. 网页布局总结

          通过盒子模型,清楚知道大部分html标签是一个盒子。

          通过CSS浮动、定位 可以让每个盒子排列成为网页。

          一个完整的网页,是标准流、浮动、定位一起完成布局的,每个都有自己的专门用法。

          6.1. 标准流

          可以让盒子上下排列或者左右排列,垂直的块级盒子显示就用标准流布局

          6.2. 浮动

          可以让多个块级元素一行显示或者左右对齐盒子,多个块级盒子水平显示就用浮动布局

          6.3. 定位

          定位最大的特点是有层叠的概念,就是可以让多个盒子前后叠压来显示。如果元素自由在某个盒子内移动就用定位布局。

          7. 元素的显示与隐藏

          • 目的(本质)

          ​ 让一个元素在页面中消失或者显示出来

          • 场景

          ​ 类似网站广告,当我们点击关闭就不见了,但是我们重新刷新页面,会重新出现!

          7.1. display 显示(重点)

          • display 设置或检索对象是否及如何显示。
          Text Only
          1
          2
          3
          display: none 隐藏对象
          
          display:block 除了转换为块级元素之外,同时还有显示元素的意思。
          
          • 特点: display 隐藏元素后,**不再占**有原来的位置。

          • 后面应用及其广泛,搭配 JS 可以做很多的网页特效。实际开发场景:

          配合后面js做特效,比如下拉菜单,原先没有,鼠标经过,显示下拉菜单, 应用极为广泛

          7.2. visibility 可见性 (了解)

          • visibility 属性用于指定一个元素应可见还是隐藏。
          Text Only
          1
          2
          3
          visibility:visible ;  元素可视
          
          visibility:hidden;    元素隐藏
          
          • 特点:visibility 隐藏元素后,继续占有原来的位置。(停职留薪)

          • 如果隐藏元素想要原来位置, 就用 visibility:hidden

          • 如果隐藏元素不想要原来位置, 就用 display:none (用处更多 重点)

          7.3. overflow 溢出(重点)

          • overflow 属性指定了如果内容溢出一个元素的框(超过其指定高度及宽度) 时,会发生什么。
          属性值 描述
          visible 不剪切内容也不添加滚动条
          hidden 不显示超过对象尺寸的内容,超出的部分隐藏掉
          scroll 不管超出内容否,总是显示滚动条
          auto 超出自动显示滚动条,不超出不显示滚动条
          • 一般情况下,我们都不想让溢出的内容显示出来,因为溢出的部分会影响布局。
          • 但是如果有定位的盒子, 请慎用overflow:hidden 因为它会隐藏多余的部分。

          • 实际开发场景:

          • 清除浮动

          • 隐藏超出内容,隐藏掉, 不允许内容超过父盒子。

          7.4. 显示与隐藏总结

          属性 区别 用途
          display 显示 (重点) 隐藏对象,不保留位置 配合后面js做特效,比如下拉菜单,原先没有,鼠标经过,显示下拉菜单, 应用极为广泛
          visibility 可见性 (了解) 隐藏对象,保留位置 使用较少
          overflow 溢出(重点) 只是隐藏超出大小的部分 1. 可以清除浮动 2. 保证盒子里面的内容不会超出该盒子范围

          8 综合案例:土豆网鼠标经过显示遮罩

          8.1. 效果图

          8.2. 案例目标

          1.练习元素的显示与隐藏

          2.练习元素的定位

          8.3. 核心原理

          原先半透明的黑色遮罩看不见, 鼠标经过 大盒子,就显示出来。

          遮罩的盒子不占有位置, 就需要用绝对定位 和 display 配合使用。

          8.4. 代码参考

          HTML
          <!DOCTYPE html>
          <html lang="en">
          
          <head>
              <meta charset="UTF-8">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
              <meta http-equiv="X-UA-Compatible" content="ie=edge">
              <title>仿土豆网显示隐藏遮罩案例</title>
              <style>
                  .tudou {
                      position: relative;
                      width: 444px;
                      height: 320px;
                      background-color: pink;
                      margin: 30px auto;
                  }
          
                  .tudou img {
                      width: 100%;
                      height: 100%;
                  }
          
                  .mask {
                      /* 隐藏遮罩层 */
                      display: none;
                      position: absolute;
                      top: 0;
                      left: 0;
                      width: 100%;
                      height: 100%;
                      background: rgba(0, 0, 0, .4) url(images/arr.png) no-repeat center;
                  }
          
                  /* 当我们鼠标经过了 土豆这个盒子,就让里面遮罩层显示出来 */
                  .tudou:hover .mask {
                      /* 而是显示元素 */
                      display: block;
                  }
              </style>
          </head>
          
          <body>
              <div class="tudou">
                  <div class="mask"></div>
                  <img src="images/tudou.jpg" alt="">
              </div>
              <div class="tudou">
                  <div class="mask"></div>
                  <img src="images/tudou.jpg" alt="">
              </div>
              <div class="tudou">
                  <div class="mask"></div>
                  <img src="images/tudou.jpg" alt="">
              </div>
              <div class="tudou">
                  <div class="mask"></div>
                  <img src="images/tudou.jpg" alt="">
              </div>
          </body>
          
          </html>
          

          CSS 的复合选择器

          什么是复合选择器

          在 CSS 中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进行组合形成的。

          • 复合选择器可以更准确、更高效的选择目标元素(标签)
          • 复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的
          • 常用的复合选择器包括:后代选择器、子选择器、并集选择器、伪类选择器等等

          后代选择器(重要)

          后代选择器又称为包含选择器,可以选择父元素里面子元素。其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔。当标签发生嵌套时,内层标签就成为外层标签的后代。

          Bash
          元素1 元素2 { 样式声明 }
          

          上述语法表示选择元素 1 里面的所有元素 2 (后代元素)。

          例如:

          Bash
          ul li { 样式声明 } /* 选择 ul 里面所有的 li标签元素 */
          
          • 元素1 和 元素2 中间用空格隔开
          • 元素1 是父级,元素2 是子级,最终选择的是元素2
          • 元素2 可以是儿子,也可以是孙子等,只要是元素1 的后代即可
          • 元素1 和 元素2 可以是任意基础选择器

          子选择器(重要)

          子元素选择器(子选择器)只能选择作为某元素的最近一级子元素。简单理解就是选亲儿子元素.

          语法:

          Bash
          元素1 > 元素2 { 样式声明 }
          

          上述语法表示选择元素1 里面的所有直接后代(子元素) 元素2。

          例如:

          Bash
          div > p { 样式声明 } /* 选择 div 里面所有最近一级 p 标签元素 */
          
          • 元素1 和 元素2 中间用 大于号 隔开
          • 元素1 是父级,元素2 是子级,最终选择的是元素2
          • 元素2 必须是亲儿子,其孙子、重孙之类都不归他管. 你也可以叫他 亲儿子选择器

          并集选择器 (重要)

          并集选择器是各选择器通过英文逗号(,)连接而成,任何形式的选择器都可以作为并集选择器的一部分。

          例如:

          Bash
          ul,div { 样式声明 } /* 选择 ul  div标签元素 */
          
          • 元素1 和 元素2 中间用逗号隔开
          • 逗号可以理解为和的意思
          • 并集选择器通常用于集体声明

          伪类选择器

          伪类选择器书写最大的特点是用冒号(:)表示,比如 :hover 、 :first-child 。

          因为伪类选择器很多,比如有链接伪类、结构伪类等,所以这里先给大家讲解常用的链接伪类选择器。

          链接伪类选择器

          链接伪类选择器注意事项
          1. 为了确保生效,请按照 LVHA 的循顺序声明 :link-:visited-:hover-:active。
          2. 记忆法:love hate 或者 lv 包包 hao 。
          3. 因为 a 链接在浏览器中具有默认样式,所以我们实际工作中都需要给链接单独指定样式。
          链接伪类选择器

          链接伪类选择器实际工作开发中的写法:

          HTML
          1
          2
          3
          4
          5
          6
          7
          8
          /* a 是标签选择器 所有的链接 */
          a {
          color: gray;
          }
          /* :hover 是链接伪类选择器 鼠标经过 */
          a:hover {
          color: red; /* 鼠标经过的时候,由原来的 灰色 变成了红色 */
          }
          

          :focus 伪类选择器

          :focus 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标,一般情况 类表单元素才能获取,因此这个选择器也主要针对于表单元素来说。

          HTML
          1
          2
          3
          input:focus {
          background-color:yellow;
          }
          

          复合选择器总结

          选择器 作用 特征 使用情况 隔开符号及用法
          后代选择器 用来选择后代元素 可以是子孙后代 较多 符号是空格.nav a
          子代选择器 选择最近一级元素 只能选亲儿子 较少 符号是大于 .nav >p
          并集选择器 选择某些相同样式的元素 可以用于集体申明 较多 符号是逗号 .nav,.header
          链接伪类选择器 选择不同状态的链接 选择不同状态的链接 较多 重点记住a{}和a:hover 实际开发的写法
          :focus选择器 选择获得光标的表单 选择获得光标的表单 较少 input:focus 记住这个写法

          css第03天

          浮动

          1、传统网页布局的三种方式

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

          • 普通流(标准流)

          • 浮动

          • 定位

          这三种布局方式都是用来摆放盒子的,盒子摆放到合适位置,布局自然就完成了。

          注意:实际开发中,一个页面基本都包含了这三种布局方式(后面移动端学习新的布局方式) 。

          2、标准流(普通流/文档流)

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

          1. 块级元素会独占一行,从上向下顺序排列。常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table
          2. 行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。常用元素:span、a、i、em 等

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

          3、为什么需要浮动?

          ​ 总结: 有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局。 因为浮动可以改变元素标签默认的排列方式.

          ​ 浮动最典型的应用:可以让多个块级元素一行内排列显示。

          ​ 网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动

          4、什么是浮动?

          ​ float 属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。

          语法:

          CSS
           选择器 { float: 属性值; }
          

          1571543209934

          5、浮动特性

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

          1、浮动元素会脱离标准流(脱标:浮动的盒子不再保留原先的位置)

          1571544664994

          2、浮动的元素会一行内显示并且元素顶部对齐

          1571544725757

          注意:

          ​ 浮动的元素是互相贴靠在一起的(不会有缝隙),如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐。

          3、浮动的元素会具有行内块元素的特性

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

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

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

          为了约束浮动元素位置, 我们网页布局一般采取的策略是:

          ​ 先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧

          1571544991989

          常见网页布局

          浮动布局注意点

          1、浮动和标准流的父盒子搭配。

          先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置

          2、一个元素浮动了,理论上其余的兄弟元素也要浮动。

          一个盒子里面有多个子盒子,如果其中一个盒子浮动了,其他兄弟也应该浮动,以防止引起问题。

          浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流.

          案例1

          image-20231214171207034

          HTML
          <style>
              div {
                  width: auto;
                  height: 120px;
                  /* 常见的写法,以下三种都可以:
                  以上方法是让块级元素水平居中,
                  行内元素或者行内块元素水平居中给其父元素添加 text-align:center 即可。
                  margin-left: auto; margin-right: auto;
                  margin: auto;
                  margin: 0 auto; */
                  margin: 0 auto;
                  /* margin: 20px; */
              }
              .box,
              .box1,
              .box2,
              .box3,
              .box4,
              .box5 {
                  /* float: left; */
                  /* 如果父级宽度装不下这些浮动的盒子, 多出的盒子会另起一行对齐。 */
                  width: 300px;
              }
              .item1 {
                  float: left;
                  width: 100px;
                  height: 100px;
                  background-color: aqua;
              }
              .item2 {
                  float: left;
                  width: 100px;
                  height: 100px;
                  background-color: beige;
              }
              .item3 {
                  float: left;
                  width: 100px;
                  height: 100px;
                  background-color: blueviolet;
                  /* float: right; */
              }
          </style>
          <!-- 先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧. -->
          <div class="box">
              <div class="item1"></div>
              <div class="item2"></div>
              <div class="item3"></div>
          </div>
          <div class="box1">
              <div class="item1">box1</div>
              <div class="item2">box1</div>
              <div class="item3">box1</div>
          </div>
          <div class="box2">
              <div class="item1">box2</div>
              <div class="item2">box2</div>
              <div class="item3">box2</div>
          </div>
          <div class="box3">
              <div class="item1">box3</div>
              <div class="item2">box3</div>
              <div class="item3">box3</div>
          </div>
          <div class="box4">
              <div class="item1">box4</div>
              <div class="item2">box4</div>
              <div class="item3">box4</div>
          </div>
          <div class="box5">
              <div class="item1">box5</div>
              <div class="item2">box5</div>
              <div class="item3">box5</div>
          </div>
          

          案例2 小米手机页面

          image-20231214173033431

          HTML
          <style>
              .box{
                  background-color: antiquewhite;
                  width: 1200px;
                  height: auto;
                  margin: 0 auto;
              }
              .left{
                  width: 300px;
                  height: 610px;
                  background-color: rgb(151, 151, 214);
                  float: left;
                  line-height: 610px;
                  text-align: center;
                  font-size: 50px;
              }
              .right{
                  width: 840px;
                  height: 610px;
                  float: left;
                  padding-left: 10px;
                  /* margin-left: 10px; */
                  /* background-color: skyblue; */
              }
              .right div{
                  width: 200px;
                  height: 300px;
                  float: left;
                  margin: 0 10px 10px 0;
                  line-height: 300px;
                  text-align: center;
                  font-size: 30px;
              }
              .right div{
                  background-color: pink;
              }
          </style>
          <div class="box">
              <div class="left">
                  手机新浪网
              </div>
              <div class="right">
                  <div class="item1">1</div>
                  <div class="item2">2</div>
                  <div class="item3">3</div>
                  <div class="item4">4</div>
                  <div class="item5">5</div>
                  <div class="item6">6</div>
                  <div class="item7">7</div>
                  <div class="item8">8</div>
              </div>
          </div>
          

          四、清除浮动

          1、为什么需要清除浮动?

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

          1571555883628

          2、清除浮动本质

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

          注意:

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

          3、清除浮动样式

          语法:

          CSS
           选择器{clear:属性值;} 
          

          1571555980419

          我们实际工作中, 几乎只用 clear: both;

          清除浮动的策略是: 闭合浮动.

          4、清除浮动的多种方式

          4.1、额外标签法

          额外标签法也称为隔墙法,是 W3C 推荐的做法。

          使用方式:

          ​ 额外标签法会在浮动元素末尾添加一个空的标签。

          HTML
          例如 <div style="clear:both"></div>,或者其他标签(如<br />等)。
          

          ​ 优点: 通俗易懂,书写方便

          ​ 缺点: 添加许多无意义的标签,结构化较差

          ​ 注意: 要求这个新的空标签必须是块级元素。

          总结:

          ​ 1、清除浮动本质是?

          ​ 清除浮动的本质是清除浮动元素脱离标准流造成的影响

          ​ 2、清除浮动策略是?

          ​ 闭合浮动. 只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子.

          ​ 3、额外标签法?

          ​ 隔墙法, 就是在最后一个浮动的子元素后面添

          ​ 4、加一个额外标签, 添加 清除浮动样式.

          ​ 实际工作可能会遇到,但是不常用

          4.2、父级添加 overflow 属性

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

          例如:

          CSS
          overflow:hidden | auto | scroll;
          

          优点:代码简洁

          缺点:无法显示溢出的部分

          注意:是给父元素添加代码

          4.3、父级添加after伪元素

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

          CSS
           .clearfix:after {  
             content: ""; 
             display: block; 
             height: 0; 
             clear: both; 
             visibility: hidden;  
           } 
           .clearfix {  /* IE6、7 专有 */ 
             *zoom: 1;
           }   
          

          优点:没有增加标签,结构更简单

          缺点:照顾低版本浏览器

          代表网站: 百度、淘宝网、网易等

          4.4、父级添加双伪元素

          给父元素添加

          CSS
           .clearfix:before,.clearfix:after {
             content:"";
             display:table; 
           }
           .clearfix:after {
             clear:both;
           }
           .clearfix {
              *zoom:1;
           }   
          

          优点:代码更简洁

          缺点:照顾低版本浏览器

          代表网站:小米、腾讯等

          总结

          为什么需要清除浮动?

          1. 父级没高度。
          2. 子盒子浮动了。
          3. 影响下面布局了,我们就应该清除浮动了。

          1571556500074

          五、PS 切图

          1、图层切图

          HTML
          最简单的切图方式:右击图层 → 导出 → 切片。
          

          2、切片切图

          2.1、利用切片选中图片

          Text Only
           利用切片工具手动划出
          

          2.2、导出选中的图片

          HTML
          文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储 。
          

          3、PS插件切图

          ​ Cutterman 是一款运行在 Photoshop 中的插件,能够自动将你需要的图层进行输出,以替代传统的手工 "导出 web 所用格式" 以及使用切片工具进行挨个切图的繁琐流程。

          官网:http://www.cutterman.cn/zh/cutterman

          注意:Cutterman 插件要求你的 PS 必须是完整版,不能是绿色版,所以大家需要安装完整版本。

          1571556821045

          Nginx部署VUE项目到本地

          下载nginx

          下载链接:http://nginx.org/en/download.html

          随便找一个,目前安装的是1.16.1

          修改nginx配置

          进入nginx的 conf/nginx.conf

          修改Location的值,设为vue的路径

          新建bat脚本,本地启动服务

          Bash
          1
          2
          3
          4
          5
          @echo off
          start /d "D:\Program Files\Redis-x64-5.0.14.1" redis-server.exe
          start /d "E:\Gitee\JAVA\Project\myblog\BlogWeb\target" java -jar BlogWeb-1.0-SNAPSHOT.jar
          start /d "E:\download\nginx-1.16.1\nginx-1.16.1" nginx.exe
          pause