CSS(1)-基础

193 阅读24分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

目录

一.学前基础

1.简介

一些规范

2.CSS的三大特性 

层叠性

继承性

优先级

3.Emmet语法 

快速生成HTML结构语法

 4.元素的显示模式

什么是元素显示模式

分类

二.选择器

1.基础选择器

2.复合选择器

复合选择器总结

三.样式

1.字体文本样式

2.背景样式

3.列表样式

四.布局

1.盒子模型

 border        边框

padding        内边距

margin        外边距

塌陷问题

清除内外边距

圆角边框

盒子阴影

2.浮动

传统网页布局的三种方式(简单说就是盒子如何排)

浮动介绍

浮动使用

注意

清除浮动

总结

3.定位

定位有什么作用?

定位组成

 定位的叠放顺序

 定位的应用

定位的特性

定位的拓展

五.其他

1.一些需要注意的点

2.技能点 


一.学前基础

1.简介

层叠式样式表 Cascading Style Sheet

css语言由选择器键值对构成

一些规范

1.往往在冒号后面打一个空格,如color: red;

2.选择器和大括号之间保留一个空额。

2.CSS的三大特性

层叠性

​编辑

​编辑

继承性

​编辑 使用继承可以简化代码,降低CSS样式的复杂性

子元素可以继承父元素的某些样式,如text-,font-,line-这些开头的和color,高度内外边距等不会继承。

行高的继承

​编辑

 ​编辑

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <style>
        body{
            color:pink;
            font:18px/1.5 'Microsoft YaHei';
        }
        div{
            font-size: 20px;
        }
        p{
            font-size: 30px;
        }
    </style>
</head>
<body>
<div>我是div</div>
<p>我是p</p>
</body>
</html>

优先级

 通过不同选择器选择到同一个元素,如果设置了相同的属性,那么执行哪一个需要看选择器的权重。优先执行权重大的。

​编辑

​编辑  

注意1:

<style>
        .one{
            color: pink;
        }
        p{
            color:red;
        }
</style>

<div class="one">
    <p >我是p</p>
</div>

这里会显示红色,因为虽然.one是类选择器但是继承关系,优先级小于元素选择器。

不管父元素的权重多高,继承到子元素都是0,所以即使pink后面加了!important,样式也算是p继承的,也算是0,还会显示红色。

 注意2:

给body指定color样式,在color中写个a标签,在浏览器中a还会显示蓝色,因为a标签就默认给文字定义了蓝色,元素选择器优先级大于继承优先级。

权重的叠加

复合选择器会有权重叠加的问题

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <style>
        ul li{
            color: red;
        }
        li{
            color:pink;
        }
    </style>
</head>
<body>
<ul>
    <li>我是li</li>
</ul>
</body>
</html>

显示红色,ul权重是0001,li权重是0001,复合选择器的权重就是0002。

注意不会产生进位。

3.Emmet语法 

快速生成HTML结构语法

           

快速生成 ul>li

快速生成div+p

快速生成.nav,这种方式默认生成带class的div

想要生成别的带class的标签可以用标签名.类名

如p.box生成

带id的用法就是将.换成#

想要生成的类名或id名有顺序

.box$等于

.box$*1等于

.box$*2等于

在生成的标签里面默认显示几个文字

div{我是div}等于

我是div

div{$}*2等于

1
2

CTRL+alt+l  格式化文档

4.元素的显示模式

什么是元素显示模式

网页的标签很多,在不同的地方会用到不同类型的标签,元素的显示模式就是元素以什么方式进行显示,比如div独占一行,span一行可以放多个。

分类

块元素

常见的块元素:

..

,

,
    ,
      ,
    1. 特点:

      1.独占一行

      2.高度,宽度,外边距,内边距都可以控制

      3.宽度默认是容器(父级)的100%

      4.是一个容器及盒子,里面可以放行内或块级元素

      注意:

      1.文字类的元素不能使用块级元素

      2.

      等标签主要用于存放文字,因此

      里面不能放块级元素,特别是不能放div

行内元素

常见的行内元素:,,,,,,,,,

特点:

1.一行可以显示多个行内元素

2.高,宽直接设置是无效的

3.默认高度是本身内容的高度

4.行内元素只能容纳文本或其他行内元素

注意:

1.内不能再放链接

2.内可以放块级元素,但是给转换一下块级模式最安全

行内块元素

,, 它们同时具有块元素和行内元素的特点

​编辑

小结

​编辑

元素显示模式转换

一个模式的元素需要另外一种模式的特性,比如标签a增大触发范围。​编辑

 但a标签是行内元素,不能设置宽和高,需要转换成块级元素去设置。

display:block;//转换为块级元素
display:inline;//转换为行内元素
display:inline-block;//转换为行内块元素

二.选择器

可以分为基础选择器复合选择器两大类

1.基础选择器

标签选择器

标签名作为选择器

类选择器

1.标签需要设置class属性,通过.类名来选择

2.可以使用多类名,即一个标签的class可以设置多个类名,不同类名之间用空格来间隔。

有些标签修改的属性当中有的相同,有的不同,相同的部分可以提取出来,在一个类选择器下修改属性,可以减少代码量。

id选择器

1.标签需要设置id属性,通过#id名来确定

2.id的值是唯一的。

3.id选择器和类选择器最大的不同在于使用次数上。类选择器能作用于多个标签,id选择器只能作用于一个标签。

4.类选择器在修改样式时用的最多,id选择器一般用于页面唯一性的元素上,和js搭配使用。

通配符选择器

*能选择所有的标签

2.复合选择器

复合选择器就是基础选择器的组合。

后代选择器/包含选择器

写法:外层标签+空格+内层标签

比如ol和ul中都要li,如果要选中ol中的li,就可以用后代选择器了

后代包括儿子,孙子,一直往下都可以被选中。

如果是孙子就可以这样选择              父标签+空格+儿子标签+空格+孙子标签

也可以将标签名替换为类选择或者id选择

子选择器

只能选择作为某元素最近一级子元素,就是选亲儿子。

用大于号。元素1>元素2

并集选择器

通过逗号,分割

然和形式的选择器都可以作为选择器的一部分

将熊大熊二改为粉色,小猪一家改为粉色

​编辑

​编辑

伪类选择器

用于向某些选择器添加特殊效果。

用冒号:开头如:hover        :first-child

链接伪类选择器

​编辑

input:focus        选取获得焦点的表单元素,焦点就是光标一般在input类表单中才能获取。

 注意事项

为了确保生效,要按照:link,:visted,:hover:active的顺序声明。

记忆:lvhao  lv的钱包好

通常这样使用

<style>
        a{
            color:gray;
            text-decoration: none;
        }
        a:hover {
            color:blue;
            text-decoration: underline;
        }
    </style>

复合选择器总结

​编辑

三.样式

1.字体文本样式

font-family        设置字体

注意:

1.一般情况下如果有空格隔开的多个单词组成的字体,要加单引号。

2.这个属性后面可以写好几个值,解析时会依次看哪个字体电脑可以使用,如果不能用就往下判断。

font-size       设置文字大小

注意:

1.可以以body为选择器修改字体大小,但标题标签的字体大小不会改变,标题标签的字体大小需要单独指定。

font-weight        设置字体粗细

bold:加粗

bolder:特粗体

lighter:细体

number:没有单位,用数字100-900表示,默认400是正常状态,等价于normal,700等同于bold。

font-style       设置文本的风格如斜体

​编辑

字体复合属性

可以更节约代码

​编辑

如果这四个属性只想写一部分,必须有font-weight和font-family

即font:700px '黑体';如果用font但只设置了weight属性是不起作用的。

没有字号和没有字体时就不能采用连写的方式。 

color     定义文本颜色

​编辑

text-align       设置元素内文本内容水平对齐方式

​编辑

 如果想要img图片居中,给img设置text-align是不行的,先给img图片加一个p父标签,再给p标签设置居中。

text-decoration       添加到文本的修饰        可以是下划线,删除线,上划线

​编辑

 可以用来去掉超链接的下划线,text-decoration:null;

text-indent       指定文本的第一行缩进,通常将段落首行缩进

​编辑

 ​编辑

 2em就是缩进两个字的大小

line-height        设置行间距(行高),控制文字行与行之间的距离

​编辑

当改变行间距,文本高度不变,上下间距变大。

文字阴影

​编辑

 ​编辑

div{
        width: 200px;
        height: 100px;
        font-size: 30px;
        text-shadow: 5px 5px 20px rgba(0,0,0,0.8);
    }

2.背景样式

可以设置背景颜色,背景图片,背景平铺,背景图片位置,背景图像固定等 

background-color

1.transparent:透明

2.给定一个颜色

background-image

1.null

2.url(相对地址或绝对地址)

background-repeat       

背景平铺       沿着x或y方向重复显示背景图片        默认情况下,设置一个背景图片是会平铺的。页面元素既可以加背景图片也可以加背景颜色,背景图片会覆盖背景颜色。

1.repeat        

2.no-repeat

3.repeat-x

4.repeat-y

background-position

改变图片在背景中的位置,准确的说是在容器中的位置。

​编辑

 如果是方位名词,background-position:top,center和background-position:center,top是等价的,都是top和bottom是控制上下的,right和left是控制左右的,只有center可以控制两个方向,所以可以根据关键字来识别是对应哪个方向的。如果只指定一个参数,另一个默认是center。

 如果参数值是精确单位,那么第一个参数是x,第二个是y。

如果只指定一个参数,另一个默认是center。

如果参数是混合单位,既有方位名词,又有精确单位,那么第一个参数一定对应x,第二个参数一定对应y。

background-attachment

属性设置背景图像是否固定或者随着页面其余部分滚动,后期可以做视差滚动的效果

​编辑

​编辑

背景的复合写法

将这些属性简写在同一个属性background中,节省代码量,没有特定书写顺序,一般习惯约定顺序为

​编辑

背景的应用

应用1

​编辑

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <style>
        h3{
            width: 200px;
            height: 40px;
            background-color:whitesmoke;
            font-size: 14px;
            font-weight: 400;
            line-height: 40px;
            background-image:url(../images/logo.png);
            text-indent: 5em;
            background-repeat: no-repeat;
            background-position:left;
        }
    </style>
</head>
<body>
<div>
    <h3>成长守护平台</h3>
</div>

</body>
</html>

应用2

让超大背景图居中显示

    <style>
        body{
            background-image: url("");
            background-repeat: no-repeat;
            background-position:center top;
        }
    </style>

应用3

背景颜色半透明

​编辑

 rgba分别是 red,green,blue,alpha,里面内容不会受到影响,比如文字不会受到透明度和颜色的影响。

小总结

​编辑

3.列表样式

 删除无序列表前面的圆点

 ​编辑

四.布局

1.盒子模型

​编辑

盒子由边框,外边距,内边距,实际内容组成。

​编辑

border       边框

​编辑

 ​编辑

 ​编辑

常用dotted点状,dashed虚线,solid实线 

border-collapse:collapse;合并相邻的边框

比如在表格中 每个td都是一个盒子,td的边框会合到一起,显得更粗,上面这行代码会消除这个情况。

边框的复合写法

​编辑

边框属性分开定义

​编辑

注意:

边框会影响盒子的大小。比如设置盒子的width和height都是100px,设置了10px的border,那么这个盒子的大小宽和高就都是120px

padding        内边距

边框与内容之间的距离,内容默认是紧贴到边框上的左上角。

​编辑

内边距的复合写法

​编辑

注意

1.padding影响盒子的实际大小

比如盒子是200px200px,上下左右加了20px的内边距,那么盒子的大小就会变成240px240px

2.用padding时,通常增加了padding大小,会相应的减小width和height的大小来保证盒子大小不变。

3.如果盒子本身没有指定width/height属性,此时padding不会撑开盒子大小。比如div中放了一个p标签,div标签设置宽高为300px,p标签没有设置宽高,如果给p设置padding为30px,那么p的盒子就是300px*60px,因为如果不指定宽度,就会默认等于父类的宽度。如果不指定高度,默认高度为0。也就是说p宽度本来就是300是继承的父标签的,但宽度没有设置100%,再给它设置padding,p的宽度还是300px,如果给宽度设置100%,那么p的宽度就会变成360px。

margin        外边距

控制盒子与盒子之间的距离

​编辑

margin不会改变盒子的大小。

总结

margin指的是什么?

1.与父级元素边框的距离

2.与同级元素边框的距离

3.默认情况下,块级元素垂直方向上的外边距重叠,取最大值

比如两个并列的div,同时设置了margin:50px,那么这两个div之间的距离是50px,而不是100px

4.默认情况下,块级元素和行内元素垂直方向上外边距重叠,取最大值

5.默认情况下,行内元素水平方向上的外边距叠加。

比如两个并列的a标签,都设置了margin:50px,那么两个a就相隔100px

塌陷问题

 ​编辑

只要有两个盒子嵌套,给子盒子设置外边距,就会出现塌陷问题,父元素会塌下来,距离等于给子元素设置的外边距的距离(如果父元素没有设置外边距的话),如果父元素也设置了外边距,塌陷的高度就是两者外边距的较大值 。

解决方案

可以为父元素定义边框       .father{ border :1px  solid  transparent}

可以为父元素定义内边距        .father{padding:1px}

可以为父元素添加overflow:hidden         .father{overflow:hidden}

清除内外边距

网页元素很多都带有默认的内外边距,比如ul的li,而且不同浏览器默认的也不一致,因此在布局前,首先要清除下网页元素的内外边距。

*{
            margin: 0;
            padding: 0;
        }

注意:行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距,但是转换成块级或行内块元素就可以了。 

圆角边框

​编辑

 ​编辑

设置圆角

当length为正方形宽度一半时,盒子就会变成圆形。

下面是原理图

​编辑

也可以设置

border-radius:50%  意思是盒子宽高的一般

圆角矩形

​编辑

div{
        width: 200px;
        height: 100px;
        background-color: pink;
        border-radius:50px;
    }

 也可以分别设置四个角

border-radius: 20px 30px 40px 50px;

也可以写三个值,两个值

也可以单独给每个角设置

​编辑

盒子阴影

​编辑

div{
        width: 200px;
        height: 100px;
        background-color: pink;
        box-shadow: 10px 10px 10px 10px rgb(0,0,0,0.3);
    }

 ​编辑

 第一个值设置正值阴影就往右,设置负值阴影就往左。x轴

第二个值正值往下,负值往上。y轴

第三个值表示虚实效果,数值越大越模糊。

第四个值表示影子大小,值越大影子面子越大。

第五个值是内外阴影,默认是外阴影,inset是内阴影。

影子不会占用空间。

2.浮动

传统网页布局的三种方式(简单说就是盒子如何排)

  • 标准流(文档流/普通流)                                                                                              标签按照规定好的默认方式来排序。如块级元素可以独占一行,行内元素可以一行好多个。
  • 浮动
  • 定位

网页的布局要结合这三种方式才能完成

浮动介绍

语法

​编辑

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

浮动的特性

1.浮动元素会脱离标准流

脱离标准流的控制(浮)移动到指定位置(动)。

浮动的盒子不再保留原先的位置。也就是原先的位置可以被其他元素来占用了。

​编辑

  等车时骚气的Pink老师。飞起来了,原先的位置就被后面的占了。 

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

如果一行显示不开,就会另开一行显示

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

行内元素没有宽高,是由内容决定,所以不能手动设置行内元素的宽高,但给行内元素设置了浮动,就有了行内块元素的性质,也就是说可以设置宽高了。

所以行内元素想要给高度和宽度,除了转为行内块元素,还可以设置浮动。

原先是块级元素,设置浮动后也是行内块元素的特性,块级元素默认宽度是继承父亲的,设置了浮动后,默认宽度就由内容决定了。

4.浮动元素之间没有缝隙是紧挨着的。

如果想有缝隙,那么需要指定margin值。

浮动使用

浮动元素和标准流父级搭配使用

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

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

​编辑

注意

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

先给三个盒子

 ​编辑

  给第二个盒子设置浮动

​编辑

 第一个盒子还是独占一行,第二个盒子浮动了,第三个盒子就向上移动了。

那么1,3盒子设置浮动,而2没有设置浮动是什么效果呢?

​编辑

  2盒子跑到了1盒子下面,3盒子不会影响到他前面标准流盒子,所以会排在下面。

清除浮动

 没有设置浮动,黑色是footer​编辑

 白色和橘色设置浮动

​编辑

 清除浮动(造成的影响)

​编辑

父元素很多时候不方便给高度

 浮动元素的父盒子在子元素数量确定的情况下可以给高度。

如果子元素的数量不确定就不能给高度了。

理想状态是让子盒子撑开父亲,有多少孩子盒子就多高。

但是子元素浮动后,如果不给父元素设置高度会出现问题

父元素的高度会变为0,因为盒子内没有标准流中的元素,并且会影响下面的标准流的盒子。因为他们会往上跑。

清除浮动的本质

本质就是清除浮动元素造成的影响。

如果父盒子本身有高度,则不需要清除浮动。

清除浮动后,父级元素会根据浮动的子盒子自动检测高度,父级就有了高度,就不会影响下面的标准流了。

清除浮动

​编辑

 方法1 

在最后一个浮动元素后面加一个标签,设置这个标签的clear的属性为both。新添加的这个标签必须是块级元素。

​编辑

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <style>
        .box{
            width: 600px;
            background-color: pink;
            margin: 0 auto;
        }
        .box1{
            width: 230px;
            height: 100px;
            background-color: aliceblue;
            float: left;;
        }
        .box2{
            width:250px;
            height: 100px;
            background-color: salmon;
            float: left;
        }
        .footer{
            height: 100px;
            background-color: black;
        }
        .clear{
            clear: both;
        }
    </style>
</head>
<body>
<div class="box">
    <div class="box1"></div>
    <div class="box2"></div>
    <div class="box3"></div>
    <div class="clear"></div>
</div>
<div class="footer"></div>
</body>
</html>

方法2

给父元素设置overflow,属性 hidden,auto,scroll。

hidden缺点是无法显示溢出的部分。

方法3        :after伪元素法

​编辑

 给父元素的添加class为clearfix就可以了,一个标签可以有多个类名通过空格隔开。

相当于格外标签法的升级版

方法4        双伪元素清除浮动

​编辑

 也是给父亲添加的CSS属性

总结

1.多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动。

2.清除浮动要满足的条件

  • 父级没有高度
  • 子盒子浮动了
  • 影响下面布局了

3.定位

定位有什么作用?

可以让某个元素自由的在一个盒子内移动,并压住其他盒子。

定位组成

定位=定位模式+边偏移

定位模式指定一个元素在文档中的定位方式。

边偏移决定该元素的最终位置。

通过top,bottom,left,right四个属性。

定位模式

 ​编辑

静态定位

元素默认的定位方式,意思就是无定位的意思。

静态定位按照标准流特性摆放位置,它没有边偏移。

position:static;

相对定位

相对定位元素在移动位置时,是相对它原来的位置来说的。跟浏览器和父元素没有关系。

position:relative;

原来的位置依然保留,下面的盒子不会跑上去,依然以标准流的方式对待它。

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .box1{
            position: relative;
            top: 100px;
            left: 100px;
            width: 200px;
            height: 200px;
            background-color: pink;
        }
        .box2{
            width: 200px;
            height: 200px;
            background-color: orange;
        }
    </style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>
</html>

​编辑

绝对定位

绝对定位在移动位置时,是相对于祖先元素来说的。

position:absolute;

1.如果没有祖先元素或者祖先元素没有定位(标准流或浮动的盒子) ,则以浏览器为准定位(Document)。

2.如果祖先元素有定位(相对、绝对、固定),就以最近一级有定位的祖先元素为参考点移动位置,即如果父亲没有定位,而爷爷有定位,则以爷爷为参考来移动。如果父亲和爷爷都有,则以父亲为主。

3.绝对位置脱标,不占有原来的位置。

固定定位

将元素固定到浏览器可视区的某个位置,在浏览器滚动时,元素的位置不会改变。

position:fixed;

当浏览器最大化时,浏览器的可视窗口为

​编辑

 当变化浏览器窗口时,可视区也变化

​编辑

 1.元素在移动时,会根据可视窗口进行移动。

2.跟父元素没有关系。

3.不随滚动条的滚动而滚动。

4.固定定位不再占有原先位置

固定定位也是脱标的,固定定位可以看作是特殊的绝对定位,怎么特殊法呢?与父元素无关,永远参照浏览器。

粘性定位

粘性定位可认为是相对定位和固定定位的混合。

​编辑

​编辑

定位模式的应用

子绝父相

​编辑

父亲不能加绝对定位,加了绝对定位是不占有原来位置的,那么下面的元素会上去。

将图片固定到版心右侧

​编辑

​编辑

定位的叠放顺序

在使用定位时,可能会出现盒子的重叠情况。

可使用z-index控制盒子的前后次序(z轴)

​编辑

定位的应用

绝对定位的盒子居中

正常标准流的盒子可以通过margin:0 auto 实现水平居中

但是加了定位的盒子不能通过这句代码实现了,这句代码对加了定位的盒子没有效果。

            position: absolute;
            /*父容器宽度的一半*/
            left: 50%;
            /*设置为盒子宽度的一半让盒子再往左走100px,不能设置margin-right:100px*/
            margin-left: -100px;
            width: 200px;
            height: 200px;

垂直居中也同理,设置top:50%.  margin-top:-100px。

固定定位也可以这样设置。

定位的特性

​编辑

 3.脱标的盒子不会触发外边距塌陷。

所以浮动,绝对定位(固定定位)元素不会触发外边距合并。

定位的拓展

​编辑

五.其他

1.一些需要注意的点

1.宽度继承

       

       

盒子模型中,只给父元素设置了宽和高,子元素没有设置宽和高,那么子元素会继承父元素的宽度,但是高度是0.

不给box2设置宽度默认宽度会继承,设置了就是设置后的大小。

2.设置padding撑开盒子的问题

还是上面的代码

给box1设置宽高为100px。

不给box2设置宽高,给box2设置内边距padding,那么box2的宽度不挤出box1的padding最大值是50px。

给box2设置宽的话,假如设置宽为为20px,那么box2挤出box1的padding最大值是40px。

2.技能点 

居中

让单行文字垂直居中

CSS没有提供文字垂直居中的代码,可以通过让文字行高等于盒子的高度来实现。

为什么可以实现呢?

​编辑

行高的上空隙和下空隙把文字挤到中间了,如果行高小于盒子高度,文字会偏上,行高大于盒子高度,文字偏下。

块级元素居中

让块级盒子水平居中,需要满足两个条件:1.盒子必须指定宽度。2.盒子左右外边距设置为auto。

​编辑

行内元素和行内块元素水平居中对齐,盒子内的文字居中对齐

给其父元素添加text-align:center。

width:100%的应用

让子元素和父元素的宽度一样宽,比如在div中放了张图片,给div设置了宽度,当图片放进去,发现撑开了盒子,这时候给图片设置width:100% ,图片就和父元素盒子一样宽了

隐藏

1.设置display:none;

隐藏的元素所占的位置也没了,下面的元素会上去

再通过display:block来显示元素

2.设置visibility

​编辑

 扔占着原来的位置

3.设置overflow       

对溢出的部分进行显示和隐藏

​编辑

比如用一个盒子装文字,文字太多了挤出盒子一部分,那这一部分就是溢出的 。

​编辑

scorll:显示滚动条来拖动显示

auto:若文字超出则显示滚动条,不超出不显示滚动条