第14章 掌握CSS3基本语法

309 阅读23分钟

1 CSS3 新增长度单位

  1. rem 根元素字体大小的倍数,只与根元素字体大小有关。
  2. vw 视口宽度的百分之多少。如 10vw 就是视口宽度的 10% 。
  3. vh 视口高度的百分之多少。如 10vh 就是视口高度的 10% 。
  4. vmax 视口宽高中大的那个的百分之多少。(了解即可)
  5. vmin 视口宽高中小的那个的百分之多少。(了解即可)

2 CSS3 新增颜色设置方式

CSS3 新增了三种颜色设置方式,分别是: rgbahslhsla

3 CSS3 新增选择器

CSS3 新增的选择器有:动态伪类目标伪类语言伪类UI 伪类结构伪类否定伪类伪元素;这些在 CSS2 中已经详细讲解,此处略过。

4 CSS3 新增盒子模型相关属性

4.1 box-sizing怪异盒模型

box-sing属性

4.2 resize允许用户调整盒子大小

resize属性

注意:要与overflow连用才能生效。

4.3 box-shadow为盒子设置阴影

box-shadow属性

内延与外延的区别

  • 内延,是指影子盒子把元素盒子往里压。
  • 外延,是指元素盒子把影子盒子往外挤。 box-shadow的内延与外延

4.4 不透明度

opacity 属性能为整个元素添加透明效果, 它的值是 0 ~ 1之间的小数, 0 是完全透明, 1 表示完全不透明。

opacity rgba 的区别?

  • opacity 是一个属性,设置的是整个元素(包括元素里的内容)的不透明度。
  • rgba 是颜色的设置方式,用于设置颜色,它的透明度,仅仅是调整颜色的透明度

5 CSS3 新增背景相关属性

5.1 背景原点

  • 属性:background-origin

  • 作用:设置背景图的原点。

  • 语法:

    • padding-box :从 padding 区域开始显示背景图像。—— 默认值
    • border-box : 从 border 区域开始显示背景图像。
    • content-box : 从 content 区域开始显示背景图像
  • 效果: 背景原点设置效果

  • 注意: 默认以左上角为原点,如果背景图面积小于容器面积,则会自动以类似“铺砖”的方式平铺整个盒子,比如垂直方向进行平铺的某张图片因面积大难以完全放下,就会自动拆分成2部分,将其中一部分放置于原地方平铺,另外一部分就放置于盒子垂直方向的最上面。水平方向的平铺也是同理。

5.2 背景剪切

  • 属性:background-clip
  • 作用:设置背景图的向外裁剪的区域。
  • 语法:
    • border-box : 从 border 区域开始向外裁剪背景。
    • padding-box :从 padding 区域开始向外裁剪背景。—— 默认值
    • content-box : 从 content 区域开始向外裁剪背景。
    • text :背景图只呈现在文字上。(需要让字体颜色变成全透明,即设置字体为color:transparent;
  • 注意:若值为 text ,那么 backgroun-clip 要加上 -webkit- 前缀。

5.3 背景尺寸

  • 属性:background-size
  • 作用:设置背景图的尺寸。
  • 语法:
    • 用长度值指定背景图片大小,不允许负值。 background-size: 300px 200px;
    • 用百分比指定背景图片大小,不允许负值。 background-size: 100% 100%;
    • auto : 背景图片的真实大小。 (默认值)
    • contain : 将背景图片等比缩放,使背景图片的宽或高,与容器的宽或高相等,再将完整背景图片包含在容器内,但可能会造成容器里部分区域没有背景图片background-size: contain
    • cover :将背景图片等比缩放,直到完全覆盖容器,图片会尽可能全的显示在元素上,但背景图片有可能显示不完整。(相对比较好的选择) background-size: cover

5.4 背景固定

  • 属性:background-position
  • 作用:背景不会随着元素的内容滚动。
  • 语法:
    • 属性值fixed:可以让背景图固定,background-attachment: fixed;

5.5 背景属性复合写法

  • 语法:background: color url repeat position / size origin clip
  • 注意:
    • originclip 的值若一样,可以只写一个值,表示 originclip 都设置;如果设置了两个值,前面的值是 origin ,后面的值是 clip
    • size 的值必须写在 position 值的后面,并且用/分开。

5.6 多背景图

  • 语法:使用background包裹具体的背景属性复合写法,多个具体的背景属性复合写法用,隔开;
  • 案例:
background: url(../images/bg-lt.png) no-repeat,
            url(../images/bg-rt.png) no-repeat right top, 
            url(../images/bg-lb.png) no-repeat left bottom,
            url(../images/bg-rb.png) no-repeat right bottom

6 CSS3新增边框属性

6.1 边框圆角

  • 属性: border-radius

  • 作用:可以将盒子变为圆角。

  • 语法:

    • 综合: 给每一个角设置圆角的综合写法:border-raidus: 左上角x 右上角x 右下角x 左下角x / 左上y 右上y 右下y 左下y(几乎不用)

    • 通用:border-radius:数字➕单位 / 百分比(给边框的四个角设置圆角)

    边框圆角多指写法

    技巧:从左上角开始顺时针赋值,当前角没有数值则与对角取值相同。

    • 特殊:给每一个角设置圆角。

边框圆角单独属性

  • 原理:以圆的半径作为属性值画个圆,与盒子四个角相切。

边框圆角原理

  • 应用

    • 正圆形状:给正方形盒子设置圆角属性值为 宽高的一半 / 50%
    img {
      width: 200px;
      height: 200px;
    
      border-radius: 100px;
      border-radius: 50%;
    }
    

    正圆形状

    • 胶囊形状:给长方形盒子设置圆角属性值为 盒子高度的一半

          div {
              width: 200px;
              height: 80px;
              background-color: orange;
              border-radius: 40px;
          }
      

    胶囊形状

6.2 外轮廓

  • outline-width :外轮廓的宽度。
  • outline-color :外轮廓的颜色。
  • outline-style :外轮廓的风格。
    • none : 无轮廓
    • dotted : 点状轮廓
    • dashed : 虚线轮廓
    • solid : 实线轮廓
    • double : 双线轮廓
  • outline-offset 设置外轮廓与边框的距离,正负值都可以设置。 注意: outline-offset 不是 outline 的子属性,是一个独立的属性。
  • outline 复合属性 outline:50px solid blue;

CSS3边框轮廓概念注意

7 CSS3 新增文本属性

7.1 文本阴影

  • 属性:text-shadow

  • 用法:给文本添加阴影。(实际上是用来做艺术字,让字体显示白色,添加一个模糊值较大的黑色文本阴影即可。)

  • 语法:text-shadow: h-shadow v-shadow blur color text-shadow设置文本阴影

  • 注意:默认值 text-shadow:none 表示没有阴影。

7.2 文本换行

  • 属性: white-space

  • 用法:设置文本换行方式。

  • 语法: white-space设置文本换行方式

  • 注意:值pre-wrap只是忽略行首空格以及行尾空格

7.3 文本溢出

  • 属性:text-overflow

  • 用法:设置文本内容溢出时的呈现模式。

  • 语法: text-overflow

  • 注意:要使得 text-overflow 属性生效,块容器必须显式定义 overflow 为非 visible 值, white-spacenowrap 值。

7.4 文本修饰

  • 属性:text-decoration(CSS将其升级为复合属性)
  • 作用:给文本增加下划线、上划线以及贯穿线。
  • 语法:
    • text-decoration-line 设置文本装饰线的位置
      • none : 指定文字无装饰 (默认值)
      • underline : 指定文字的装饰是下划线
      • overline : 指定文字的装饰是上划线
      • line-through : 指定文字的装饰是贯穿线
    • text-decoration-style 文本装饰线条的形状
      • solid : 实线 (默认)
      • double : 双线
      • dotted : 点状线条
      • dashed : 虚线
      • wavy : 波浪线
    • text-decoration-color 文本装饰线条的颜色

7.5 文本描边

  • 语法:
    • -webkit-text-stroke-width :设置文字描边的宽度,写长度值。
    • -webkit-text-stroke-color :设置文字描边的颜色,写颜色值。
    • -webkit-text-stroke :复合属性,设置文字描边宽度和颜色。
  • 作用:可以用来做空心文字(必须给文字颜色设置为color:transparent

8 CSS新增渐进属性值

渐变是多个颜色逐渐变化的效果,一般用于设置盒子背景。

8.1 线性渐变

  • 语法:background-image: linear-gradient( 渐变方向, 颜色1 终点位置, 颜色2 终点位置, ...... );
  • 应用:
    1. 默认渐变:多个颜色之间的渐变, 默认从上到下渐变。 默认线性渐变

    2. 使用关键词设置线性渐变的方向。使用关键词设置渐变方向

    3. 使用角度设置线性渐变的方向。(实际上是逆时针转动,值 0deg 等于向上(to top)。值 90deg 等于向右(to right)。值 180deg 等于向下(to bottom)) 使用角度设置线性渐变

    4. 调整渐变的位置(设置的位置实质上是纯色位置,若纯色位置前没有其它颜色,则纯色位置前都是纯色;反之,则由纯色位置前的颜色渐变为该纯色。) 调整渐变的位置

8.2 径向渐变

  • 语法:background-image: radial-gradient( 半径 at 圆心位置, 颜色1 终点位置, 颜色2 终点位置, .......)(半径可以是2条,则为椭圆;圆心位置取值:像素单位数值 / 百分比 / 方位名词。)
  • 应用:
    1. 默认渐变:多个颜色之间的渐变, 默认从圆心四散。(注意:不一定是正圆,要看容器本身宽高比) 径向渐变

    2. 使用关键词调整圆心 background-image: radial-gradient(at right top,red,yellow,green); 使用关键词调整渐变圆心

    3. 使用像素值调整圆心。 使用坐标值调整圆心

    4. 调整渐变形状为正圆 。调整渐变形状为正圆

    5. 调整形状的半径调整形状的半径

    6. 调整开始渐变的位置(渐变位置是沿着半径做圆周运动的弧线)。
      调整开始渐变的位置

8.3 重复渐变

  • 概念:无论线性渐变,还是径向渐变,在没有发生渐变的位置,继续进行渐变,就为重复渐变。(重复的意思是把原有结构再写一遍。)
  • 语法:
    1. 使用 repeating-linear-gradient 进行重复线性渐变,具体参数同 linear-gradient
    2. 使用 repeating-radial-gradient 进行重复径向渐变,具体参数同 radial-gradient
  • 应用:我们可以利用渐变,做出很多有意思的效果:例如:横格纸、立体球等等。

9 Web字体(暂时不写)

  • 概念:@font-face

  • 作用:指定字体的具体地址,浏览器会自动下载该字体,这样就不依赖用户电脑上的字体了。

  • 语法:

    1. 简写方式
       @font-face { 
          font-family: "情书字体"; 
          src: url('./方正手迹.ttf'); 
       }
    
    1. 兼容方式
    @font-face { 
      font-family: "atguigu"; 
      font-display: swap; 
      src: url('webfont.eot'); /* IE9 */     
      src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */   
           url('webfont.woff2') format('woff2'), 
           url('webfont.woff') format('woff'), /* chrome、firefox */
           url('webfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android*/ 
           url('webfont.svg#webfont') format('svg'); /* iOS 4.1- */ 
    }
    
  • 应用:

    • 定制字体:由于中文的字体文件很大,使用完整的字体文件不现实,通常针对某几个文字进行单独定制。 可使用阿里 Web 字体定制工具: www.iconfont.cn/webfont
    • 字体图标:
      • ①相比图片更加清晰。
      • ②灵活性高,更方便改变大小、颜色、风格等。
      • ③ 兼容性好, IE 也能支持。

10 2D变换

transform是实现2D变换的属性,对行内元素不起作用.要让行内元素进行2D变换,可以把行内元素的显示模式变成块级元素或者行内块元素。

2D变换的坐标系,如下图所示:

image.png

10.1 2D位移

2D位移

注意:参考的坐标轴原点就是元素盒子起初位置的左上角

10.2 2D缩放

2D变换之2D缩放

注意元素缩放的本质是参照元素的中心点为坐标原点,将增加的大小平均分摊给原元素的宽或高的两侧。其实,负值就是把元素盒子调换个方向,增加相应大小。

10.3 2D旋转

2D变换之旋转

注意 旋转的中心点为对称轴的交点

10.4 2D扭曲(了解)

2D变换之扭曲

10.5 2D多重变换

image.png

10.6 2D变换之变换原点

image.png

11 3D变换

11.1 开启3D空间

3D变换之开启3D空间

11.2 设置景深

3D变换之设置景深

注意: 以产生变换的元素的高度的一半为基准,进行增加以及减少。

11.3 设置透视点位置

3D变换值设置透视点位置

注意: 透视点位置设置给父元素

11.4 3D位移

3D位移

11.5 3D旋转

3D 旋转是在 2D 旋转的基础上,可以让元素沿 x 轴和 y 轴旋转,具体使用方式如下:

  1. 先给元素添加 转换属性 transform
  2. 编写 transform 的具体值, 3D 相关可选值如下:

3D旋转

11.6 3D缩放

3D缩放

11.7 多重变换

多重变换

11.8 背部可见性

背部可见性

12 过渡

过渡可以在不使用 Flash 动画,不使用 JavaScript 的情况下,让元素从一种样式,平滑过渡为另一 种样式。

12.1. 过渡属性

  • 属性:transition-property

  • 作用:定义哪个属性需要过渡,只有在该属性中定义的属性(比如宽、高、颜色等)才会以有过渡 效果

  • 常用值:

    1. none :不过渡任何属性。
    2. all :过渡所有能过渡的属性。
    3. 具体某个属性名 ,例如: widthheigth ,若有多个以逗号分隔。
⚠注意:
  1. 不是所有的属性都能过渡,值为数字,或者值能转为数字的属性,都支持过渡,否则不支持 过渡。
  2. 常见的支持过渡的属性有:颜色、长度值、百分比、 z-indexopacity2D 变换属 性、 3D 变换属性、阴影。

12.2 过渡持续时间

  • 属性:transition-duration
  • 作用:设置过渡的持续时间,即:一个状态过渡到另外一个状态耗时多久。
  • 常用值:
    1. 0 :没有任何过渡时间 —— 默认值。
    2. sms :秒或毫秒。
    3. 列表
      • 如果想让所有属性都持续一个时间,那就写一个值。
      • 如果想让每个属性持续不同的时间那就写一个时间的列表。

12.3. 过渡开始延迟时间

  • 属性:transition-delay
  • 作用:指定开始过渡的延迟时间,单位: sms

12.4 过渡出场方式

  • 属性:transition-timg-function
  • 常用值:
  1. ease : 平滑过渡 —— 默认值
  2. linear : 线性过渡
  3. ease-in : 慢 → 快
  4. ease-out : 快 → 慢
  5. ease-in-out : 慢 → 快 → 慢
  6. step-start : 等同于 steps(1, start) (直接抵达终点,不经历过渡时间)
  7. step-end : 等同于 steps(1, end)(待过渡时间完了,再抵达终点)
  8. steps( integer,?) : 接受两个参数的步进函数。第一个参数必须为正整数,指定函数的 步数。第二个参数取值可以是 startend ,指定每一步的值发生变化的时间点。第二个 参数默认值为 end 。实际上等价于 steps(移动步数,抢跑或者缓跑)
  9. cubic-bezie ( number, number, number, number): 特定的贝塞尔曲线类型。 在线制作贝赛尔曲线: cubic-bezier.com

12.5 过渡复合属性

若设置了一个时间,表示 duration ;若设置了两个时间,第一个是 duration ,第二个是 delay ;其他值没有顺序要求。具体模板,如下代码所示:

transition:1s 1s linear all; all为默认值可以省略。

13 动画

13.1 什么是动画帧?

一段动画,就是一段时间内连续播放 n 个画面。每一张画面,我们管它叫做“帧”。一定时间内连续 快速播放

13.2 什么是关键帧?

关键帧指的是,在构成一段动画的若干帧中,起到决定性作用的 2-3 帧。

image.png

13.3 动画的基本使用

  • 第1步:定义关键帧(定义动画)

    1. 简单方式定义
    /*写法一*/ 
    @keyframes 动画名 { 
    	from { 
    		/*property1:value1*/
    		/*property2:value2*/ 
    	} 
    	to { 
    		/*property1:value1*/ 
    	} 
    }
    
    1. 完整方式定义
    @keyframes 动画名 { 
    	0% { 
    		/*property1:value1*/
    	 } 
    	20% { 
    		/*property1:value1*/ 
    	} 
    	40% {
    		/*property1:value1*/
    	 } 
    	60% { 
    		/*property1:value1*/
    	 } 
    	80% { 
    		/*property1:value1*/ 
    	} 
    	100% { 
    		/*property1:value1*/ 
    	}
    }
    
  • 第2步:给元素应用动画,用到的属性如下:

    1. animation-name :给元素指定具体的动画(具体的关键帧)
    2. animation-duration :设置动画所需时间
    3. animation-delay :设置动画延迟
    .box { 
    	 /* 指定动画 */ 
    	 animation-name: testKey; 
    	 /* 设置动画所需时间 */ 
    	 animation-duration: 5s;
    	 /* 设置动画延迟 */ 
    	 animation-delay: 0.5s; 
     }
    

13.4 动画的其他属性

  • animation-timing-function ,设置动画的类型,常用值如下:

    1. ease : 平滑动画 —— 默认值
    2. linear : 线性过渡
    3. ease-in : 慢 → 快
    4. ease-out : 快 → 慢
    5. ease-in-out : 慢 → 快 → 慢
    6. step-start : 等同于 steps(1, start)
    7. step-end : 等同于 steps(1, end)
    8. steps( integer,?) : 接受两个参数的步进函数。第一个参数必须为正整数,指定 函数的步数。第二个参数取值可以是 startend ,指定每一步的值发生变化的时间 点。第二个参数默认值为 end
    9. cubic-bezie ( number, number, number, number): 特定的贝塞尔曲线类型。
  • animation-iteration-count ,指定动画的播放次数,常用值如下:

    1. number :动画循环次数
    2. infinite : 无限循环
  • animation-direction ,指定动画方向,常用值如下:

    1. normal : 正常方向 (默认)
    2. reverse : 反方向运行
    3. alternate : 动画先正常运行再反方向运行,并持续交替运行
    4. alternate-reverse : 动画先反运行再正方向运行,并持续交替运行
  • animation-fill-mode ,设置动画之外的状态,常用值如下:

    1. forwards : 设置对象状态为动画结束时的状态
    2. backwards : 设置对象状态为动画开始时的状态
  • animation-play-state ,设置动画的播放状态,常用值如下:

    1. running : 运动 (默认)
    2. paused : 暂停

13.5 动画复合属性

只设置一个时间表示 duration ,设置两个时间分别是: durationdelay ,其他属性没有数量和 顺序要求。

.inner { 
        animation: guigu 3s 0.5s linear 2 alternate-reverse forwards; 
}

备注animation-play-state 一般单独使用。

14 多列布局

多列布局效果
常用属性如下

  • 对容器设置的属性:
    • column-count :指定列数,值是数字。
    • column-width :指定列宽,值是长度。
    • columns :同时指定列宽和列数,复合属性;值没有数量和顺序要求。
    • column-gap :设置列边距,值是长度。
    • column-rule-style :设置列与列之间边框的风格,值与 border-style 一致。
    • column-rule-width :设置列与列之间边框的宽度,值是长度。
    • column-rule-color :设置列与列之间边框的颜色。
    • coumn-rule :设置列边框,复合属性。
  • 对元素设置的属性:
    • column-span 指定是否跨列;值: noneall

15 伸缩盒子模型

15.1 伸缩盒模型简介

  • 2009 年, W3C 提出了一种新的盒子模型 —— Flexible Box (伸缩盒模型,又称:弹性盒 子)。
  • 它可以轻松的控制:元素分布方式、元素对齐方式、元素视觉顺序 .......
  • 截止目前,除了在部分 IE 浏览器不支持,其他浏览器均已全部支持。
  • 伸缩盒模型的出现,逐渐演变出了一套新的布局方案 —— flex 布局。

小贴士

  1. 传统布局是指:基于传统盒状模型,主要靠: display 属性 + position 属性 + float 属性。
  2. flex 布局目前在移动端应用比较广泛,因为传统布局不能很好的呈现在移动设备上。

15.2 伸缩盒子模型组成

  • 设置方式:给元素设置 display: flex,子元素可以自动挤压或拉伸

  • 组成部分:

    • 伸缩容器
    • 伸缩项目
    • 主轴:默认在水平方向
    • 侧轴 / 交叉轴:默认在垂直方向

伸缩盒子模型组成

15.3 伸缩容器、伸缩项目

  • 伸缩容器: 开启了 flex 的元素,就是 伸缩容器。
    1. 给元素设置: display:flexdisplay:inline-flex ,该元素就变为了伸缩容器。
    2. display:inline-flex 很少使用,因为可以给多个伸缩容器的父容器,也设置为伸缩 容器。
    3. 一个元素可以同时是:伸缩容器、伸缩项目。
  • 伸缩项目:伸缩容器所有子元素自动成为了 伸缩项目。
    1. 仅伸缩容器的子元素成为了伸缩项目,孙子元素、重孙子元素等后代,不是 伸缩项目。
    2. 无论原来是哪种元素(块、行内块、行内),一旦成为了伸缩项目,全都会 “块状化”

15.4 主轴与侧轴

  • 主轴: 伸缩项目沿着主轴排列,主轴默认是水平的,默认方向是:从左到右(左边是起点,右边 是终点)。
  • 侧轴: 与主轴垂直的就是侧轴,侧轴默认是垂直的,默认方向是:从上到下(上边是起点,下边 是终点)。

15.5 主轴方向

  • 属性名: flex-direction
  • 常用值如下:
    1. row :主轴方向水平从左到右 —— 默认值

    2. row-reverse :主轴方向水平从右到左。

    3. column :主轴方向垂直从上到下。

    4. column-reverse :主轴方向垂直从下到上。

主轴方向

注意:改变了主轴的方向,侧轴方向也随之改变。

15.6 主轴换行方式

  • 属性名: flex-wrap

  • 常用值如下:

    1. nowrap :默认值,不换行。 不换行
    2. wrap :自动换行,伸缩容器空间不够,将自动换行。 自动换行
    3. wrap-reverse :反向换行。 反向换行
  • 注意:

    • 默认不换行,会自动伸缩元素大小。 默认不换行
    • 子元素如果数量比较少,换行后的元素会均匀占据剩余的空间。 换行

15.7. flex-flow

flex-flow 是一个复合属性,复合了 flex-directionflex-wrap 两个属性。 值没有顺序要求。实例代码,如下所示:

flex-flow: row wrap;

15.8. 主轴对齐方式

  • 属性名: justify-content
  • 常用值如下:
    1. flex-start :主轴起点对齐。—— 默认值
    2. flex-end :主轴终点对齐。
    3. center :居中对齐。
    4. space-between :均匀分布,两端对齐(最常用)。
    5. space-around :均匀分布,两端距离是中间距离的一半。
    6. space-evenly :均匀分布,两端距离与中间距离一致。

主轴对齐方式

15.9 侧轴对齐方式

15.9.1 一行的情况

  • 所需属性: align-items
  • 常用值如下:
    1. flex-start :侧轴的起点对齐。 flex-start

    2. flex-end:侧轴的终点对齐。 flex-end

    3. center:侧轴的中点对齐。 center

    4. baseline: 伸缩项目的第一行文字的基线对齐。 baseline

    5. stretch:如果伸缩项目未设置高度,将占满整个容器的高度。(stretch为默认值,要使它生效,必须使所有伸缩项目均没有高度,才能把每个伸缩项目拖拽得合适距离。)

stretch

15.9.2 多行的情况

  • 所需属性: align-content
  • 常用值如下:
    1. flex-start:与侧轴的起点对齐。 flex-start

    2. flex-end:与侧轴的终点对齐。 flex-end

    3. center:与侧轴的中点对齐。 center

    4. space-between:与侧轴两端对齐,中间平均分布。 space-between

    5. space-around:伸缩项目间的距离相等,比距边缘大一倍。 space-around

    6. space-evenly: 在侧轴上完全平分。 space-evenly

    7. stretch:占满整个侧轴。( stretch为默认值,要使它生效,必须使所有伸缩项目均没有高度,才能把每个伸缩项目拖拽得合适距离。) stretch

注意:该属性对单行弹性盒子模型无效

15.10 flex 实现水平垂直居中

方法一:父容器开启 flex 布局,随后使用 justify-contentalign-items 实现水平垂直居中

.outer { 
   width: 400px; 
   height: 400px; 
   background-color: #888;
   display: flex; 
   justify-content: center; 
   align-items: center; 
 } 
.inner { 
   width: 100px; 
   height: 100px; 
   background-color: orange; 
}

方法二:父容器开启 flex 布局,随后子元素 margin: auto

.outer { 
   width: 400px; 
   height: 400px; 
   background-color: #888; 
   display: flex; 
 } 
.inner { 
   width: 100px; 
   height: 100px; 
   background-color: orange; 
   margin: auto; 
 }

15.11 伸缩性

15.11.1 flex-basis

  • 概念: flex-basis 设置的是主轴方向的基准长度,若主轴为水平方向,就会覆盖宽度,让宽度失效;若主轴为垂直方向,就会覆盖高度,让高度失效。
  • 备注:主轴横向:宽度失效;主轴纵向:高度失效 。
  • 作用:浏览器根据这个属性设置的值,计算主轴上是否有多余空间,默认值 auto ,即:伸缩项目的宽或高。

15.11.2 flex-grow(伸)

  • 概念: flex-grow 定义伸缩项目的放大比例,默认为 0 ,即:纵使主轴存在剩余空间,也不拉伸 (放大)。
  • 规则:
    1. 若所有伸缩项目的 flex-grow 值都为 1 ,则:它们将等分剩余空间(如果有空间的话)。
    2. 若三个伸缩项目的 flex-grow 值分别为: 1 、 2 、 3 ,则:分别瓜分到: 1/6 、 2/6 、 3/6 的空间。

15.11.3 flex-shrink(缩)

  • 概念: flex-shrink 定义了项目的压缩比例,默认为 1 ,即:如果空间不足,该项目将会缩小。(要实现拉伸,得将flex-wrap设置nowrap;浏览区以实际内容区分,且缩的极限是内容实际大小)
  • 注意: 收缩项目的计算,略微复杂一点,我们拿一个场景举例:

例如: 三个收缩项目,宽度分别为: 200px300px200px ,它们的 flex-shrink 值分别 为: 1 、 2 、 3

若想刚好容纳下三个项目,需要总宽度为 700px ,但目前容器只有 400px ,还差 300px 所以每个人都要收缩一下才可以放下,具体收缩的值,这样计算:

  1. 计算分母: (200×1) + (300×2) + (200×3) = 1400
  2. 计算比例:
    • 项目一: (200×1) / 1400 = 比例值1
    • 项目二: (300×2) / 1400 = 比例值2
    • 项目三: (200×3) / 1400 = 比例值3
  3. 计算最终收缩大小:
    • 项目一需要收缩: 比例值1 × 300
    • 项目二需要收缩: 比例值2 × 300
    • 项目三需要收缩: 比例值3 × 300

15.12 flex复合属性

flex 是复合属性,复合了: flex-growflex-shrinkflex-basis 三个属性,默认值为 0 1 auto

  • 如果写 flex:1 1 auto ,则可简写为: flex:auto
  • 如果写 flex:1 1 0 ,则可简写为: flex:1
  • 如果写 flex:0 0 auto ,则可简写为: flex:none
  • 如果写 flex:0 1 auto ,则可简写为: flex:0 auto —— 即 flex 初始值。
  • 如何实现伸缩项目的宽度比例不同? 给每个伸缩项目分别设置flex属性,即可。 设置绳索项目宽度
  • 如何实现伸缩项目的高度比例不同? 将伸缩容器的主轴方向改为column,再给每个伸缩项目分别设置flex属性,即可。 设置绳索项目高度

15.13 项目排序

order 属性定义项目的排列顺序。数值越小,排列越靠前,默认为 0

15.14 单独对齐

通过 align-self 属性,可以单独调整某个伸缩项目的对齐方式 默认值为 auto ,表示继承父元素的 align-items 属性。

16 响应式布局

媒体查询

16.1 媒体类型

媒体类型

  1. 完整列表请参考: 媒体类型
  2. 媒体查询要覆盖某选择器的样式,要写在该选择器之后,不然由于CSS的层叠性的影响,媒体查询的样式将不生效。

16.2 媒体特性

媒体特性

完整列表请参考:媒体特性

16.3 运算符

运算符

16.4 常用阈值

在实际开发中,会将屏幕划分成几个区间,例如: 常用阈值

  • 用法一<link rel="stylesheet" media="具体的媒体查询" href="mystylesheet.css">
  • 用法二
@media screen and (max-width:768px) { 
   /*CSS-Code;*/ 
}
@media screen and (min-width:768px) and (max-width:1200px) { 
 /*CSS-Code;*/ 
}  

17 BFC

17.1 什么是BFC

  • W3C 上对 BFC 的定义:

原文:Floats, absolutely positioned elements, block containers (such as inline-blocks, table- cells, and table-captions) that are not block boxes, and block boxes with 'overflow' other than 'visible' (except when that value has been propagated to the viewport) establish new block formatting contexts for their contents.

译文:浮动、绝对定位元素、不是块盒子的块容器(如 inline-blockstable-cellstable-captions ),以及 overflow 属性的值除 visible 以外的块盒,将为其内容建立新的块格式化上下文。

  • MDN 上对 BFC 的描述:

块格式化上下文(Block Formatting Context,BFC) 是 Web 页面的可视 CSS 渲染的一部分, 是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。

  • 更加通俗的描述:
  1. BFCBlock Formatting Context (块级格式上下文),可以理解成元素的一个 “特异功能”。
  2. 该 “特异功能”,在默认的情况下处于关闭状态;当元素满足了某些条件后,该“特异功 能”被激活。
  3. 所谓激活“特异功能”,专业点说就是:该元素创建了 BFC (又称:开启了 BFC )。

17.2 开启了BFC能解决什么问题

  1. 元素开启 BFC 后,其子元素不会再产生 margin 塌陷问题。
  2. 元素开启 BFC 后,自己不会被其他浮动元素所覆盖。
  3. 元素开启 BFC 后,就算其子元素浮动,元素自身高度也不会塌陷。

17.3 如何开启BFC 根元素

  • 根元素
  • 浮动元素
  • 绝对定位、固定定位的元素
  • 行内块元素
  • 表格单元格: tabletheadtbodytfootthtdtrcaptionoverflow 的值不为 visible 的块元素
  • 伸缩项目
  • 多列容器
  • column-spanall 的元素(即使该元素没有包裹在多列容器中)
  • display 的值,设置为 flow-root