css

一.CSS概述

1.1.什么是css

Cascading Style Sheets

层叠样式表,级联样式表,简称样式表

1.2.作用

设置HTML网页中的元素样式

1.3.CSS和HTML的关系

HTML:负责网页结构的搭建,内容的展示

CSS:负责网页的修饰

1.4.CSS与HTML的属性使用原则

W3C建议我们尽量使用css的方式来取代html的属性

css样式:

  1.样式代码高度的重用

  2.提高可维护性

二.CSS的语法规范

2.1.使用CSS的方法

1.内联样式

将css的样式定义在HTML标签的style属性中

  <any style="样式声明; 样式声明"></any>

样式声明由 样式属性:值 组成

多个样式声明之间用分号分隔

内联样式使用的非常少(禁止使用)

内联样式不能重用

内联样式优先级最高

项目中一般很少使用内联样式,只在学习和测试的时候使用

      常用的css属性

color:设置文本的颜色

取值:合法颜色值(颜色的英文,#a~f*3   #abc  #aaf #afa # faa #aff #faf)

font-size:设置字体的大小

background:设置背景颜色

2.内部样式

在<head></head>标签中,添加<style><style>标签,在其内部定义样式规则

  <style>

    样式规则

  </style>

样式规则:由选择器和样式声明组成

  选择器{

   样式声明;

   样式声明;

  }

span{

  color:#afa;

  background:#faf;

}

通过CSS的选择器来选中元素并为其设置各种样式

可以同时为多个标签设置样式,并且修改时只需要修改一处即可全部应用。

内部样式在本页面可以 重用,但是其他页面不能重用

项目中使用不多,但是学习和测试中大量使用

3.外部样式

独立创建一个新文件*.css。

可以在任何网页中引用

  <head>

   <link rel="stylesheet" href="css文件的url">

  </head>

外部样式是项目中必须使用的样式写法。

 

将样式编写到外部的CSS文件中,可以使用到浏览器的缓存机制,

从而加快网页的加载速度,提高用户的体验。

2.2 CSS样式的特性

1.继承性

大部分的css效果是可以直接被子元素继承的

必须是层级结构

后代标签可以继承祖先标签的某些属性,优先继承离标签最近的父辈元素的属性,继承的权重是0. 

2.层叠性

可以为一个元素定义多个样式规则

规则中属性不冲突(不重复),可以同时作用到当前元素上

3.优先级

如果样式声明冲突时,按照样式规则优先级去应用

默认的优先级,从高到低:

1.内联样式(行内样式)优先级最高

2.内部样式、外部样式,遵循就近原则

3.浏览器默认样式最低

4.调整优先级

!important规则

放在属性值之后,与值之间用空格隔开

作用是调整优先级,让没有important属性不能覆盖他


三.基础选择器(重点*******)

3.1.选择器的作用

规范了页面中哪些元素能够使用定义好的样式

为了匹配元素

3.2.基础选择器详解

1.通用选择器 

*{样式声明}

效率极低,尽量少用

*{margin:0;padding:0}外边距,内边距清0

2.元素选择器(标签选择器)

设置页面中同类元素的默认样式

标签名称{样式声明}

p{color:red}

3.类选择器

定义页面上某类元素的公共样式,谁想用我,就引用我的class名

元素通过class属性来引用该样式

.类名{样式的声明}

<any class="类名">

注意: "."不能省略

     类名不能以数字开头

     类名不能包含特殊字符(可以包含 - _)

类选择器的特殊用法

1.多类选择器

  让一个元素引用多个类选择器

  <p class="font_blue font_size24">烤生蚝</p>

2.分类选择器

  将元素选择器和类型选择器联合使用

 元素选择器.类选择器{}

 可以匹配到,指向了某个类的,具体某个元素

 <span class="font_blue">水煮牛肉</span>

 span.font_blue{background:#faf;}

 作用

 1.指向更精确

 2.优先级变高

 

4.id选择器

 设置指定元素的样式,专属定制

 为元素设置id值,使用#id值作为选择器,编写专属样式

#id属性值{样式声明}

5.群组(并集)选择器

 将多个选择器放在一起,一块定义某公共样式

 选择器1,选择器2,选择器3......{公共样式声明}

 #content,p.mycolor,span{color:red}

6.后代选择器

  通过元素的后代关系匹配元素

  后代:一层或者多层的嵌套关系

  选中指定元素内的指定后代元素

  语法:选择器1 选择器2 选择器3{样式声明}

7.子代选择器

  选中指定父元素的指定子元素

  通过元素的子代关系匹配元素(一层嵌套)

  选择器1>选择器2>选择器3{样式声明}

 

补充:1、交集选择器

         作用:选中同时符合多个条件的元素

         语法:选择器1选择器2选择器3选择器n{}

         注意点:

             交集选择器中如果有元素选择器,必须使用元素选择器开头

 

  2、兄弟选择器

   选择下一个兄弟

        语法:前一个 + 下一个

        选择下边所有的兄弟

        语法:兄 ~ 弟

 

  3、属性选择器

       [属性名] 选择含有指定属性的元素

       [属性名=属性值] 选择含有指定属性和属性值的元素

       [属性名^=属性值] 选择属性值以指定字符开头的元素

       [属性名$=属性值] 选择属性值以指定字符结尾的元素

       [属性名*=属性值] 选择属性值中含有某字符的元素的元素

 

 

8.伪类选择器

  伪类(不存在的类,特殊的类)

    伪类用来描述一个元素的特殊状态

    比如:第一个子元素、被点击的元素、鼠标移入的元素...

    伪类一般情况下都是使用:开头

        :first-child 第一个子元素

        :last-child 最后一个子元素

        :nth-child(n) 选中第n个子元素  

            特殊值:

                n 第n个 n的范围0到正无穷

                2n 或 even 表示选中偶数位的元素

                2n+1 或 odd 表示选中奇数位的元素

 

      - 以上这些伪类都是根据所有的子元素进行排序

 

     :first-of-type

     :last-of-type

     :nth-of-type()

     这几个伪类的功能和上述的类似,不通点是他们是在同类型元素中进行排序

 

      :not() 否定伪类

      将符合条件的元素从选择器中去除

1.链接伪类

   :link 元素尚未访问时的状态样式

 :visited 元素访问过后的状态样式

 

注意:由于隐私的原因,所以visited这个伪类只能修改链接的颜色

 

    #a1:link{color:red;}

    #a1:visited{color:yellow;}

2.动态伪类

    :acitve 匹配元素被激活时的状态

    #btn:active{color:purple;}

    :focus 匹配元素获取焦点时的状态

    #txt:focus{background:#aff;}

    :hover 鼠标悬停在元素时的状态

.img:hover{width:100px;}

 

 

补充: 伪元素,表示页面中一些特殊的并不真实的存在的元素(特殊的位置)

                伪元素使用 :: 开头

 

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

                ::first-line 表示第一行

                ::selection 表示选中的内容

                ::before 元素的开始

                ::after 元素的最后

                    - before 和 after 必须结合content属性来使用

                       div::before{

                           content: ‘『‘;

                           color:red;

                        }

 

 

3.3选择器的权值

 

样式的冲突

    当我们通过不同的选择器,选中相同的元素,并且为相同的样式设置不同的值时,此时就发生了样式的冲突。

    发生样式冲突时,应用哪个样式由选择器的权重(优先级)决定

权值:标识当前选择器的重要程度,权值越大优先级越高

!important   >1000

内联样式     1000

id选择器     100

类和伪类选择器  10

元素选择器     1

*选择器        0

继承的样式无权值  无

 

权重大小:
        标签选择器<类选择器<id选择器<行内样式<!important

总结:

1.当一个选择器中含有多个选择器时,需要将所有的选择器的权值进行相加。

然后再进行比较,权值高的优先显示

注意:选择器的权值计算不会超过其最大的数量级

(1W个#id也不会到1000)

2.群组选择器的权值,单独计算,不会相加

3.样式后面加!important 该样式会获取最高优先级

  内联样式不能添加!important

4.如果权值相同,使用就近原则

四.尺寸和边框

4.1.尺寸属性

改变元素的宽高

width

最大宽度 max-width

最小宽度 min-width

height

最大高度 max-height

最小高度 min-height

附加知识点:单位

1.尺寸单位

  px 像素

  in 英寸   1in=2.54cm

  pt 磅值,多数用它表示字体大小  1pt=1/72in

  cm  mm 厘米,毫米

  em 相对单位,相对父元素的倍数

  rem 相对单位,相对根元素的倍数(html)

  %   相对单位,相对父元素的百分之多少

 

补充: 长度单位:

          像素

             屏幕(显示器)实际上是由一个一个的小点点构成的

             不同屏幕的像素形状大小是不同的,像素形状越小的屏幕显示的效果越清晰

             所以同样的200px在不同的设备下显示效果不一样

 

           百分比

               也可以将属性值设置为相对于其父元素属性的百分比

               设置百分比可以使子元素跟随父元素的改变而改变

 

             em

                em是相对于其父元素的字体大小来计算的

                1em = 1font-size

                 em会根据字体大小的改变而改变

 

              rem

                 rem是相对于根元素的字体大小来计算

2颜色单位

  1.颜色的英文单词  red blue yellow black orange pink purple

  2.#rrggbb  RGB光学三元色  6个16进制  #006699

  3.#aabbcc--->#abc  #f00  #0f0  #00f  #fff   #000  #333

  4.rgb(r,g,b); r:0~255  g:0~255  b:0~255

    rgb(255,255,255);白色

  5.rgb(r%,g%,b%) 此变现形式使用极少

  6.rgba(r,g,b,alpha)  alpha透明度

 

补充: 颜色单位:

         在CSS中可以直接使用颜色名来设置各种颜色

         比如:red、orange、yellow、blue、green ... ...

         但是在css中直接使用颜色名是非常的不方便

 

       RGB值:

          RGB通过三种颜色的不同浓度来调配出不同的颜色

          R red,G green ,B blue

           每一种颜色的范围在 0 - 255 (0% - 100%) 之间

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

 

        RGBA:

          就是在rgb的基础上增加了一个a表示不透明度

                        - 需要四个值,前三个和rgb一样,第四个表示不透明度

                            1表示完全不透明   0表示完全透明  .5半透明

 

        十六进制的RGB值:

           语法:#红色绿色蓝色

           颜色浓度通过 00-ff

           如果颜色两位两位重复可以进行简写  

           #aabbcc --> #abc

                    

         HSL值 HSLA值

            H 色相(0 - 360)

            S 饱和度,颜色的浓度 0% - 100%

            L 亮度,颜色的亮度 0% - 100%

 

 

补充:样式的继承,我们为一个元素设置的样式同时也会应用到它的后代元素上

            继承是发生在祖先和后代之间的

 

            继承的设计是为了方便我们的开发,

                利用继承我们可以将一些通用的样式统一设置到共同的祖先元素上,

                    这样只需设置一次即可让所有的元素都具有该样式

 

            注意:并不是所有的样式都会被继承:

                比如 背景相关的,布局相关等的这些样式都不会被继承。

4.2.溢出处理

overflow  overflow-x  overflow-y

当内容多,元素区域小的时候,就会产生溢出效果

默认是纵向溢出

取值:

1.visible 可见的,默认值,溢出可见

2.hidden 隐藏的,溢出的内容不可见

3.scroll 显示滚动条,不管是否溢出,都添加横向和纵向滚动条,(不溢出不可用)

4.auto 溢出的部分,显示滚动条,并可用

4.3.边框属性

border:width style color;

width:边框的宽度,以px为单位的数字

style:边框的样式

  取值  solid实线

        dotted虚线(点点)

        dashed虚线(短线)

        double 双实线

color:边框的颜色,合法的颜色值 (transparent 透明色)

这种写法,同时设置4个边框,是一种简写方式

取消边框 border:none/0;

 

单边设置

border-top/right/bottom/left

单属性设置

border-color:#f00;

border-style:dotted;

border-width:10px;

单边单属性

border-方向-属性(共12个)

border-top-style:double;

border-top-color:#44f;

4.4边框的倒角,阴影

 

 

边框的倒角(圆角)

将直角倒成圆角

border-radius:

取值  以px为单位的数字

      %   设置圆形(50%)

单角设置

使用两条边去确认一个角,先写上下后写左右

border-top-left-radius:左上

border-top-right-radius:右上

border-bottom-left-radius:左下

border-bottom-right-radius:右下

边框阴影

 

box-shadow 用来设置元素的阴影效果,阴影不会影响页面布局

     第一个值 水平偏移量 设置阴影的水平位置 正值向右移动 负值向左移动

     第二个值 垂直偏移量 设置阴影的水平位置 正值向下移动 负值向上移动

     第三个值 阴影的模糊半径

     第四个值 阴影的颜色

box-shadow: h-shadow v-shadow blur spread color

h-shadow 水平方向阴影偏移,必须值

v-shadow 垂直方向偏移量,必须值

以下可选参数

blur:阴影的模糊距离,可选值,越大模糊距离越明显

spread:阴影的尺寸,指定要在基础阴影上扩出的大小

color:阴影颜色

inset:把默认的外部阴影设置为内部阴影


4.5.轮廓

轮廓指的是边框的边框,绘制与边框外边的线条

outline:width style color;

 

outline 用来设置元素的轮廓线,用法和border一模一样

轮廓和边框不同的点,就是轮廓不会影响到可见框的大小  


五.框模型(盒子模型)

5.1组成成分

盒模型、盒子模型、框模型(box model)

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

    将元素设置为矩形的盒子后,对页面的布局就变成将不同的盒子摆放到不同的位置

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

    内容区(content)

    内边距(padding)

    边框(border)

    外边距(margin)

5.2 内容区(content)

    内容区(content),元素中的所有的子元素和文本内容都在内容区中排列

    内容区的大小由width 和 height两个属性来设置

         width 设置内容区的宽度

         height 设置内容区的高度  

5.3边框(border)

    边框(border),边框属于盒子边缘,边框里边属于盒子内部,出了边框都是盒子的外部

          边框的大小会影响到整个盒子的大小

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

           边框的宽度 border-width

           边框的颜色 border-color

           边框的样式 border-style

 

  border-width可以用来指定四个方向的边框的宽度

       四个值:上 右 下 左

       三个值:上 左右 下

       两个值:上下 左右

       一个值:上下左右

                    

     除了border-width还有一组 border-xxx-width

         xxx可以是 top right bottom left

         用来单独指定某一个边的宽度

 

  border-color用来指定边框的颜色,同样可以分别指定四个边的边框

       规则和border-width一样

     border-color也可以省略不写,如果省略了则自动使用元素的color的颜色值

 

  border-style 指定边框的样式

     solid 表示实线

     dotted 点状虚线

     dashed 虚线

     double 双线

 

  border-style的默认值是none 表示没有边框

 

   border简写属性,通过该属性可以同时设置边框所有的相关样式,并且没有顺序要求

 

      除了border以外还有四个 border-xxx

        border-top

        border-right

        border-bottom

        border-left

  页面元素皆为框(盒子)

内边距:元素边框与内容之间的空白间距

5.4.外边距

外边距:围绕在元素边框外的空白区域(元素与元素之间的距离)

margin 定义4个方向外边距

margin-top/right/bottom/left 定义某一个方向的外边距

取值

1.以px为单位的数字

  为正数  top,元素往下移动

          left, 元素往右移动

  为负数  top,元素往上移动

          left,元素往左移动

 

元素在页面中是按照自左向右的顺序排列的,

    所以默认情况下如果我们设置的左和上外边距则会移动元素自身

而设置下和右外边距会移动其他元素

margin-right

      默认情况下设置margin-right本元素不会产生任何效果

margin-bottom

      下外边距,设置一个正值,其下边的元素会向下移动

 

2.取值为%,相对于父元素尺寸的百分比

3.auto,自动计算块级元素的外边距,控制块级元素在水平方向居中对齐

margin的效果,改变元素在页面上的位置,多用于微调

 

 元素的水平方向的布局:

    元素在其父元素中水平方向的位置由以下几个属性共同决定“

         margin-left

         border-left

         padding-left

         width

         padding-right

         border-right

         margin-right

 

一个元素在其父元素中,水平布局必须要满足以下的等式

margin-left+border-left+padding-left+width+padding-right+border-right+margin-right = 其父元素内容区的宽度 (必须满足)

以上等式必须满足,如果相加结果使等式不成立,则称为过度约束,则等式会自动调整

   调整的情况:

      如果这七个值中没有为 auto 的情况,则浏览器会自动调整margin-right值以使等式满足

 

这七个值中有三个值可以设置为auto

   width

   margin=-left

   maring-right

      如果某个值为auto,则会自动调整为auto的那个值以使等式成立

      0 + 0 + 0 + auto + 0 + 0 + 0 = 800  auto = 800

      0 + 0 + 0 + auto + 0 + 0 + 200 = 800  auto = 600

      200 + 0 + 0 + auto + 0 + 0 + 200 = 800  auto = 400

 

如果将一个宽度和一个外边距设置为auto,则宽度会调整到最大,设置为auto的外边距会自动为0

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

如果将两个外边距设置为auto,宽度固定值,则会将外边距设置为相同的值

  所以我们经常利用这个特点来使一个元素在其父元素中水平居中

     示例:

        width:xxxpx;

        margin:0 auto;

 

垂直方向布局:

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

  子元素是在父元素的内容区中排列的,

     如果子元素的大小超过了父元素,则子元素会从父元素中溢出

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

 

     可选值:

       visible,默认值 子元素会从父元素中溢出,在父元素外部的位置显示

       hidden 溢出内容将会被裁剪不会显示

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

       auto 根据需要生成滚动条

 

overflow-x:

overflow-y:

简写方式

margin:value; 设置4个方向外边距

margin:v1 v2;     v1:上下外边距   v2:左右外边距

            margin:0 auto; 控制块级元素在水平方向居中对齐

margin:v1 v2 v3;   v1:上外边距   v2:左右外边距   v3:下外边距

margin:v1 v2 v3 v4; 上 右 下 左(顺时针) 


      3.自带外边距的元素有哪些

h1~h6,p,body,ol,ul,dl,pre

通常要清除这些元素的自带外边距*{margin:0;padding:0}

      4.外边距的特殊效果

1.垂直外边距的重叠(折叠)

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

   兄弟元素

      兄弟元素间的相邻垂直外边距会取两者之间的较大值(两者都是正值)

      特殊情况:

         如果相邻的外边距一正一负,则取两者的和

         如果相邻的外边距都是负值,则取两者中绝对值较大的

 

兄弟元素之间的外边距的重叠,对于开发是有利的,所以我们不需要进行处理

2.行内元素以及行内块元素的外边距

  行内元素垂直外边距无效(img除外),水平外边距相遇两个值会相加

  行内块,设置垂直外边距,整行元素跟着发生变化

 

行内元素的盒模型

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

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

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

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

 

 display 用来设置元素显示的类型

  可选值:

    inline 将元素设置为行内元素

    block 将元素设置为块元素

    inline-block 将元素设置为行内块元素

      行内块,既可以设置宽度和高度又不会独占一行

    table 将元素设置为一个表格

    none 元素不在页面中显示

 

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

  可选值:

    visible 默认值,元素在页面中正常显示

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


      3.外边距溢出

在特殊条件下,给子元素设置的上外边距,会作用到父元素上

特殊条件:1父元素没有上边框,2只有第一个子元素设置上边距时

解决方案:

1.为父元素增加上边框;弊端:元素实际占地高度变大

2.为父元素添加上内边距;弊端:元素实际占地高度变大

3.在父元素的第一个子元素位置添加一个空的<table></table>

5.5内边距

内边距:元素边框与内容之间的空白间距

不会影响其他元素,但是会改变元素自己的占地尺寸,会变大

 

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

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

padding:value;设置4个方向的内边距

padding-top/right/bottom/left 定义单方向的内边距

取值

以px为单位的数字

%

简写方式

padding:value; 设置4个方向的内边距

padding:v1 v2;  v1:上下   v2:左右   padding没有auto

padding:v1 v2 v3:  v1:上  v2:左右  v3:下

padding:v1 v2 v3 v4;上 右  下  左

5.6  box-sizing属性

设置盒子模型的计算方式

默认计算方式:

元素实际占地宽度=左外边距+左边框+左内边距+内容区域宽度+右内边距+右边框+右外边距

元素实际占地高度=上外边距+上边框+上内边距+内容区域高度+下内边距+下边框+下外边距

box-sizing取值

content-box 默认值,会采用默认计算方式

border-box 元素的尺寸(定义宽高),包含border,padding和内容区域宽高,宽度和高度用来设置整个盒子可见框的大小

元素实际占地宽度=左右外边距+设置的宽度width

元素实际占地高度=上下外边距+设置的高度height

5.7 块级元素,行内元素,行内块

块级元素:独立成行,可以设置宽高,margin上下有效

行内元素:与其他行内元素和行内块,共用一行

          宽高无效,margin上下无效

行内块:与其他行内元素和行内块,共用一行

        可以设置宽高,margin上下有效

        一行行内元素,其中一个设置了上下margin,整行都跟着移动

 

 

补充:文档流(normal flow)

         网页是一个多层的结构,一层摞着一层

         通过CSS可以分别为每一层来设置样式

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

         这些层中,最底下的一层称为文档流,文档流是网页的基础

         我们所创建的元素默认都是在文档流中进行排列

         对于我们来元素主要有两个状态

            在文档流中

            不在文档流中(脱离文档流)

 

          元素在文档流中有什么特点:

             块元素

                块元素会在页面中独占一行(自上向下垂直排列)

                默认宽度是父元素的全部(会把父元素撑满)

                默认高度是被内容撑开(子元素)

 

              行内元素

                 行内元素不会独占页面的一行,只占自身的大小

                 行内元素在页面中自左向右水平排列,如果一行之中不能容纳下所有的行内元素

                 则元素会换到第二行继续自左向右排列(书写习惯一致)

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

 

六.默认样式:

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

    默认样式的存在会影响到页面的布局,

通常情况下编写网页时必须要去除浏览器的默认样式(PC端的页面)

 

*{

            margin: 0;

            padding: 0;

        }

 

要让一个文字在父元素中垂直居中,只需将父元素的line-height设置为一个和父元素height一样的值

height:25px;

line-height:25px;

 

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

 

 

完美方案:重置样式表:专门用来对浏览器的样式进行重置的

            reset.css 直接去除了浏览器的默认样式

            normalize.css 对默认样式进行了统一

七.背景

7.1.背景颜色

background-color:

取值

合法的颜色值

transparent;透明

注意背景色的填充默认从边框位置处开始

7.2.背景图片

background-image:url(资源路径)

可以同时设置背景图片和背景颜色,这样背景颜色将会成为图片的背景色

如果背景的图片小于元素,则背景图片会自动在元素中平铺将元素铺满

如果背景的图片大于元素,将会一个部分背景无法完全显示

如果背景图片和元素一样大,则会直接正常显示

7.3.背景图片的平铺

background-repeat:

取值

repeat 默认值 , 背景会沿着x轴 y轴双方向重复平铺

repeat-x 水平方向平铺

repeat-y 垂直方向平铺

no-repeat 背景图片不重复不平铺只显示一张

7.4.背景图的定位

background-position:x  y

取值

1.以px为单位的数字

  指的是图片在水平和垂直方向的偏移量

2.x% y%

 50% 50%中间

 0% 0% 左上

 100% 100% 右下

3.关键字

  xleft/center/right

  y: top/center/bottom

 

 background-position 用来设置背景图片的位置

 设置方式:

   通过 top left right bottom center 几个表示方位的词来设置背景图片的位置

    使用方位词时必须要同时指定两个值,如果只写一个则第二个默认就是center

通过偏移量来指定背景图片的位置:

    水平方向的偏移量 垂直方向变量

7.5.背景图的尺寸

background-size: width  height

取值

1.以px为单位的数字

2.%

3.cover填满容器图片的宽高比不变铺满整个容器的宽高图片溢出的部分会被裁减掉

将背景图同比缩放,直到背景图完全覆盖容器不留一丝空白图片溢出的部分会被裁减掉

图片可能会显示不完整,但是容器完全被背景图充满

4. contain 图片自身宽高比不变,但是,要缩放到图片能够完全展示出来,所以容器会有空白区域

 

background-size 设置背景图片的大小

     第一个值表示宽度

     第二个值表示高度

         如果只写一个,则第二个值默认是 auto

 

     cover 图片的比例不变,将元素铺满

     contain 图片比例不变,将图片在元素中完整显示

7.6.背景图的固定

background-attachment:

将背景图固定在网页某个位置一直在可视的区域中显示不会随着网页滚动条改变位置

取值:1.scroll 默认值会随着网页滚动条改变位置

      2.fixed 固定不会随着网页滚动条改变位置

7.7.背景的简写方式

在一个属性中指定背景多个值

属性background

取值color url repeat attachment position

background:#faa url(‘08.png‘) no-repeat center center;

 

 注意:

   background-size必须写在background-position的后边,并且使用/隔开

        background-position/background-size

   background-origin background-clip 两个样式 ,orgin要在clip的前边

7.8 补充

1、设置背景的范围

         background-clip

             可选值:

                border-box 默认值,背景会出现在边框的下边

                padding-box 背景不会出现在边框,只出现在内容区和内边距

                content-box 背景只会出现在内容区

 

        background-origin 背景图片的偏移量计算的原点

            padding-box 默认值,background-position从内边距处开始计算

            content-box 背景图片的偏移量从内容区处计算

            border-box 背景图片的变量从边框处开始计算

 

2、图片闪烁问题

     图片属于网页中的外部资源,外部资源都需要浏览器单独发送请求加载,

浏览器加载外部资源时是按需加载的,用则加载,不用则不加载。

比如a:link会首先加载,而hover和active会在指定状态触发时才会加载,出现图片闪烁现象。

 

解决图片闪烁的问题:

可以将多个小图片统一保存到一个大图片中,然后通过调整background-position来显示的图片

这样图片会同时加载到网页中 就可以有效的避免出现闪烁的问题

    这个技术在网页中应用十分广泛,被称为CSS-Sprite,这种图我们称为雪碧图

 

 

雪碧图的使用步骤:

  1.先在雪碧图中确定要使用的图标

  2.测量图标的大小

  3.根据测量结果设置一个元素的宽高

  4.将雪碧图设置为元素的背景图片

  5.设置一个偏移量以显示正确的图片

 

雪碧图的特点:

   一次性将多个图片加载进页面,降低请求的次数,加快访问速度,提升用户的体验,只用于背景图

 

八.渐变gradient

8.1.什么是渐变

通过渐变可以设置一些复杂的背景颜色,可以实现从一个颜色向其他颜色过渡的效果

!!渐变是图片,需要通过background-image来设置

 

  线性渐变,颜色沿着一条直线发生变化

    linear-gradient()

linear-gradient(red,yellow) 红色在开头,黄色在结尾,中间是过渡区域

    线性渐变的开头,我们可以指定一个渐变的方向

        to left    to right    to bottom  to top     xxx deg表示度数

        linear-gradient(to top,red,yellow)

渐变可以同时指定多个颜色,多个颜色默认情况下平均分布,

background-image: linear-gradient(red,yellow,#bfa,orange);

也可以手动指定渐变的分布情况

       background-image: linear-gradient(red 50px//开始位置,yellow 100px, green 120px, orange 200px);

    repeating-linear-gradient() 可以平铺的线性渐变

 

 

多种颜色平缓变化的一种显示效果

8.2.渐变的主要因素---色标

色标一种颜色以及他出现的位置

一个渐变至少有两个色标

8.3.渐变的分类

1.线性渐变以直线的方向来填充渐变色

2.径向渐变以圆形的方式实现渐变色

3.重复渐变,将线性渐变,或径向渐变 重复几次

1..线性渐变

background-image

取值

新版本linear-gradient(方向色标1,色标2........)

色标的写法颜色的合法值 位置的百分比

方向取值to top/right/bottom/left

          角度  按顺时针计算  

                 0deg   to top

                 90deg  to right

                 180deg to bottom

                 270deg  to left

旧版本写法-浏览器内核-linear-gradient(方向,色标1,色标2....)

           方向  top/right/bottom/left

2.径向渐变

background-image:radial-gradient(半径 at 圆心,色标1,色标2......);

半径以px为单位的数字

圆心x y以px为单位的具体数值

      x% y% 元素的宽高占比

     关键字  x:left/center/right

             y:top/center/bottom

 

默认情况下径向渐变圆心的形状根据元素的形状来计算的

    正方形 --> 圆形

    长方形 --> 椭圆形

我们也可以手动指定径向渐变圆心形状

     circle

     ellipse

也可以指定渐变的位置

   radial-gradient(大小(形状) at 圆心, 颜色 位置 ,颜色 位置 ,颜色 位置)

          大小(形状):circle 圆形    ellipse 椭圆   

圆心1、top right left center bottom

                 2、x y以px为单位的具体数值

 

3.重复线性渐变

repeating-linear-gradient(to right,#faa 0px,#ffa 50px);

注意在重复渐变中色标的位置要给绝对值数字不要用%

4.重复的径向渐变

repeating-radial-gradient(50px at center center,#060606 0px,#af8bd8 20px,#292727 35px);

九.浏览器兼容性

各个浏览器新版本都渐变

对于不支持的旧版本可以添加浏览器内核前缀的方式做兼容让浏览器支持

chrome&safari: -webkit-

firefox:-moz-

ie:-ms-

opera: -o-  

background: -webkit-linear-gradient(left, #006699 0%,#f00 25%, #990066 50%,#ff0 75%,#996600 100%);

十.文本格式化(重点******)

10.1.字体属性

1.指定字体的类型(建议浏览器使用该字体)10

  font-family:"类型1","类型2"....

可以同时指定多个字体,多个字体间使用,隔开

字体生效时优先使用第一个,第一个无法使用则使用第二个 以此类推

 

补充:font-face可以将服务器中的字体直接提供给用户去使用

       @font-face{

            /*指定字体的名字*/

            font-family:‘myfont‘;

            /*服务器中字体的路径*/

            src:url(‘./font/ZCOOLKuaiLe-Regular.ttf‘) format("truetype");

          }

          font-family:myfont;

    缺点:1.加载速度  2.版权  3.字体格式

2.字体大小

  font-size

  以px、pt为单位的数字

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

  rem 相对于根元素的一个font-size

3.字体加粗

  font-weight:

  bold/normal/lighter/bolder

  无单位的数字  100-1000整百数 常用400-900

4.字体样式

  font-style

  Normal正常的

  Italic斜体的

5.小型大写字母

font-variant:

normal

small-caps;

6.字体属性的简写方式

font:style variant weight size family

font:italic small-caps bold 30px "黑体";

简写方式最少要有size和family.

font: 字体大小/行高 字体族

行高 可以省略不写 如果不写使用默认值


10.2
.文本格式化

1.文本颜色

  color:合法的颜色值

2.文本的水平对齐方式

text-align

left/center/right/justify(两端对齐)

文本的垂直对齐方式

vertical-align 设置元素垂直对齐的方式让子元素与父元素进行对齐方式

    可选值:

        baseline 默认值 基线对齐

        top 顶部对齐

        bottom 底部对齐

        middle 居中对齐

图片与文本一致,默认是基线对齐。

3.行高

  定义一行数据的高度

  如果行高大于字体本身的大小该行文本在行高内成垂直居中的显示效果

  line-height:

  以px为单位的数字一般与容器的高相同

  无单位数字line-height:2;  是字体大小的倍数

行高(line height)

行高定义一行数据的高度

字体框

    字体框就是字体存在的格子,设置font-size实际上就是在设置字体框的高度

 行高会在字体框的上下平均分配

 

可以通过line-height来设置行高

  行高可以直接指定一个大小(px em)

  也可以直接为行高设置一个整数

       如果是一个整数的话,行高将会是字体的指定的倍数

       行高经常还用来设置文字的行间距

           行间距 = 行高 - 字体大小

可以将行高设置为和元素高度一样的值,使单行文字在一个元素中垂直居中

Line-height对浮动元素不起作用

4.线条的修饰

text-decoration

1.none 没有线条,去掉a标签的下划线

2.overline 上划线

3.underline 下划线

4.line-through 删除线

5.首行缩进

text-indent:

以px为单位的数字

6. 文本的阴影

text-shadow:

h-shadow  v-shadow blur color;

7、 white-space 设置网页如何处理空白

      可选值:

          normal 正常

          nowrap 不换行

          pre 保留空白

设置省略号:

.box2{

        width: 200px

        white-space: nowrap;

        overflow: hidden;

        text-overflow: ellipsis;

      }

 十一.图标字体(iconfont)

      在网页中经常需要使用一些图标,可以通过图片来引入图标

      但是图片大小本身比较大,并且非常的不灵活

      所以在使用图标时,我们还可以将图标直接设置为字体,

         然后通过font-face的形式来对字体进行引入

         这样我们就可以通过使用字体的形式来使用图标

 

     fontawesome 使用步骤

        1.下载 https://fontawesome.com/

        2.解压

        3.将css和webfonts移动到项目中

        4.将css中的all.css引入到网页中

        5.使用图标字体

          (1) 直接通过类名来使用图标字体

             class="fas fa-bell"

             class="fab fa-accessible-icon"

 

          (2)通过伪元素来设置图标字体

            1.找到要设置图标的元素通过before或after选中

            2.在content中设置字体的编码

            3.设置字体的样式

                fab

                font-family: ‘Font Awesome 5 Brands‘;

 

                fas

                font-family: ‘Font Awesome 5 Free‘;

                font-weight: 900;

             li::before{

content: ‘\f1b0‘;

/* font-family: ‘Font Awesome 5 Brands‘; */

 font-family: ‘Font Awesome 5 Free‘;

   font-weight: 900;

}

(3) 通过实体来使用图标字体:&#x图标的编码;

<span class="fas">?</span>

 

阿里字体库:

将图标加入购物车,在购物车中将图标添加到项目中,打开图标管理,将项目下载到本地,将下载的项目中的图标复制到本地项目里面。

1) <i class="iconfont"></i>

      <i class="iconfont"></i>

      <i class="iconfont"></i>

 

(2) <i class="iconfont icon-qitalaji"></i>

(3) 使用伪元素

     p::before{

            content: ‘\e625‘;

            font-family: ‘iconfont‘;

            font-size: 100px;

        }

 

十二.表格的样式

12.1.表格的常用属性 

之前学习的样式,在表格中,基本都可以使用

1.边框属性 table和td

2.边距属性 table都能使用,td没有margin

3.尺寸属性 

4.文本格式属性 font-* text-* line-height

5.背景属性 颜色 图片 渐变

6.vertical-align:top/middle/bottom  要写在td才生效

12.2.表格特有的属性

 

1.边框合并

border-collapse

1.separate 默认,边框分离的模式

2.collapse 边框合并

2.边框的边距

设置单元格与单元格之间的距离,必须保证border-collapse:separate;

border-spacing

1.取值一个value,垂直和水平距离相同

2.取值两个value1 value2. value1:水平距离,value2:垂直距离

 

补充:

1、如果表格中没有使用tbody而是直接使用tr,

        那么浏览器会自动创建一个tbody,并且将tr全都放到tbody中

         tr不是table的子元素

2、默认情况下元素在td中是垂直居中的 可以通过 vertical-align,text-align 来修改。

3、将元素设置为单元格 td  

display: table-cell;

此时该元素里面的文字支持text-align,但是该元素里面的元素不支持该属性。可以使用margin,也可以使用 vertical-align。

3.标题的位置

caption-side

top/bottom

4.表格的显示规则,告诉浏览器,我这张表格如果渲染,td尺寸的计算方式

table-layout:

1.auto 默认值,自动表格布局,列的尺寸实际是由内容决定的

2.fixed 固定表格的布局,列的尺寸由设置的值决定

需要table有尺寸,td有尺寸

自动布局auto

固定布局fixed

单元格的大小会适应内容

单元格尺寸取决于设定的值

表格复杂时,加载的速度慢(缺点)

任何情况下会加速加载表格(优点)

布局会比较灵活(优点)

布局会比较死板(缺点)

适用于不确定每列大小,并且表格不太繁琐的时候

当确定每列尺寸的时候使用

 

十三.定位(重点*********************) 

13.1.什么是定位

 

元素在页面中的位置

 

定位(position)

  定位是一种更加高级的布局手段

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

  使用position属性来设置定位

     可选值:

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

        relative 开启元素的相对定位

        absolute 开启元素的绝对定位

        fixed 开启元素的固定定位

        sticky 开启元素的粘滞定位

 

相对定位:

   当元素的position属性值设置为relative时则开启了元素的相对定位

   相对定位的特点:

      1.元素开启相对定位以后,如果不设置偏移量当前页面不会发生任何的变化

      2.相对定位是参照于元素在文档流中的位置(最开始的位置)进行定位的

      3.相对定位会提升元素的层级

      4.相对定位不会使元素脱离文档流,原位置仍旧保留。

      5.相对定位不会改变元素的性质块还是块,行内还是行内

 

偏移量(offset)

   当元素开启了相对定位以后,可以通过偏移量来设置元素的位置,且不会影响其他元素的位置。

注意:如果通过设置margin改变元素位置,会影响其他元素的位置。

      top

        定位元素和定位位置上边的距离

      bottom

        定位元素和定位位置下边的距离

定位元素垂直方向的位置由top和bottom两个属性来控制

通常情况下我们只会使用其中一

top值越大,定位元素越向下移动

bottom值越大,定位元素越向上移动

 

  left

    定位元素和定位位置的左侧距离

  right

    定位元素和定位位置的右侧距离

定位元素水平方向的位置由left和right两个属性控制

   通常情况下只会使用一个

   left越大元素越靠右

   right越大元素越靠左

 

绝对定位

  当元素的position属性值设置为absolute时,则开启了元素的绝对定位

  绝对定位的特点:

    1.开启绝对定位后,如果不设置偏移量该元素的位置不会发生变化

    2.开启绝对定位后,元素会从文档流中脱离,会影响其他元素位置。

    3.绝对定位会改变元素的性质,行内变成块,块的宽高被内容撑开

    4.绝对定位会使元素提升一个层级

    5.绝对定位元素是相对于其包含块进行定位的

 

包含块( containing block )

    正常情况下:

       包含块就是离当前元素最近的祖先块元素

          <div> <div></div> </div>

          <div><span><em>hello</em></span></div>

 

绝对定位的包含块:

   包含块就是离它最近的开启了定位的祖先元素,

   如果所有的祖先元素都没有开启定位则根元素就是它的包含块

 

   html(根元素、初始包含块)

 

固定定位:

   将元素的position属性设置为fixed则开启了元素的固定定位

   固定定位也是一种绝对定位,所以固定定位的大部分特点都和绝对定位一样

   唯一不同的是固定定位永远参照于浏览器的视口进行定位

   固定定位的元素不会随网页的滚动条滚动

 

 

粘滞定位

  当元素的position属性设置为sticky时则开启了元素的粘滞定位

  粘滞定位和相对定位的特点基本一致,

不同的是粘滞定位可以在元素到达某个位置时将其固定

 

 

 

水平布局

left+margin-left+border-left+padding-left+width+padding-right+border-right+margin-right+right=包含块的内容区的宽度

 

  当我们开启了绝对定位后:

   水平方向的布局等式就需要添加left和right两个值

   此时规则和之前一样只是多添加了两个值:

      当发生过度约束:

         如果可设置auto的值中没有auto则自动调整right值以使等式满足

         如果有auto,则自动调整auto的值以使等式满足

 

          可设置auto的值

             Margin width left right

 

          因为left 和 right的值默认是auto,所以如果不指定left和right

          则等式不满足时,会自动调整这两个值

 

垂直方向布局的等式的也必须要满足

          top + margin-top/bottom + padding-top/bottom + border-top/bottom + height = 包含块的高度

 

 

元素水平垂直居中:

    position:absolute;

 margin:auto;

  left:0;

  right:0;

  top:0;

  bottom:0;

 

对于开启了定位元素,可以通过z-index属性来指定元素的层级

   z-index需要一个整数作为参数,值越大元素的层级越高

           元素的层级越高越优先显示

 

如果元素的层级一样,则优先显示结构上靠下的元素

祖先的元素的层级再高也不会盖住后代元素

十四.浮动

 14.1 概念

浮动特点

1.元素一旦浮动起了,脱离文档流

 不占页面空间,其它未浮动元素会上前补位

2.浮动元素会停靠在父元素的左边或者右边

 或其它已经浮动元素的左/右的边缘

3.浮动解决多个块级元素在同一行内显示的问题

语法  

属性 float

取值

left:左浮动,元素浮动起来后,停靠在父元素的左侧,或者往左挨着已浮动元素

right:右浮动,元素浮动起来后,停靠在父元素的右侧,或者往右挨着已浮动元素

none默认值,元素不浮动

 

注意:元素设置浮动以后,水平布局的等式便不需要强制成立

      元素设置浮动以后,会完全从文档流中脱离,不再占用文档流的位置,

         所以元素下边的还在文档流中的元素会自动向上移动

 

浮动的特点:

  1、浮动元素会完全脱离文档流,不再占据文档流中的位置

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

  3、浮动元素默认不会从父元素中移出

  4、浮动元素向左或向右移动时,不会超过它前边的其他浮动元素

  5、如果浮动元素的上边是一个没有浮动的块元素,则浮动元素无法上移

  6、浮动元素不会超过它前面的浮动的兄弟元素,最多最多就是和它一样高

 

 

 14.2 浮动元素引发的特殊情况 

1.当父容器横向显示不下所有浮动元素的时候,最后一个元素将换行显示

  1.1默认情况下,最后一个元素会优先显示在最高的位置,再往左排列

  1.2会发生浮动元素占位的情况,浮动元素根据浮动方向,占据方向之上的位置,不允许最后一个元素占用

2.浮动对默认宽度的影响

块级元素不写宽度,宽度默认是父级元素的100%

元素一旦浮动起来,宽度以内容为准

前题,不设置width

3.元素一旦浮动起来,就变为块级元素,允许修改尺寸,设置垂直外边距

4.文本,行内元素,行内块,是不会被浮动元素压在下方的,会巧妙避开,环绕着浮动元素显示
所以可以利用浮动来设置文字环绕图片的效果

5.脱离文档流的特点:

    块元素:

      1、块元素不在独占页面的一行

      2、脱离文档流以后,若没有设置元素宽高,则块元素的宽度和高度默认都被内容撑开

 

    行内元素:

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

 

    脱离文档流以后,不需要再区分块和行内了

 

清除浮动

 

元素一旦浮动之后,会对后续的元素带来一定的影响,后续元素会上前补位,如果不希望后续上前补位,可以给后续元素添加清除浮动的属性

clear:

取值

left:清除左浮动元素对我带来的影响

right:清除右浮动元素对我带来的影响

both: 清除所有浮动元素对我带来的影响

 

浮动元素对父元素高度带来的影响(高度坍塌)

 

高度塌陷的问题:

  在一般情况下,父元素的高度默认是被子元素撑开的,

  但是当子元素浮动后,其会完全脱离文档流,子元素从文档流中脱离

  将会无法撑起父元素的高度,导致父元素的高度丢失

 

  父元素高度丢失以后,其下的元素会自动上移,导致页面的布局混乱

  所以高度塌陷是浮动布局中比较常见的一个问题,这个问题我们必须要进行处理!

 

 

BFC(Block Formatting Context) 块级格式化环境

  BFC是一个CSS中的一个隐含的属性,可以为一个元素开启BFC

    开启BFC该元素会变成一个独立的布局区域,与其他的区域不同。

  元素开启BFC后的特点:

    1.开启BFC的元素不会被浮动元素所覆盖,但是会跑到浮动元素旁边。

    2.开启BFC的元素子元素和父元素外边距不会重叠

    3.开启BFC的元素可以包含浮动的子元素

 

  可以通过一些特殊方式来开启元素的BFC:

    1、设置元素的浮动(不推荐)

    2、将元素设置为行内块元素(不推荐)

    3、将元素的overflow设置为一个非visible的值

常用的方式 为元素设置 overflow:hidden 开启其BFC 以使其可以包含浮动元素

 

如果我们不希望某个元素因为其他元素浮动的影响而改变位置,

  可以通过clear属性来清除浮动元素对当前元素所产生的影响

clear

  作用:清除浮动元素对当前元素所产生的影响

  可选值:

     left 清除左侧浮动元素对当前元素的影响

     right 清除右侧浮动元素对当前元素的影响

     both 清除两侧中最大影响的那侧

原理:

  设置清除浮动以后,浏览器会自动为当前元素添加一个与浮动元素高度相同的上外边距,

  以使其位置不受其他元素的影响

 

解决父元素高度塌陷问题

  父元素::after{

        content: ‘‘;

        display: block;

        clear: both;

     }

 

解决外边距重叠的问题

  .父元素::before{

            content: ‘‘;

            display: table;

        }

 

clearfix 这个样式可以同时解决高度塌陷和外边距重叠的问题,当你在遇到这些问题时,直接使用clearfix这个类即可

.clearfix::before,

.clearfix::after{

        content: ‘‘;

        display: table;

        clear: both;

     }

 

 

块级元素不写高度,他的高度是根据内容判定的

如果内部元素都浮动了,内部元素都脱了默认文档流

父级元素就失去了高度------高度坍塌

解决方案:

1.给父级元素添加高度 弊端:不是每次都知道具体的高度是多少

2.设置父级元素也浮动 弊端:会影响父元素后面的其它元素

3.给父元素设置overflow:hidden/auto 弊端:如果内容想要溢出显示,显示不了。

4.在父元素中追加一个空的块级元素,只设置clear:both

 

 

三.显示

 

1.显示方式

 

决定了元素在网页中表现形式(块级,行内,行内块,table)

语法 display

取值:

1.none 不显示元素,隐藏

2.block 让元素表现为块级

        块级元素特征,独占一行,可以设置尺寸以及上下外边距

3.inline 让元素表现为行内

        行内元素特征,多个元素一行显示,不能设置宽高以下上下外边距

4.inline-block 让元素表现为行内块

       行内块特征,多个元素一行显示,可以设置尺寸以及上下外边距

5.table 让元素表现为table

      table的特征:尺寸以内容为准,独占一行,允许修改尺寸

 

2.显示的效果

 

属性:visibility

取值  visible/hidden

visibility:hidden和display:none的区别

visibility:hidden隐藏,不脱离默认文档流,依然占位

display:none 隐藏,脱离了默认文档,不占页面位置

 

3.透明度

 

opacity:0~1  1是不透明,0是全透明

opacity和rgba的区别

opacity作用与元素,当一个元素设置了opacity之后,

       这个元素本身,以及所有子元素,与颜色相关的属性,都会受到影响

rgba(0~255,0~255,0~255,0.5)只会改变你设定的这个颜色透明度

 

4.垂直对齐

 

vertical-align

使用在table中,取值top/middle/bottom

使用在img中,取值 top/middle/bottom/baseline

控制图片与两边文字垂直对齐方式

 

5.光标

 

改变鼠标悬停在元素时的样式

cursor:

取值

1.default 箭头

2.pointer 小手

3.crosshair  +

4.text  I

5.wait  等待

6.help 帮助

 

.列表

 

 

列表标识

list-style-type

none

disc

circle

square

列表标识的位置

list-style-position:outside/inside

列表项引用图片

list-style-image:url()

简写方式

list-style:type url() position;

常用的方式  list-style:none;

css

上一篇:Linux下查看文件和文件夹大小的df和du命令


下一篇:与众不同 windows phone (43) - 8.0 相机和照片: 镜头的可扩展性, 图片的可扩展性, 图片的自动上传扩展