CSS基础

CSS基本语法

  • CSS选择器,通过选择器,选中页面中的指定元素

  • CSS声明块,通过声明块来为元素设置样式,声明是一个名值对结构,冒号连接,分号结尾

CSS选择器

元素选择器

  • 根据标签名选中指定的元素

id选择器

  • 可以为标有特定id的HTML选择器指定特殊的样式
    • 格式:#id{ }

类选择器

  • 根据class属性选中一组数据

    • 格式:.class属性值{ }

    • 可以为一个元素指定多个class属性,多个class之间使用空格隔开

通配选择器

  • 选中页面中的所有元素
    • 格式:*{ }

复合选择器

交集选择器

  • 同时选中符合多个条件的元素

  • 语法:选择器1选择器2选择器3……{ }

  • 注意:如果有元素选择器,必须使用元素选择器开头

选择器分组(并集选择器)

  • 同时选择多个选择器对应的元素

  • 语法:选择器1,选择器2,选择器3,……{ }

关系选择器

  • 父元素

    • 直接包含子元素的元素
  • 子元素

    • 直接被父元素包含的元素

    • 子元素选择器,选中父元素的指定子元素

      • 格式:父元素>子元素{ }
  • 祖先元素

    • 直接或间接包含后代元素的元素
  • 后代元素

    • 直接或间接被包含后代元素的元素

    • 后代元素选择器,选中元素指定的所有后代元素

      • 格式:祖先 后代
  • 兄弟元素

    • 拥有相同父元素的元素

    • 兄弟元素选择器,

      • 选择下一个兄弟元素,格式:前一个+下一个 { }

      • 选择下面所有的兄弟元素,格式:前一个~下一个{}

属性选择器

  • 根据元素的属性来选择元素

    • 选定含有指定属性的元素,格式:[属性名]

    • 选定汉语指定属性和属性值的元素,格式:[属性名=属性值]

    • 选择属性以指定值开头的元素,格式:[属性名^=属性值]

    • 选择属性以指定值结尾的元素,格式:[属性名$=属性值]

    • 选择属性值中含有指定值的元素,格式:[属性名*=属性值]

伪类选择器

  • 伪类:不存在的特殊类,用来描述元素的特殊状态

  • 格式:使用:开头

    • 所有类型的子元素进行大排序:

      • :first-child:选中第一个子元素

      • :last-child:选中最后一个子元素

      • :nth-child(n):选中第n个子元素,n的值可以是2n,even,2n+1,odd

    • 相同类型中的子元素进行小排序:

      • :first-of-type

      • last-of-type

      • nth-of-type

    • :not 否定伪类,将符合条件的元素排除在外

伪元素选择器

  • 伪元素:存在的特殊元素,用来描述元素的特殊位置

  • 格式:使用::开头

    • ::first-letter:表示第一个字母

    • ::first-line:表示第一行

    • ::selection:表示鼠标选中的文字

    • ::before:表示元素的开始位置,第一个字符之前

    • ::after:表示元素的结束位置,最后一个字符之后

    • 注意:before和after必须结合content属性来使用,通过CSS增加的内容不能通过鼠标选中

继承

  • 样式的继承,给元素设置的样式同样也会应用到他的后代元素上

  • 通过继承,我们可以将共同的样式设置到他们的祖先元素中

  • 注意:并不是所有的样式都会被继承,如背景、布局等

  • 选择器的权重

    • 样式的冲突,使用不同的选择器对同一个元素设置同类型的样式

    • 按照优先级排序

      • 内敛样式:在HTML中设置的样式 1,0,0,0

      • id选择器:0,1,0,0

      • 类和伪类选择器:0,0,1,0

      • 元素选择器:0,0,0,1

      • 通配选择器:* 0,0,0,0

      • 继承的样式:没有优先级

    • 比较优先级时,需要把所有的选择器的权重进行相加后比较他们的优先级

    • 注意:

      • 选择器的累加结果不会超过上一级选择器的优先级(不能跨越数量级)

      • 如果优先级计算的结果相同,则优先使用靠下的样式(先出现的被覆盖)

      • 可以在某一个样式后边加 !important ,获取最高的优先级,超过内敛样式的优先级,但是开发中尽量不要使用

单位

  • 像素

    • 不同屏幕的像素点大小不同,同样的200px在不同的设备下显示的效果是不同的
  • 百分比

    • 百分比可以设置属性相对于父元素(不严谨)属性的百分比

    • 设置百分比可以使子元素随父元素的改变而改变(等比例)

  • em

    • em相对于字体大小来计算的,会随字体大小的改变而改变

    • 1em = 1 font-size

  • rem

    • 相对于根元素(html)的字体大小来计算的

    • 移动端作适配

  • RGB

    • 每一种颜色的范围在0-255之间

    • 语法:RGB(红色,绿色,蓝色)

  • RGBA

    • 在RGB的基础上增加了A表示不透明度,范围在0-1之间

      • 1表示完全不透明

      • 0表示完全透明

      • .5表示半透明

  • 16进制的RGB值

    • 语法:#红色绿色蓝色

    • 颜色浓度通过00-ff描述

    • 如果颜色两位重复可以简写,如#aabbcc = #abc

  • HSL值

    • H:色相(0 - 360)

    • S:饱和度(0% - 100%)

    • L:亮度(0% - 100%)

    Layout布局

    文档流(normal flow)

  • 网页是一个多层的结构,通过CSS为每一层设置样式

  • 作为用户只能看到最顶上一层

  • 最底一层称为文档流,是网页的基础,所创建的元素默认都是在文档流中进行排列

  • 元素有两个状态:

    • 在文档流中

      • 块元素

        • 总是独占一行

        • 默认宽度是父元素的全部,默认高度是被子元素填充的高度

      • 行内元素

        • 行内元素不会独占一行,只占自身大小

        • 在页面中自左向右水平排列,如果一行中无法容纳所有的行内元素,则自动换行

        • 行内元素的默认高度和宽度被内容撑开

    • 脱离文档流

    盒子模型

  • CSS将页面中的所有元素都设置成了一个矩形的盒子

  • 将元素设置成盒子后,对页面的布局就变成了摆放盒子

  • 每一个盒子都由以下几个部分组成

    • 内容区(content):盒子中的所有子元素和文本内容都在内容区中

    • 内边距(padding):内容区和边框之间的距离

    • 边框(border):盒子的边缘,边框的大小会影响盒子的大小

    • 外边距(margin):决定盒子的位置

  • 盒子模型的属性

    • 内容区的大小由width和height设置

    • 边框需要至少设置三个样式:

      • border-width:边框的宽度,有默认值

        • 值的情况

          • 四个值:上、右、下、左

          • 三个值:上、左右、下

          • 两个值:上下、左右

          • 一个值:上下左右

        • 其他属性(一般用的不多)

        • border-xxx-width:xxx的值可以是:top、right、bottom、left

      • border-color:边框的颜色,同样可以分别指定四个边框的颜色,规则同上,存在默认值,为黑色(但是color也通过前景色修改默认值)

      • border-style:边框的样式 ,默认值是none

        • solid:表示实线

        • dotted:点状虚线

        • dashed:虚线

        • double:双线

      • border的简写属性,设置所有边框的相关属性,没有顺序关系

        • border:solid 10px yellow

        • border_xxx:10px solid orange

    • 内边距

      • 一共有四个方向的内边距

        • padding-top

        • padding-bottom

        • padding-left

        • padding-right

        • padding:同时规定四个方向的内边距属性,值的情况和border-width相同

      • 内边距的设置会影响到盒子的大小

      • 背景颜色会延伸到内边距上

    • 外边距

      • 外边距不会影响盒子可见框的大小,但是会影响盒子的位置

      • 一共有四个方向的外边距

        • margin-top:上外边距,设置正值,元素向下移动

        • margin-bottom

        • margin-left

        • margin-right:默认情况下设置该值没有用

      • 元素在页面中按照自左向右的顺序排列的,默认情况下:

        • 设置左和上会移动元素自身

        • 设置右和下会移动其他元素

      • margin可以设置负值

  • 水平方向的布局

    • 相关属性

      • margin-left

      • border-left

      • padding-left

      • width

      • padding-right

      • border-right

      • margin-right

    • 一个元素在父类中,水平布局的属性需要满足:

      • 以上七个值的和等于父元素内容的宽度(必须满足)

      • 如果七个值中没有为auto的情况,则浏览器会自动调整margin-right的值

      • 这七个值中有三个值width、margin-left、margin-right可以设置成auto,此时浏览器只会调整值为auto的那个属性。(width的默认值事auto)

      • 如果将一侧的宽度和外边距设置成auto,则宽度会放到最大,设置为auto的外边距会自动为0

      • 如果将三个值都设置成auto,宽度最大,外边距都为0

      • 如果将width设置成固定值,将两个外边距设置成auto,则盒子会居中

  • 垂直方向的布局

    • 默认情况下父元素的高度被内容撑开

    • 子元素在父元素的内容区中排列,如果子元素大小超过了父元素,称为溢出

      • 使用overflow属性来设置父类元素如何处理溢出

        • visible:默认值,子元素会溢出,在父元素的外部显示

        • hidden:将溢出的内容裁剪,溢出部分不显示

        • scroll:生成两个滚动条,通过滚动查看完整的内容

      • overflow-x

      • overflow-y

  • 外边距的折叠

    • 相邻的垂直方向的外边距会发生折叠现象

    • 兄弟元素

      • 兄弟元素间的相邻垂直外边距会取两者之间的较大值

      • 特殊情况:如果相邻的外边距一正一负,就取两者的和

      • 兄弟之间的外边距的重叠对开发是有利的

    • 父子元素

      • 父子元素之间的相邻外边距,子元素的外边距会传递给父元素(上外边距)

      • 父子外边距的折叠会影响整个页面的布局,需要进行处理

  • 行内元素的盒子模型

    • 行内元素不支持设置高度和宽度

    • 行内元素可以设置padding,但是垂直方向的padding不会影响页面的布局

    • 行内元素可以设置border,但是垂直方向的border不会影响页面的布局

    • 行内元素可以设置margin,但是垂直方向的margin不会影响页面的布局

    • display属性用来设置元素现实的类型

      • inline:将元素设置成行内元素

      • block:将元素设置成块元素

      • inline-block:将元素设置成行内块元素,既能够设置宽度和高度,但是不会独占一行

      • table:将元素设置成表格

      • none:隐藏元素

    • visibility:用来设置元素的显示状态

      • visible:默认值,元素正常显示

      • hidden:元素在页面中隐藏不显示,但是依然占据位置

  • 浏览器的默认样式

    • 通常情况下,浏览器都会为元素设置默认样式

    • 默认样式会影响页面的布局,通常情况下,我们需要去掉浏览器的默认样式(PC端的页面)
      *{
      margin:0;
      padding:0;
      ​}

    • 另一种方法,通过link引入reset.css文件,去除所有的样式

  • 盒子的尺寸

    • 默认情况下,盒子可见框的大小由内容区,内边距和边框共同决定

    • box-sizing:用来设置盒子尺寸的计算方式(设置width和height的作用)

      • 可选值:

        • content-box:默认值,宽度和高度用来设置内容区的大小

        • border-box:height和width用来设置整个盒子可见框的大小

  • 轮框阴影和圆角

    • outline:用来设置轮廓线,用法和border一样,不会影响页面的布局

    • box-shadow:用来显示元素的阴影,默认情况下,阴影出现在元素的正下方,需要设置偏移量。

      • 第一个值设置水平位置,正值向右移动,负值向左移动

      • 第二个值设置垂直偏移量,正值向下移动,负值向上移动

      • 第三个只设置阴影模糊轮廓

      • 第四个值设置阴影的颜色,通常情况下使用RGBA值

    • border-radius:设置圆角,设置圆的半径大小

      • border-top-left-radius、border-top-right-radius、border-bottom-left-radius、border-bottom-left-radius可以设置两个值,结果是不规则的圆

        • 第一个值:水平方向的半径

        • 第二个值:垂直方向的半径

      • 将元素设置成一个圆形:

        • border-radius:50%

    Float浮动

  • 通过浮动,可以使元素向其父元素的左侧或右侧移动

    • 使用float属性来设置元素的浮动

      • 可选值:

        • none:默认值,元素不浮动

        • left:元素向左浮动

        • right:元素向右浮动

      • 注意:

        • 元素设置浮动之后,水平布局的等式不需要强制成立

        • 元素设置浮动以后,会从文档流中脱离,不会占用文档流的位置,故元素下还处于文档流中的元素回自动向上

    • 浮动的特点:

      • 浮动会脱离文档流,不会再占用文档流的位置

      • 设置浮动以后,元素会向父元素的左侧或右侧移动

      • 浮动元素不会从父元素中移出

      • 如果浮动元素的上面是文档流中的块元素,则浮动元素无法上移

      • 浮动元素不会超过他上边的兄弟元素

      • 浮动元素不会覆盖文字,文字会自动环绕在浮动元素的周围,故可以使用浮动来设置文字胡那套图片的效果

  • 脱离文档流的特点

    • 块元素不再独占页面的一行

    • 块元素的默认宽高都被内容撑开

    • 行内元素脱离文档流后会变成块元素,特点和块元素一样

    • 脱离文档流之后,不需要区分行内元素和块元素

  • 简单的布局

    • 设置头部

      、设置主体
      、设置底部

    • 相同的样式使用选择器分组使用,减少重复的代码

    • 水平排列的块元素全部使用浮动float

  • 高度塌陷和BFC(浮动可能出现的问题)

    • 在浮动布局中,父元素的高度是由子元素撑开的,当子元素脱离文档流之后,父元素的高度就会丢失,影响其下方的元素布局混乱

    position定位

  • 通过定位可以将元素放到页面的任意位置

  • position的可选值:

    • static:默认值,元素是静止的,没有开启定位

    • relative:开启元素的相对定位

      • 元素开启后,若不设置偏移量,不会发生任何变化

      • 偏移量(offset):

        • 可以通过偏移量来设置元素的位置,通常情况下在水平和竖直方向上使用两个值来控制

        • top

        • bottom

        • left

        • right

      • 相对定位是参照元素在文档流中的

      • 相对定位会提高元素的层级

      • 相对定位不会使元素脱离文档流,不会改变元素的性质

    • absolute:开启元素的绝对定位

      • 不设置偏移量,偏移元素的位置不会发生变化

      • 开启绝对定位后,元素会从文档流中脱离,会改变元素的性质

      • 绝对定位会提升元素的层级

      • 绝对定位元素使相对与其包含块定位的

        • 包含块:正常情况下包含块的元素就是离他最近的开启了定位的祖先块元素。如果所有的祖先元素都没有开启定位,则绝对定位相对于根元素(初始包含块)
    • fixed:开启元素的固定定位

      • 固定定位是一种特殊的绝对定位,唯一不同的是,他相对于浏览器的视口(可视窗口)进行定位

      • 固定定位的元素不会随滚动条浮动

    • sticky:开启元素的粘滞定位

      • 和相对定位的特点基本相同,不同的是在滚动到一定的位置时可以固定位置

    背景

  • 设置页面或文本的背景颜色{background-color: yellow}

  • 将图像设置为背景{background-image:url(……)}

  • 重复背景图像{background-image:url(); background-repeat: repeat}

    • 水平方向重复背景图像:{background-image:url(); background-repeat: repeat-x}

    • 垂直方向重复背景图像:{background-image:url(); background-repeat: repeat-y}

    • 不重复背景图像:{background-image:url(); background-repeat: no-repeat}

  • 确定图像放置的位置background-position:

    • 通过%确定图像放置的位置

    • 通过像素确定图像放置的位置:单位px

    • 通过关键字确定图像放置位置:top、bottom、left、right 和 center\

  • 固定背景位置不随文档滚动background-attachment

    由于图片的长度有限,该属性可以防止图像在滚动的过程中消失

    • 该属性的默认值是scroll,通过修改成fixed可以防止图像滚动

    字体相关的样式设置

  • color:设置字体颜色

  • font-size:设置字体的大小

    • 常用单位:

      • em:相当于当前元素的一个font-size

      • rem:相当于根元素的一个font-size

  • font-family:字体族

  • 图标字体库

    • 通过类名使用使用图标字体库

    文本

  • 设置文本颜色:color:rgb(0,0,255)

  • 设置文本背景颜色:background-color:

  • 设置字符间距:letter-spacing:

    • 单位:em、px
  • 设置行间距

    • 使用百分比设置行间距:line-height:90%

    • 使用像素值设置行间距:line-height:90px

    • 使用数值设置行间距:line-height:0.5

  • 文本格式

    • 对齐文本:text-align:center\left\right

    • 修饰文本: text-decoration:

      • 上划线:overline

      • 中划线:line-through

      • 下划线:underline

      • 关闭所有装饰(超链接取消下划线):none

    • 缩进文本: text-indent: 1cm

    • 控制文本的字母:text-transform

      • uppercase 所有字母大写

      • lowercase 所有字母小写

      • capitalize 每个单词的首字母大写

    • 在元素中禁止文本折行 white-space:nowrapimg

    • 增加单词间距

  • 要使文字在父元素中居中,需要在父元素中将line-height设置成和height相同的值即可

    Emmet语法

  • 快速生成HTML结构语法

    • 生成标签可以直接输入标签名,按Tab键即可

    • 生成多个相同的标签名,加上*即可

    • 有父子关系的标签可以使用 > 号

    • 有兄弟关系的标签名使用 + 号

    • 生成有class类名或id名的的div,可以直接使用.demo或#id名

    • 生成的div类名是有顺序的,使用自增符号 $

  • 快速生成CSS样式

    • 简写形式+Enter

    XHTML规则

  • 使用恰当的文档类型声明和命名空间

  • 使用meta元素声明你的内容类型

  • 使用小写字母书写所有的元素和属性

  • 为所有的属性值加引号

  • 为所有的属性分配值

  • 关闭所有的标签

  • 使用空格和斜线关闭空标签

  • 不要在注释中写双下划线

  • 确保小于号以及和号是< 和 &

    弹性盒子

  • flex()是css 的另一种布局的手段,主要代替浮动来完成页面的布局,但是兼容性没有浮动高

  • flex()可以使元素具有弹性,让元素随页面大小的变化而变化

  • 弹性容器

    • 要使用弹性盒子,必须将一个元素设置成弹性容器

      • 使用display:flex设置为块级弹性容器

      • 使用display:inline-flex设置为行内的弹性容器

    • flex-deriction:指定容器中弹性元素的排列方式,可选值:

      • row :默认值,弹性元素在容器中水平排列(从左到右)

      • row-reverse:弹性元素在容器中水平排列(从右到左)

      • column:弹性元素纵向排列(自上向下)

      • column-reverse:弹性元素纵向排列(自下向上)

    • flex-wrap:设置弹性元素在弹性容器中是否自动换行

      • 可选值

        • nowrap:默认值,元素不会自动换行

        • wrap:元素会沿着侧轴方向自动换行

        • wrap-reverse:元素沿着侧轴的反方向换行

    • flex-flow:wrap和direction的简写属性

    • justify-content:如何分配主轴上的空白空间(主轴上的元素如何排列 )

      • 可选值:

        • flex-start:元素沿着主轴起边排列

        • flex-end:元素沿着主轴终边排列

        • center:元素居中排列

        • space-around:空白分布到各个元素的两边

        • space-evenly:空白分布到各个元素的单侧

        • space-between:空白均匀分布到元素的中间

    • align-items:元素在侧轴上如何对齐

      • 可选值:

        • stretch:将元素的长度设置成相同的值(侧轴上每行的元素设置成相同的高度)

        • flex-start:元素不会拉伸,沿着侧轴的起点开始对齐

        • flex-end:元素不会拉伸,沿着侧轴的终点开始对齐

        • center:元素居中对齐

        • base-line:基线对齐,文字中心在同一个高度上

    • align-content:如何分配侧轴上的空白空间,类比justify-content的可选值

    • align-self:给某个元素单独设置align-items,能够覆盖之前的设置

    • 主轴:弹性元素的排列方向

    • 侧轴:与主轴垂直方向的称为侧轴

  • 弹性元素

    • 弹性容器的子元素使弹性元素(弹性项)

    • 一个元素既可以是弹性容器,也可以是弹性元素

    • 弹性元素的属性

      • flex-grow:指定弹性元素的伸展的系数

        • 当父元素由多余的空间时,子元素如何伸展

        • 父元素的空间,会按照flex-grow值的比例进行分配

        • 默认值是0

      • flex-shrink:指定元素的收缩系数

        • 当元素中的空间不足以容纳所有的子元素时,如何对子元素进行收缩

        • 所见多少是根据缩减系数和元素大小来确定的

      • flex-basis:设置元素的基本长度,指定元素在周周上的基础长度

        • 如果主轴是横向的,那么指定的就是元素的宽度

        • 如果主轴是纵向的,那么指定的就是元素的长度

      • flex 作为简写,可以设置弹性元素的三个样式

        • 顺序:增长 缩减 基础
      • order:决定弹性元素的排列顺序

    移动端

  • 通常情况下,移动端的网页视口都会设置成980像素(css像素)

  • 在编写移动端页面时,需要设置视口大小调整像素的比例

    • 1css像素 对应 2个物理像素

    • 1css像素 对应 3个物理像素

  • 通过meta标签来设置视口大小

    • 完美视口 width=device-width