CSS笔记

一、什么是CSS

css 称为层叠样式表也叫级联样式表,是一种用来为结构化文档(如 HTML 文档或 XML 应用)添加样式(字体、间距和颜色等)的计算机语言,CSS 文件扩展名为 .css

二、样式分类和语法

我们可以根据CSS代码所在的位置分成三类样式:内联样式,内部样式表,外部样式表。

使用频率:外部样式表>内部样式表>内联样式

2.1内联样式

内联样式:也叫行内样式。将样式写在元素的开始标签里的style属性中。

语法:style = " 属性 : 值 ; 属性 : 值 ; ……"

例如:

div:宽度 :默认是撑满父元素的内容区宽度。高度: 默认自己的内容区的文字撑起来的高度。

    也可以自定义div的宽与高   属性分别是吧width和height。

扩展:插件live server的使用,live server是一个简易的服务器插件,端口号默认是5500,

          该插件可以使用浏览器打开HTML等文件,并且自动的实时刷新。

2.2内部样式表

内部样式表:将样式写在head的子元素style里,此时需要使用选择器来定位你要设置样式的元素。

语法:选择器{

            属性:值;

            ......

         }

例如:使用id选择器,设置样式时要在id值前面写#。

2.3外部样式表

外部样式表:将样式单独放入到一个文件中,文件的扩展名是.css,然后使用link标签,将样式文件引入到该html页面中。其中,rel指定文件类型,herf指定文件的位置。

语法:和内部样式表语法一样,只不过将其写在了单独的css文件中,直接写,不需要写style属性。(样式文件扩展名是css,该文件中可以设置无数种样式。)

下图为css文件中设置样式的代码:

下图代码写在html文件boby下:

三、选择器

3.1基本选择器(4种)

3.1.1标签选择器

通过标签名,找到页面中所有的这类标签,设置样式。

语法:写在head下的style元素中。标签名{属性名:属性值;}

注意:标签选择器选择的是一类标签,而不是单独的一个。无论嵌套关系有多深,都能够找到对应的标签。

 属性值:

 border-inline-xxx:xxx可以是width,color,style  设置左右边框的大小,颜色,线条

 border-block-xxx:设置上下边框的大小,颜色,线条

 常用的线条: soild:实线

                       dotted:点虚线

                       double:双线条

3.1.2类选择器

通过类名,找到页面中所有的带有这个类名的标签,设置样式。

语法:以小圆点开头的样式选择器,小圆点后面是具体的class名。在style属性下写,.类名{属性名:属性值;}

注意:1.每个元素都可以有class属性,不同元素的class的值可以相同。

           2.表示同一类的元素的class的值可以有多个,使用空格隔开。

           3.类名可以由数字,字母,下划线,中划线组成,但是不能以数字开头或者中划线开头。

例如:

3.1.3id选择器

通过id属性值,找到页面中带有这个id属性值的标签,设置样式。

语法:在style属性下写, #id属性值{属性名:属性值;}

必须使用#作为开始符号,紧跟着id的具体值,id值相当于身份证号,因此id的值是不可以重复的,具有唯一性。

id与class的区别:

 1.在属性上的区别:class的值可以重复,id的值不可以重复,一个标签里面只能有一个id属性值。

 2.在选择器上的区别,class选择器以.开头,id选择器以#开头。

页面展示如下:

3.1.4通配符选择

         通配符选择器就是*选择器,表示所有的元素都被选中,一般用于规定默认样式 。

语法:在style元素下写,*{属性名:属性值;}

可见所有元素字体都是20px

3.2复合选择器

3.2.1交集选择器

对多个选择器共同选择的标签进行样式设置,标签选择器要写在最前面。

语法:多个选择器并排写:选择器1选择器2选择器3.....{属性名:属性值;....}

可见只有段落一的字体大小和颜色改变了。

3.2.2并集选择器

只要含有选择器中的任意一个选择器,就可以应用设置的样式。

语法:多个选择器之间用,隔开:选择器1,选择器2,选择器3,...{属性名:属性值;}

3.3关系选择器

四种:父子选择器,后代选择器,兄+弟选择器,兄~弟选择器。

 父子选择器:通过父亲选中儿子

                语法:父>子{}

    后代选择器:通过祖先选中后代

                语法:祖先 后代{}

    兄+弟选择器:通过兄长选中紧邻的弟弟

                语法:兄+弟{}

    兄~弟选择器:通过兄长选择符合条件的所有弟弟

                语法:兄~弟{}

注意:由于浏览器是自上而下解析的,因此,后面的样式会覆盖掉前面的样式。

3.4属性选择器

五种:(写在style属性下)

           1. [属性名]:选中所有具有指定属性名的元素。

           2. [属性名=属性值] : 选中指定属性名等于某属性值的元素。

           3. [属性名^=指定值] : 选中指定属性名的属性值是以指定值开头的元素。

           4. [属性名$=指定值]: 选中指定属性名的属性值是以指定值结尾的元素。

           5. [属性名*=指定值]: 选中指定属性名的属性值是以包含指定值的元素。

3.5 伪元素选择器

五种:1.p::first-letter  对段落的首字符设置样式

           2.p::first-line    对段落的首行设置样式

           3.p::selection   对段落中被鼠标选中的文字设置样式

            4.p::before      对每一个段落中的第一个字符的前面设置样式,可以理解为向段落的第一个字符之前插入内容

             5.p::after        对每一个段落中的最后一个字符后面设置样式,可以理解为向段落的最后一个字符之后插入内容

3.6 伪类选择器(11种)

用来描述一个元素的特殊状态,比如:第一个子元素,被点击的元素等,一般情况下使用:开头。

3.5.1 元素选择伪类选择器(6种)

冒号前有空格代表从子类开始数,无空格代表从所在级数开始。

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

      、      

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

       、      

 :bth-child(n)   第n个子元素被选中。 n的值可以从1到正无穷

                 2n表示偶数位的元素被选中,也可以使用单词even

      、        

                 2n+1表示奇数位的元素被选中,也可以使用单词odd

  

                 注意:使用上述三种伪类选择器时,注意空格的问题。优先使用带空格的形式。

 :first-of-type: 同类型中的第一个元素

 :last-of-type:  同类型中的最后一个元素

 :nth-of-type(n):同类型中的第n个元素   2n表示偶数位的元素被选中,也可以使用单词even

                                     2n+1表示奇数位的元素被选中,也可以使用单词odd

 

注意:上述三个伪类选择器冒号前面,不要加空格!!!

3.5.2 否定伪类选择器(1种)

语法

:not(其他选择器)

注意:1.括号里面不支持复合选择器的传入。

           2. 如果带child关键字的伪类选择器,与其他的伪类选择器共同使用,冒号前面的空格不需要写。

作用:将其他选择器选中的元素排除。

          将所有的p里面的文字都变红,除了第一个和最后一个。

(1)(2)

3.5.3 a链接伪类选择器(4种)

      :link             超链接独有的选择器,表示未访问前的状态

                          

      :visited        超链接独有的选择器,表示访问过的状态

                         注意:网址必须真实存在,才算访问过

                            

      :hover         所有元素都可以使用的选择器,表示鼠标进入该元素时的状态

           

      :active         所有元素都可以使用的选择器,表示鼠标左键点中该元素时的状态

                   

3.7 选择器的权重(优先级)

当我们使用不同的选择器选中了相同的元素,对同一个属性设置了不同的样式, 取决于选择器的优先级,谁的优先级高(也就是权重大),就使用谁。

    (内联样式 > id选择器 > 类和伪类选择器 > 默认选择器)

可以看出div的背景颜色依旧是蓝色,因为id选择器的权重大于类选择器。

3.8 样式的继承

CSS针对于样式继承的设计,是为了减少开发过程中的代码量,使子元素具有父元素的一些样式。

 父元素设置好的样式,子元素不需要在重复设置。

 比如字体风格,颜色,大小等。

 某些元素无法继承,比如背景,布局相关的样式。


3.9 单位的讲解

单位:

        最基本的单位:像素,即屏幕上的分辨率 ,1920x1080,表示整个屏幕上有这些个点

        一个点就是一个像素。

        百分比单位:是子元素针对于父元素的百分比。会随着父元素的属性改变而改变。

        em单位:是一个相对单位,相对本元素的字体大小 1em=1个font-size。

        rem单位:也是一个相对单位,相对的是整个页面的根元素的字体大小。

         rgb 单位:颜色的单位。rgb(0,0,0)三个0分别代表红色,绿色,蓝色的值,以这三个数字创建颜色。范围都是0~255。

四、盒子模型

4.1 盒模型简介

每一个html元素都可以叫做盒模型。页面就是由一个个盒模型堆砌起来的。

这样的优点就是可以将元素放置在任何地方,可以通过调整宽和高来充满整个屏幕。

在CSS中,盒模型(Box Modle)是用来对元素进行设计和布局的,由内到外包含实际内容区、内边距、边框、和外边距四个部分。

1)内容区Content

用来放置文本或者子元素。

2)内边距padding

即内容区与边框的距离。

3)边框border

围绕在内边距外的边框。

4)外边距margin

边框以外的区域。

为了正确设置元素在所有浏览器中的宽度和高度,你需要知道的盒模型是如何工作的。

4.2 content(内容区)

  • content,盒模型的实际内容区。

  • 该区域可以放入文本,以及子元素。

  • 样式属性widthheightbackground-color就是对该区域进行设置的。

4.3 padding(内边距)

padding,定义了内容区距离边框的这一片区域,该区域是透明的,没有颜色。

包含上下左右四个内边距:1. padding-top(上内边距)

                                           2. padding-bottom(下内边距)

                                           3. padding-left(左内边距)

                                           4. padding-right(右内边距)

我们在设置内边距的时候,可以使用上述四个属性,分别设置四个内边距。

为了缩短代码,也可以在一个属性中指定所有的值,语法如下:

1.padding:  上    右    下    左

2.padding:  上      左右      下

3.padding:    上下       左右

4.padding:       上下左右

4.4 border(边框)

 由三个维度的属性来决定样式,宽,颜色,线条。,对应的属性如下:

  1. border-width

  2. borde-color

  3. border-style

 每个属性可以拆成四部分对应的小属性,也就是上下左右边框的宽、颜色、线条。

 属性名格式:border-xxx-width

                       border-xxx-color

                       border-xxx-style ( 上诉三个里面的xxx分别是top,bottom,left,right)

边框的线条样式:- none:  默认无边框
                             - dotted:  点虚线
                             - solid:  实线
                             - double  双线条
                             - dashed  虚线
                             - groove: 定义3D沟槽边框。效果取决于边框的颜色值
                             - ridge: 定义3D脊边框。效果取决于边框的颜色值
                             - inset:定义一个3D的嵌入边框。效果取决于边框的颜色值
                             - outset: 定义一个3D突出边框。 效果取决于边框的颜色值

4.5 marign(外边距)

设置的是元素的周围距离,一般用来决定该元素在页面上的位置。

        外边距由四个方向的属性来控制:

        margin-top

        margin-right

        margin-bottom

        margin-left

        也可以使用一个属性margin来设置四个方向的距离。

        margin: 上      右      下      左

        margin:上      左右     下

        margin:上下    左右

        margin:上下左右

 注意:1. 默认情况下,元素的位置由上边距和左边距决定,因此至少要设置2个值。

            2. 通常情况下,左右可以使用百分比和auto,上下不可以使用。

左右居中:方式1:自己计算

                  方式2:使用auto

4.6 盒模型的水平和垂直布局

4.6.1 盒模型的水平布局

元素在水平方向上的布局必须满足以下等式:

元素的 左右外边距+左右边框宽度+左右内边距+width,必须等于其所在父元素的内容区的width 。

第一种情况:七个属性都是固定值,也就是没有auto值。

如果等式不成立,则右外边距margin-right自动调整数值,使之成立。

 第二种情况: 有auto值。width,marign-right,margin-left这三个属性可以为auto值。

 如果宽是auto值,则自动调整width的值,使等式成立。

 如果宽不是auto值,剩下两个属性,谁是auto,就调整谁。

 如果剩下两个都是auto值,就调整为相同值,使等式成立。

4.6.2 盒模型的垂直布局

盒模型的垂直布局: 只需要设置上下外边距,上下边框的宽,上下内边距以及height即可。子元素在垂直方向上,如果有溢出,可以在父元素里可以使用overflow属性,来设置以下值。

overflow:

                  visible:可见,默认值

                  hidden:溢出部分隐藏

                  scroll:添加滚动条

                  auto:根据是否溢出选择性的自动添加滚动条

4.7 外边距的重叠现象

因为外边距都是独占一行的,因此,左右外边距不可能发生重叠。

只有上下外边距可能发生重叠现象。

 1. 兄弟之间的外边距重叠:

                - 如果两个值都是正值,取较大值。

                - 如果一正一负,取两者的和。 如果负数的绝对值大于整数,那么可见部分一定重叠了。

                - 如果两个都是负数,取绝对值较大的。可见部分一定会发生重叠。

                - 注意: 兄弟之间的外边距的重叠,不是问题。根据情况取设定即可。

  2. 父子之间的外边距重叠:

                -  子元素的上外边距传递给了父元素,使父元素距离他的父元素的上外边距也发生了变化

                    致使父元素的位置发生了改变。因此就出现了问题。 该问题必须要解决。

                -  如何解决?  父元素只需要设置border属性    

4.8 行内元素的盒模型

行内元素的盒模型特点:

内容区不能使用width和height属性设置,不生效,内容区的宽度和高度都是文字撑起来的。

padding,border,marign的左右都是生效的,上下不生效。

如果想要行内元素的宽,高或者垂直方向上的样式生效,可以使用display属性将行内元素的样式转为块元素的样式进行显示设置。

display:  可选值如下

          none:隐藏消失。不占用页面的布局空间。

          block:将行内元素当成块元素设置样式。

          inline:将块元素当成行内元素设置样式。

          inline-block:要设置的元素既有行内样式也有块样式。

4.9 默认样式

 通常情况下,所有的HTML标签都有自己的默认样式,比如body的外边距默认是8px。

 因此我们写的标签并不是紧紧的贴着显示器的左边框和上边框。

 换句话说:默认样式可能影响我们自己设计的布局。

 此时,我们需要取消默认样式。但是,每个元素都有自己的默认样式,因此不能使用一个选择器   就是取消所有的默认样式 

 可能有人想到了通配符选择器,比如下面的写法:

         *{

            padding:0;

            margin: 0;

           但是还有太多的其他各种默认样式,写起来太麻烦

          }

此时,可以借助第三方的css样表,进行重置样式。比如

  • reset.css: 该文件的作用,是取消几乎所有元素的默认样式。

  • normalize.css: 该文件的作用,是设置一些通常的尺寸。

需要哪一个,就使用link 引入即可. link标签应该放置在style标签的上面,避免覆盖掉自定义的样式。

五、元素的浮动

4.1 浮动的特点

浮动的特点:1.浮动元素脱离文档流,可以向左或向右移动,属性float 。可选值

                       - none:不浮动

                       - left:向左浮动

                       - right:向右浮动

                     2.浮动元素不会超出父元素的边框

                     3.元素一旦设置浮动,下面还没有设置浮动的兄弟元素会向上移动。

                     4.浮动元素的哥哥如果没有设置浮动,那么该浮动元素不会浮动到哥哥的左右。

                        如果哥哥也设置了浮动,那么该元素最多和哥哥一样高。

                     5.浮动元素不在满足水平布局的强制成立等式。

4.2 浮动的其他特点

浮动元素不会盖住文字,文字会自动环绕在浮动元素的周围。
哥哥元素设置浮动,弟弟元素里的文字会自动环绕哥哥,而不会被哥哥元素覆盖

元素设置浮动以后,将会从文档流中脱离,从文档流中脱离后,元素的一些特点也会发生变化。

  -- 块元素:
         1、块元素不在独占页面的一行
         2、脱离文档流以后,块元素的宽度和高度默认都被内容撑开

     -- 行内元素:
        行内元素脱离文档流以后,其特点和浮动的块元素特点一样

        也可以说:脱离文档流以后,不需要再区分块和行内了。

4.3 高度坍塌问题

有的时候,父元素的高度不设置具体值,而是由子元素撑开。这样的好处就是,不会因为子元素的内容减少,而出现大量的空白区域,也不会因为子元素的内容过多发生溢出现象。

如果子元素设置了浮动,那么就会出现父元素高度塌陷的问题。

高度塌陷的问题:
 当子元素浮动后,其会完全脱离文档流,子元素从文档流中脱离, 将会无法撑起父元素的高度,导致父元素的高度丢失。父元素高度丢失以后,其下的元素会自动上移,导致页面的布局混乱。  所以高度塌陷是浮动布局中比较常见的一个问题,这个问题我们必须要进行处理!

解决父元素的高度坍塌问题,有以下四种方式,第四种是最优解。

            1. 设置父元素的高度, 但是违背了父元素的高度让子元素撑起来的意愿。

            2. 设置父元素的属性overflow:hidden。 原理使用了BFC概念

            3. 在最后一个浮动的子元素后面添加一个空的div并给该元素添加属性

               clear:both,  该方式,添加了一个不该存在的div,代码冗余

            4. 使用父元素的伪元素选择器解决问题。

4.4 clearfix。

clearfix 这个样式可以同时解决高度塌陷和外边距重叠的问题。

在父元素的class属性上,添加clearfix.
在style中设置
.clearfix{
    content:"";
    display: table;
    clear: both;
}

六、定位

6.1 相对定位

相对定位的概念:    postition属性的值为relative。

                    1. 如果设置了相对定位,没有改变偏移量,则元素不会移动。

                    2. 相对的位置是元素之前所在文档流的位置

                    3. 设置了相对定位的元素,不会脱离文档流。

                    4. 设置了相对定位的元素提高了自己的层级。

                    5. 设置了相对定位的元素,本身的性质不会改变, 块依旧是块元素,行内依旧是行内元素。

        偏移量:

           top:     数值是正值,表示向下移动

           bottom:  数值是正值,表示向上移动        一般情况下,top和bottom选择一个即可

           left:    数值是正值,表示向右移动

           right:   数值是正值,表示向左移动        一般情况下,left和right选择一个即可

6.2 绝对定位

绝对定位: 当属性position的值为absolute时,就开启绝对定位。

                    1. 如果设置了绝对定位,不改变偏移量,则该元素不会移动。

                    2. 设置了绝对定位的元素脱离文档流  如果下面的兄弟没有设置浮动或者定位则向上移动。

                    3. 设置了绝对定位的元素的位置是相对于所在的包含块。

                    4. 设置了绝对定位的元素的性质会发生改变。 行内元素变成块元素, 此时所有的元素宽和高默认都是内容撑开的。

                    5. 设置了绝对定位的元素提高了层级。

包含块:1. 如果设置了绝对定位,那么该元素是相对于距离他最近的设置了相对定位的祖先块元素。

                2.   如果所有的祖先块元素都没有设置定位,那么就是相对html这个根元素来说的包含块尽量设置相对定位,因为相对定位不会脱离文档流。

                            简而言之:最近的设置了相对定位的祖先块称之为包含块。

                            HTML:  是所有元素的初始包含块。

6.3 固定定位

固定定位的学习:当position的值设置为fixed时,就是开启了该元素的固定定位。

固定定位的特点:   1. 固定定位也是一种绝对定位,特点和普通的绝对定位差不多。

                                2. 固定定位的位置是相对于当前浏览器的视口(viewport)来说的。

                                   因此,固定定位的元素不会随着滚动条去滚动。比较适合广告位的设置。

 

6.4 粘滞定位

 当position的值为sticky时,则开启的元素的粘滞定位

 粘滞定位的特点:1. 粘滞定位的特点和相对定位的特点差不多。

                              2. 粘滞定位的不同之处,在于当到达某一个固定位置时,粘住不动。

                              3. 注意:粘滞定位的位置不能超出父元素的范围,否则粘滞效果消失。

6.5 元素的层级

属性:  z-index  是用来设置定位元素的层级的。 值越大,层级越高。元素的层级越高越优先显示。如果元素的层级一样,则优先显示靠下的元素。

兄弟元素: z-index的值越大,层级越高。

父子元素: 父元素的z-index的值再大,也不会覆盖子元素(也不会高过子元素的层级)。

    

下图,可以看出,虽然父元素的层级高于子元素,但并没有覆盖掉子元素。

七、动画

7.1 过渡

transition-property: 指定要执行过渡的属性名多个属性间使用,隔开

transition-duration: 指定过渡效果的持续时间

                       时间单位:s 和 ms  1s = 1000ms

 transition-timing-function: 过渡的时序函数,指定过渡的执行的方式 

                    可选值:

                    ease: 默认值,慢速开始,先加速,再减速

                    linear: 匀速

                    ease-in: 加速

                    ease-out: 减速

                    ease-in-out: 先加速 后减速

                    可以使用transition属性来设置多个属性值,减少代码量,提高可读性

                    语法: 属性,属性,.....duration delay,function

                             duration和delay之间用空格隔开,不加逗号。

       

7.2 动画

设置动画效果,必须先要设置一个关键帧,关键帧设置了动画执行每一个步骤,0%相当于from,100%相当于to ,百分比可以是0-100之间任意的整数。

animation-name:用于指定要使用的关键字的名字。

animation-duration:动画执行的整个过程需要的时间。

animation-timing-function:动画是如何运行的。

animation-delay:动画的延迟时间。

animation-iteration-count:动画从初始位置到结束位置执行的次数。

animation-direction:动画的执行方向。

可选值:
                    normal 默认值  从 from 向 to运行 每次都是这样 
                    reverse 从 to 向 from 运行 每次都是这样 
                    alternate 从 from 向 to运行 重复执行动画时反向执行
                    alternate-reverse 从 to 向 from运行 重复执行动画时反向执行

animation-fill-mode: 动画的填充模式
可选值:
                    none 默认值 动画执行完毕元素回到原来位置
                    forwards 动画执行完毕元素会停止在动画结束的位置
                    backwards 动画延时等待时,元素就会处于开始位置
                    both 结合了forwards 和 backwards

可以使用一个属性animation,来设置上述多个属性的值。分别为关键帧的名字 运动时间 运动速度曲线 延迟 次数 运动方向 运动的填充(用空格隔开)。

7.3 变形

动画的变形:即3D转换, 属性是transform。

 对应的属性值有三类:

                  第一类:    平移

                  translateX(像素):即沿着X轴平移,正值是向右平移,负值向左平移。

                  translateY(像素):即沿着Y轴平移,正值是向下平移,负值向上平移。

                  translateZ(像素): 即沿着Z轴平移,正值是突脸,负值远离脸,需要开启视距(脸与屏幕的距离)

                 第二类:    旋转

                  rotateX(度数): 以X轴为轴心旋转

                  rotateY(度数): 以Y轴为轴心旋转

                  rotateZ(度数): 以Z轴为轴心旋转

度数的单位可以是deg(度数)或者turn(圈)

                  第三类:    缩放

                   scaleX(倍数):水平方向(即X轴方向)缩放

                   scaleY(倍数):垂直方向上缩放

                   scaleZ (倍数) :Z轴方向的缩放

                   scale(倍数) 相当于scaleX和scaleY的合并

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值