Loading

day 51 前端基础之CSS

1 CSS基础

1.1 CSS介绍

	CSS全称Cascading Style Sheet层叠样式表,是专用用来为HTML标签添加样式的。CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素。当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染)。
        层叠属于CSS的三大特性之一,我们将在后续内容中介绍。
        样式指的是HTML标签的显示效果,比如换行、宽高、颜色等等。
        表指的是我们可以将样式统一收集起来写在一个地方或者一个CSS文件里。

在没有CSS之前,我们想要修改HTML标签的样式则需要为每个HTML标签单独定义样式属性。这么做有下述缺点:
        1、记忆困难:需要记忆每个标签的所有样式相关属性,如果标签没有某个样式相关的属性,那么设置了也没有效果
        2、代码耦合度高:HTML语义与样式耦合到一起
        3、扩展性差:当某一类样式需要修改时,我们需要找到所有设置了该样式标签进行修改,于是CSS应运而生,很好地解决了以上三个问题

1.2 CSS语法

1.2.1 注释:

# 注释
/*单行注释*/

/*
多行注释1
多行注释2
多行注释3
*/
--------------------------------
通常我们在写css样式的时候也会用注释来划定样式区域(因为HTML代码多所以对呀的css代码也会很多)
/*这是博客园首页的css样式文件*/
/*顶部导航条样式*/
...
/*左侧菜单栏样式*/
...
/*右侧菜单栏样式*/
...

1.2.2 CSS的语法结构

选择器 {
      属性1:值1;
      属性2:值2;
      属性3:值3;
      属性4:值4;
}

每个CSS样式由两个组成部分:选择器和声明。声明又包括属性和属性值。每个声明之后用分号结束。

img

1.2.3 CSS的几种引入方式

1.style标签内部直接书写,嵌入式是将CSS样式集中写在网页的<head></head>标签对的<style></style>标签对中。格式如下:
  	<style>
        h1  {
            color: burlywood;
        }
    </style>
    
2.link标签引入外部css文件(最正规的方式,解耦合),外部样式就是将css写在一个单独的文件中,然后在页面进行引入即可。推荐使用此方式。
      <link rel="stylesheet" href="mycss.css">
      
3.行内式(一般不用),行内式是在标记的style属性中设定CSS样式。不推荐大规模使用
  		<h1 style="color: green">老板好 要上课吗?</h1>

css的学习流程

1.先学如何查找标签。css查找标签的方式你一定要学会,因为后面所有的框架封装的查找语句都是基于css来的
		
2.之后再学如何添加样式

2 CSS选择器

2.1 基本选择器

2.1.1 id选择器

<style>
	/*id选择器*/
	#d1 {  
		color: greenyellow;   /*找到id是d1的标签,将文本颜色变成绿黄色*!*/
	 }
</style>
作用:根据指定的id名称,在当前界面中找到对应的唯一一个的标签,然后设置属性

格式:
id名称 {
属性:值;
}

注意点:
1、在企业开发中如果仅仅只是为了设置样式,通常不会使用id,在前端开发中id通常是留给js使用的
2、每个标签都可以设置唯一一个id,id就相当于人/标签的身份证,因此在同一界面内id绝不能重复
3、引用id一定要加#
4、id的命名只能由字符、数字、下划线组成,且不能以数字开头,更不能是html关键字如p,a,img等

2.1.2 类选择器

<style>
	/*类选择器*/
	.c1 {
		color: red;   /*找到class值里面包含c1的标签*!*/
	}
</style>
作用:根据指定的类名称,在当前界面中找到对应的标签,然后设置属性
格式:
.类名称 {
属性:值;
}

注意点:
1、类名就是专门用来给某个特定的标签设置样式的
2、每个标签都可以设置一个或多个class(空格分隔),class就相当于人/标签的名称,因此同一界面内class可以重复
3、引用class一定要加点.
4、类名的命名规则与id的命名规则相同。

2.1.3 元素/标签选择器

<style>
        /*元素(标签)选择器*/
	span {  
 		color: red;  /*找到所有的span标签*!*/
	}
</style>
作用:根据指定的标签名称,在当前界面中找到所有该名称的标签,然后设置属性
格式:
标签名称 {
属性:值;
}

注意点:
1、只要是HTML的标签都能当做标签选择器
2、标签选择器选中的是当前界面中的所有标签,而不能单独选中某一标签
3、标签选择器,无论嵌套多少层都能选中
4、样式类名不要用数字开头(有的浏览器不认)。标签中的class属性如果有多个,要用空格分隔。

2.1.4 通用选择器

<style
        /*通用选择器*/
	* { 
		color: green;   /*将html页面上所有的标签全部找到*!*/
	}
</style>

2.2 组合选择器

在前端,我们将标签的嵌套用亲戚关系来表述层级
	<div>div
        <p>div p</p>
        <p>div p
            <span>div p span</span>
        </p>
        <span>span</span>
        <span>span</span>
  </div>
  div里面的p、span都是div的后代
  p是div的儿子
  p里面的span是p的儿子,是div的孙子
  div是p的父亲
  ...

2.2.1 后代选择器

<style>
        /*后代选择器*/
        div span {
            color: red;
        }
</style>
作用:找到指定标签的所有后代(儿子,孙子,重孙子、、、)标签,设置属性
格式:
标签名1 xxx {
属性:值;
}

注意点:
1、后代选择器必须用空格隔开
2、后代不仅仅是儿子,也包括孙子、重孙子
3、后代选择器不仅仅可以使用标签名称,还可以使用其他选择器比如id或class
4、后代选择器可以通过空格一直延续下去

2.2.2 儿子选择器

<style>
        /*儿子选择器*/
        div>span {
            color: red;
        }
</style>
作用:找到制定标签的所有特定的直接子元素,然后设置属性
格式
标签名1>标签名2 {
属性:值;
}
先找到名称叫做"标签名称1"的标签,然后在这个标签中查找所有直接子元素名称叫做"标签名称2"的元素。

注意点:
1、子元素选择器之间需要用>符号链接,并且不能有空格。比如div >p会找div标签的所有后代标签,标签名为">p"
2、子元素选择器只会查找儿子,不会查找其他嵌套的标签
3、子元素选择器不仅可以用标签名称,还可以使用其他选择器,比如id或class
4、子元素选择器可以通过>符号一直延续下去

2.2.3 毗邻选择器

 <style>
        /*毗邻选择器*/
        div+span {  /*同级别紧挨着的,下面的第一个*!*/
            color: aqua;
        }
</style>
作用:选定紧跟其后的那个标签
格式
选择器1+选择器2 {
属性:值;
}

注意点:
1、毗邻选择器必须通过+号链接
2、毗邻选择器只能选中紧跟其后的那个标签,不能选中被隔开的标签

2.2.4 弟弟选择器

<style>
        /*弟弟选择器*/
        div~span {  /*与自己在同一级别的所有的span*/
            color: red;
        }
</style>
作用:给指定选择器后面的所有选择器中的所有标签设置属性
格式:
选择器1~选择器2 {
属性:值;
}

注意点:
1、通用兄弟选择器必须用~来链接
2、通用兄弟选择器选中的是指选择器后面的某个选择器选中的所有标签,无论有没有被隔开,都可以被选中

2.3 属性选择器

1 含有某个属性
2 含有某个属性并且有某个值
3 含有某个属性并且有某个值的某个标签

属性选择器是以[]作为标志的
[username] { 			 /*将所有含有属性名是username的标签,背景色改为红色*/
background-color: red;
}
---------------------------------------------------------------------------------
[username='jason'] { 	 /*找到所有属性名是username,并且属性值是jason的标签*/
 background-color: orange;
}
---------------------------------------------------------------------------------
input[username='jason'] {  /*找到所有属性名是username,并且属性值是jason的,input标签*/
 background-color: wheat;
}

2.4 伪类选择器

表示选中了一类属性,主要是a、p、input标签

a:link {}
a:hover {}  # 需要记忆
a:active {}
a:visited {}
input:focus {}  # input框获取焦点
点击查看代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <style>
    
        body {
            background-color: black;
        }
        -------------------------------------
        a:link { 		  /*访问之前的状态*/
            color: red;
        }
        a:hover { 		
            color: aqua;     /*鼠标悬浮态*/    /*需要记住*/
        }
        a:active {
            color: black;    /*鼠标点击不松开的状态  激活态*/
        }
        a:visited {
            color: darkgray;  /*访问之后的状态*/
        }
        -------------------------------------
        p {
            color: darkgray;
            font-size: 48px;
        }
        p:hover {
            color: white;
        }
        -------------------------------------
        input:focus {  /*input框获取焦点(鼠标点了input框)*/
            background-color: red;
        }
        
    </style>
</head>

<body>
    <a href="https://www.jd.com/">小轩在不在?</a>
    <p>点我有你好看哦</p>
    <input type="text">
</body>

</html>

2.5 伪元素选择器

表示选中了某一个元素,主要是标签

p:first-letter {}  /*常用的给首字母设置特殊样式*/
p:before {}  /*在每个<p>元素之前插入内容*/
p:after {}  /*在每个<p>元素之后插入内容*/
点击查看代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    -----------------------------------------------------------------------------
    <style>
        p:first-letter {    /*设置字体*/
            font-size: 48px;
            color: orange;
        }
        p:before { 	 /*在文本开头 同css添加内容*/   /*在每个<p>元素之前插入内容*/
            content: '你说的对';
            color: blue;
        }
        p:after {
            content: '雨露均沾';
            color: orange;
        }
    </style>
    -----------------------------------------------------------------------------
</head>

<body>
    <p>装备差进任何本都是血赚,装备差进任何本都是血赚</p>
</body>

</html>
        
ps:before和after通常都是用来清除浮动带来的影响:父标签塌陷的问题(后面马上讲)

2.6 选择器优先级

id选择器、类选择器、标签选择器、行内式

​ 我们上面学了很多的选择器,也就是说在一个HTML页面中有很多种方式找到一个元素并且为其设置样式,那浏览器根据什么来决定应该应用哪个样式呢?

img

​ 除此之外还可以通过添加 !important 方式来强制让样式生效,但并不推荐使用。因为如果过多的使用 !important 会使样式文件混乱不易维护。

点击查看代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <style>
        /*
            1.选择器相同,书写顺序不同
                就近原则:谁离标签更近就听谁的
            2.选择器不同 ...
                行内 > id选择器  > 类选择器 > 标签选择器
                精确度越高越有效
        */
        
        #d1 {                 
            color: aqua;
        }
        -------------------
        .c1 {
           color: orange;*/
        }
        -------------------
        p {
            color: red;
        }
    </style>
    
    <link rel="stylesheet" href="mycss1.css">
</head>

<body>
    <p id="d1" class="c1" style="color: blue">贤妻果然很识趣,有前途~</p>
</body>

</html>

2.7 分组与嵌套

分组:当多个元素的样式相同的时候,我们没有必要重复地为每个元素都设置样式,我们可以通过在多个选择器之间使用逗号分隔的分组选择器来统一设置元素样式。
div, p, span {    /*逗号表示并列关系*/
            color: yellow;
        }
--------------------
嵌套:多种选择器可以混合起来使用,比如:d1内 .c1类内部所有span标签设置字体颜色为橘色。
#d1  .c1  span  {
            color: orange;
        }

2.8 CSS继承

​ 继承是CSS的一个主要特征,它是依赖于祖先-后代的关系的。继承是一种机制,它允许样式不仅可以应用于某个特定的元素,还可以应用于它的后代。例如一个body定义了的字体颜色值也会应用到段落的文本中。

body {
  color: red;
}

​ 此时页面上所有标签都会继承body的字体颜色。然而CSS继承性的权重是非常低的,是比普通元素的权重还要低的0。

​ 我们只要给对应的标签设置字体颜色就可覆盖掉它继承的样式。

p {
  color: green;
}

​ 此外,继承是CSS重要的一部分,我们甚至不用去考虑它为什么能够这样,但CSS继承也是有限制的。有一些属性不能被继承,如:border, margin, padding, background等。

3 CSS声明(属性:值)

3.1 宽和高

width属性可以为元素设置宽度。

height属性可以为元素设置高度。

块级标签才能设置宽度,内联标签的宽度由内容来决定。

<style>
        p {
            background-color: red;
            height: 200px;
            width: 400px;
        }
        span {
            background-color: green;
            height: 200px;
            width: 400px;
            /*行内标签无法设置长宽,就算你写了,也不会生效*/
        }
</style>

3.2 字体属性

​ font-family可以把多个字体名称作为一个“回退”系统来保存。如果浏览器不支持第一个字体,则会尝试下一个。浏览器会使用它可识别的第一个值。

p {
            font-family: "Arial Black","微软雅黑","...";  /*第一个不生效就用后面的 写多个备用*/

            font-size: 24px; 	 /*字体大小*!*/

            font-weight: inherit; 	

            color: red; 	 /*直接写颜色英文*!*/
            color: #ee762e; 	 /*颜色编号*!*/
            color: rgb(128,23,45); 	 /*三基色 数字  范围0-255*!*/
            color: rgba(23, 128, 91, 0.9); 	 /*第四个参数是颜色的透明度 范围是0-1*!*/
        }

/*当你想要一些颜色的时候,可以利用现成的工具
                1 pycharm提供的取色器
                2 qq或者微信截图功能
		3 也可以多软件结合使用 
*/

字重(粗细)

描述
normal 默认值,标准粗细
bold 粗体
bolder 更粗
lighter 更细
100~900 设置具体粗细,400等同于normal,而700等同于bold
inherit 继承父元素字体的粗细值

文本颜色

颜色属性被用来设置文字的颜色。颜色是通过CSS最经常的指定:

  • 十六进制值 - 如: FF0000
  • 一个RGB值 - 如: RGB(255,0,0)
  • 颜色的名称 - 如: red

还有rgba(255,0,0,0.3),第四个值为alpha, 指定了色彩的透明度/不透明度,它的范围为0.0到1.0之间。

3.3 文字属性

文字对齐

text-align 属性规定元素中的文本的水平对齐方式。

描述
left 左边对齐 默认值
right 右对齐
center 居中对齐
justify 两端对齐

文字装饰

text-decoration 属性用来给文字添加特殊效果。

描述
none 默认。定义标准的文本。
underline 定义文本下的一条线。
overline 定义文本上的一条线。
line-through 定义穿过文本下的一条线。
inherit 继承父元素的text-decoration属性的值。
p {	
            text-align: center; 
            text-align: right;
            text-align: left;
            text-align: justify;  
    
            text-decoration: underline;
            text-decoration: overline;
            text-decoration: line-through;
            text-decoration: none;
        }

常用的为去掉a标签默认的自划线:

a {
            text-decoration: none;   /*主要用于给a标签去掉自带的下划线  需要掌握*/
        }

将段落的第一行缩进 32像素

p {
      font-size: 16px;
      text-indent: 32px;
}

3.4 背景图片

/*背景颜色*/
background-color: red;

/*背景图片*/
background-image: url('1.jpg');

/* 背景重复 repeat(默认):背景图片平铺排满整个网页
repeat-x:背景图片只在水平方向上平铺
repeat-y:背景图片只在垂直方向上平铺
no-repeat:背景图片不平铺*/
background-repeat: no-repeat; 

/*背景位置*/
background-position: left top;
background-position: 200px 200px;

支持简写:

background:#336699 url('1.png') no-repeat left top;
点击查看代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <style>
        div {
            height: 800px;
            width: 800px;
            background-color: red;
            
            /*背景图片*/
            background-image: url("222.png");    /*repeat(默认):背景图片平铺排满整个网页,默认要全部铺满*!*/
            background-repeat: no-repeat;   /*背景图片不平铺*/

            background-repeat:repeat-x;   /*背景图片只在水平方向上平铺*/
            background-repeat:repeat-y;   /*背景图片只在垂直方向上平铺 */
            /*其实浏览器不是一个平面 ,是一个三维立体结构,z轴指向用户 越大离用户越近 */
            
            background-position:center center;    /*背景位置,第一个左,第二个上*/

            /*如果出现了多个属性名前缀是一样的情况,一般情况下都可以简写,只写前缀*/
             /*只需要填上你想要加的参数即可,位置没有关系,参数个数也不做限制,加就显示,不加就用默认的设置*/
            background: red  url("222.png")  no-repeat  center center; 
           
        }
    </style>
    
</head>

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

</html>

背景图片小例子:

点击查看代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <style>
        #d1 {
            height: 500px;
            background-color: red;
        }
        #d2 {
            height: 500px;
            background-color: green;
        }
        #d3 {
            height: 500px;
            background-image: url("222.png");
            background-attachment: fixed;
        }
        #d4 {
            height: 500px;
            background-color: aqua;
        }
    </style>
</head>
    
<body>
<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
<div id="d4"></div>
</body>
    
</html>

3.5 边框

边框属性

  • border-width
  • border-style
  • border-color

边框样式

描述
none 无边框。
dotted 点状虚线边框。
dashed 矩形虚线边框。
solid 实线边框。

使用

点击查看代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <style>
        p {
            background-color: red;

            border-width: 5px;
            border-style: solid;
            border-color: green;
        }
        
        div {
            border-left-width: 5px;
            border-left-color: red;
            border-left-style: dotted;

            border-right-width: 10px;
            border-right-color: greenyellow;
            border-right-style: solid;

            border-top-width: 15px;
            border-top-color: deeppink;
            border-top-style: dashed;

            border-bottom-width: 10px;
            border-bottom-color: tomato;
            border-bottom-style: solid;
            
            border: 3px solid red;  /*三者位置可以随意写*/

        }
        
        #d1 {
            background-color: greenyellow;
            height: 400px;
            width: 400px;
            border-radius: 50%;   /*用这个属性能实现圆角边框的效果。将border-radius设置为长或高的一半,即可得到一个圆形。直接写50%即可,长宽一样就是圆,不一样就是椭圆*/
        }
    </style>
    
</head>
    
<body>
    <p>saber.png</p>
    <div>德玛西亚</div>
    <div id="d1"></div>
</body>
    
</html>

3.6 display属性

用于控制HTML元素的显示效果。

意义
display:"none" HTML文档中元素存在,但是在浏览器中不显示。一般用于配合JavaScript代码使用。
display:"block" 默认占满整个页面宽度,如果设置了指定宽度,则会用margin填充剩下的部分。
display:"inline" 按行内元素显示,此时再设置元素的width、height、margin-top、margin-bottom和float属性都不会有什么影响。
display:"inline-block" 使元素同时具有行内元素和块级元素的特点。

display:"none"与visibility:hidden的区别:

​ visibility:hidden: 可以隐藏某个元素,但隐藏的元素仍需占用与未隐藏之前一样的空间。也就是说,该元素虽然被隐藏了,但仍然会影响布局。

​ display:none: 可以隐藏某个元素,且隐藏的元素不会占用任何空间。也就是说,该元素不但被隐藏了,而且该元素原本占用的空间也会从页面布局中消失。

点击查看代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <style>
        #d1 {
            display: none;  /*隐藏标签不展示到前端页面并且原来的位置也不再占有了,但是还存在于文档上*/
            display: inline;  /*将标签设置为行内标签的特点*/
        }
        #d2 {
            display: inline;
        }
        -----------------------------------------------------------------------------------------------
        #d1 {
            display: block;  !*将标签设置成块儿级标签的特点*!
        }
        #d2 {
            display: block;
        }
       ----------------------------------------------------------------------------------------------- 
        #d1 {
            display: inline-block;
        }
        #d2 {
            display: inline-block;  !*标签即可以在一行显示又可以设置长宽*!
        }
        -----------------------------------------------------------------------------------------------
        
    </style>
</head>

<body>
    <div style="display: none">div1</div>
    <div>div2</div>
    <div style="visibility: hidden">单纯的隐藏,位置还在</div>  
    <div>div4</div>

                <!--下面分为三组,分别是三种应用-->
    <div id="d1" style="height: 100px;width: 100px;background-color: red">01</div>
    <div id="d2" style="height: 100px;width: 100px;background-color: greenyellow">02</div>
    -----------------------------------------------------------------------------------------------
    <span id="d1" style="height: 100px;width: 100px;background-color: red">span</span>
    <span id="d2" style="height: 100px;width: 100px;background-color: greenyellow">span</span>
    -----------------------------------------------------------------------------------------------
    <div id="d1" style="height: 100px;width: 100px;background-color: red">01</div>
    <div id="d2" style="height: 100px;width: 100px;background-color: greenyellow">02</div>
</body>

</html>

4 CSS其他知识点

4.1 盒子模型

  • margin: 用于控制元素与元素之间的距离;margin的最基本用途就是控制元素周围空间的间隔,从视觉角度上达到相互隔开的目的。
  • padding: 用于控制内容与边框之间的距离;
  • Border(边框): 围绕在内边距和内容外的边框。
  • Content(内容): 盒子的内容,显示文本和图像。

img

盒子模型
	就以快递盒为例
		快递盒与快递盒之间的距离(标签与标签之间的距离,margin外边距)
		盒子的厚度(标签的边框 border)
		盒子里面的物体到盒子的距离(内容到边框的距离,padding内边距)
		物体的大小(内容 content)
	
	
	如果你想要调整标签与标签之间的距离,你就可以调整margin
	
	浏览器会自带8px的margin,一般情况下我们在写页面的时候,上来就会先将body的margin去除
点击查看代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <style>
    
        body {
            margin: 0;  /*上下左右全是0
            margin: 10px 20px;  		 /* 第一个上下,第二个左右*!*/
            margin: 10px 20px 30px;  	  / *第一个上  ,第二个左右 , 第三个下*!*/
            margin: 10px 20px 30px 40px;  /*上 ,右, 下, 左 。顺时针*/
        }
        ----------------------------------------
        p {
            margin-left: 0;
            margin-top: 0;
            margin-right: 0;*/
            margin-bottom: 0;*/
        }
        ----------------------------------------
        #d1 {
            margin-bottom: 50px;
        }

        #d2 {
            margin-top: 20px;  /*不叠加 只取大的*/
        }
        ----------------------------------------
        #dd {
            margin: 0 auto;  /*只能做到标签的水平居中*/
        }
        ----------------------------------------
        p {
            border: 3px solid red;
            
            padding-left: 10px;
            padding-top: 20px;
            padding-right: 20px;
            padding-bottom: 50px;

            padding: 10px;
            padding: 10px 20px;
            padding: 10px 20px 30px;
            padding: 10px 20px 30px 40px;  /*规律和margin一模一样*/
        }
    </style>
    
</head>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
padding的常用简写方式的方位:
提供一个参数时,用于四边;
提供两个参数时,第一个用于上-下,第二个用于左-右;
如果提供三个参数时,第一个用于上,第二个用于左-右,第三个用于下;
提供四个参数值,将按上-右-下-左的顺序作用于四边;

4.2 浮动

4.2.1 浮动使用

在 CSS 中,任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。

浮动的元素,没有块儿级一说,本身多大浮起来之后就只能占多大。只要是设计到页面的布局一般都是用浮动来提前规划好

关于浮动的两个特点:

  • 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。
  • 由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样。

三种取值:

left:向左浮动

right:向右浮动

none:默认值,不浮动

示例:

点击查看代码
<style>
        body {
            margin: 0;
        }
    
        #d1 {
            height: 200px;
            width: 200px;
            background-color: red;
            float: left;  /*浮动  浮到空中往左飘*/
        }
        
        #d2 {
            height: 200px;
            width: 200px;
            background-color: greenyellow;
            float: right;   /*浮动 浮到空中往右飘*/
        }
</style>

4.2.2 解决浮动带来的影响

清除浮动的副作用(父标签塌陷问题),主要有三种方式:

  • 固定高度
  • 伪元素清除法
  • overflow:hidden

方法1:自己加一个div设置高度

方法2:利用clear属性:clear属性规定元素的哪一侧不允许其他浮动元素。

#d4 {
	clear: left;  /*该标签的左边(地面和空中)不能有浮动的元素*/
	}

clear三种取值:

left:向左浮动

right:向右浮动

none:默认值,不浮动

描述
left 在左侧不允许浮动元素。
right 在右侧不允许浮动元素。
both 在左右两侧均不允许浮动元素。
none 默认值。允许浮动元素出现在两侧。
inherit 规定应该从父元素继承 clear 属性的值。

方法3:通用的解决浮动带来的影响方法。伪元素清除法(使用较多):

在写html页面之前,先提前写好处理浮动带来的影响的 css代码,之后只要标签出现了塌陷的问题,就给该塌陷的标签加一
个clearfix属性即可。这个解决方式是通用的,到哪都一样,并且名字就叫clearfix
            .clearfix:after {
                    content: '';
                    display: block;
                    clear:both;
                } 

4.3 溢出属性

描述
visible 默认值。内容不会被修剪,会呈现在元素框之外。
hidden 内容会被修剪,并且其余内容是不可见的。
scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
inherit 规定应该从父元素继承 overflow 属性的值。
  • overflow(水平和垂直均设置)
  • overflow-x(设置水平方向)
  • overflow-y(设置垂直方向)
p {
            height: 100px;
            width: 50px;
            border: 3px solid red;
    
            overflow: visible;  	/*默认就是可见,溢出部分还是展示*/
            overflow: hidden;  	/*溢出部分直接隐藏*!*/
            overflow: scroll; 	/*设置成上下滚动条的形式*!*/
            overflow: auto;
        }

圆形头像示例

点击查看代码
<!DOCTYPE HTML>
<html>
<head>
      <meta charset="UTF-8">
      <meta http-equiv="x-ua-compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>圆形的头像示例</title>
      <style>
                * {
                      margin: 0;
                      padding: 0;
                      background-color: #eeeeee;
                }
                .header-img {
                      width: 150px;
                      height: 150px;
                      border: 3px solid white;
                      border-radius: 50%;
                      overflow: hidden;
                }
                .header-img>img {
                      width: 100%;
                }
	</style>
</head>

<body>
        <div class="header-img">
        	<img src="https://pic.cnblogs.com/avatar/1342004/20180304191536.png" alt="">
	</div>
</body>
</html>

4.4 定位

4.4.1 分类

  • static(静态定位)

    默认值,无定位,不能当作绝对定位的参照物,并且设置标签对象的left、top等值是不起作用的的。所有的标签默认都是静态的static,无法改变位置

  • relative(相对定位)

    ​ 相对定位是相对于该元素在文档流中的原始位置,即以自己原始位置为参照物。有趣的是,即使设定了元素的相对定位以及偏移值,元素还占有着原来的位置,即占据文档流空间。对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。而其层叠通过z-index属性定义。相对于标签原来的位置做移动relative

  • absolute 绝对定位(常用)

    ​ 定义:设置为绝对定位的元素框从文档流完全删除,并相对于最近的已定位祖先元素定位,如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块(即body元素)。元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。

    ​ 重点:如果父级设置了position属性,例如position:relative;,那么子元素就会以父级的左上角为原始点进行定位。这样能很好的解决自适应网站的标签偏离问题,即父级为自适应的,那我子元素就设置position:absolute;父元素设置position:relative;,然后Top、Right、Bottom、Left用百分比宽度表示。相对于已经定位过的父标签做移动(如果没有父标签那么就以body为参照)

    ​ eg:小米网站购物车

    当你不知道页面其他标签的位置和参数,只给了你一个父标签的参数,让你基于该标签左定位

  • fixed 固定定位(常用)

    ​ fixed:对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性 定义。 注意点: 一个元素若设置了 position:absolute | fixed; 则该元素就不能设置float。这是一个常识性的知识点,因为这是两个不同的流,一个是浮动流,另一个是“定位流”。但是 relative 却可以。因为它原本所占的空间仍然占据文档流。

    ​ 在理论上,被设置为fixed的元素会被定位于浏览器窗口的一个指定坐标,不论窗口是否滚动,它都会固定在这个位置。相对于浏览器窗口固定在某个位置,比如右侧小广告

点击查看代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <style>
        body {
            margin: 0;
        }
        -----------------------------------------------------------------------
        #d1 {
            height: 100px;
            width: 100px;
            background-color: red;
            left: 50px;  /*从左往右    如果是负数 方向则相反*/
            top: 50px;  /*从上往下    如果是负数 方向则相反*/
            position: static;  /*默认是static无法修改位置*!*/
            position: relative;
            /*相对定位
            标签由static变为relative,它的性质就从原来没有定位的标签变成了已经定位过的标签
            虽然你哪怕没有动,但是你的性质也已经改变了
            */
        }
        -----------------------------------------------------------------------
        #d2 {
            height: 100px;
            width: 200px;
            background-color: red;
            position: relative;  /*已经定位过了*/
        }
        #d3 {
            height: 200px;
            width: 400px;
            background-color: yellowgreen;
            position: absolute;
            left: 200px;
            top: 100px;
        }
        -----------------------------------------------------------------------
        #d4 {
            position: fixed;  /*写了fixed之后,定位就是依据浏览器窗口*/
            bottom: 10px;
            right: 20px;

            height: 50px;
            width: 100px;
            background-color: white;
            border: 3px solid black;
        }
    </style>
</head>

4.4.2 验证浮动和定位是否脱离文档流(原来的位置是否还保留)

相对定位
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        .c1 {
             height: 50px;
            width: 100px;
            background-color: dodgerblue;
        }
        .c2 {
             height: 100px;
            width: 50px;
            background-color: orange;
            position: relative;
            left: 100px;
        }
    </style>
</head>
<body>
<div class="c1"></div>
<div class="c2"></div>
<div style="height: 100px;width: 200px;background-color: black"></div>
</body>
</html>
绝对定位
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        .c1 {
            height: 50px;
            width: 100px;
            background-color: red;
            position: relative;
        }
        .c2 {
            height: 50px;
            width: 200px;
            background-color: green;
            position: absolute;
            left: 50px;
        }
    </style>
</head>
<body>
<div class="c1">购物车
    <div class="c2">空空如也~</div>
    <div style="height: 50px;width: 100px;background-color: deeppink"></div>
</div>

</body>
</html>
固定定位
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div class="c1" style="height: 50px;width: 500px;background-color: black"></div>
<div class="c2" style="height: 50px;width: 100px;background-color: deeppink;position: fixed;right: 10px;bottom: 20px"></div>
<div class="c3" style="height: 10px;width: 100px;background-color: green"></div>

</body>
</html>

结论:

  • 脱离文档流:

    ​ 浮动

    ​ 绝对定位

    ​ 固定定位

  • 不脱离文档流:

    ​ 相对定位

4.5 z-index模态框

设置对象的层叠顺序。

  1. z-index 值表示谁压着谁,数值大的压盖住数值小的,
  2. 只有定位了的元素,才能有z-index,也就是说,不管相对定位,绝对定位,固定定位,都可以使用z-index,而浮动元素不能使用z-index
  3. z-index值没有单位,就是一个正整数,默认的z-index值为0如果大家都没有z-index值,或者z-index值一样,那么谁写在HTML后面,谁在上面压着别人,定位了元素,永远压住没有定位的元素。
  4. 从父现象:父亲怂了,儿子再牛逼也没用
点击查看代码
eg:百度登陆页面 其实是三层结构
  1.最底部是正常内容(z=0)  最远的
  2.黑色的透明区(z=99)  	中间层
  3.白色的注册区域(z=100)  离用户最近

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <style>
    
        body {
            margin: 0;
        }
        ----------------
        .cover {
            position: fixed;
            left: 0;
            top: 0;
            right: 0;
            bottom: 0;
            background-color: rgba(0,0,0,0.5);
            z-index: 99;
        }
        ----------------
        .modal {
            background-color: white;
            height: 200px;
            width: 400px;
            position: fixed;
            left: 50%;
            top: 50%;
            z-index: 100;
            
            margin-left: -200px;
            margin-top: -100px;
        }
        
    </style>
</head>

<body>
    <div>这是最底层的页面内容</div>
    <div class="cover"></div>
    <div class="modal">
    <h1>登陆页面</h1>
    <p>username:<input type="text"></p>
    <p>password:<input type="text"></p>
    <button>点我点我~</button>
</div>
</body>

</html>

4.6 透明度opacity

# 它不单单可以修改颜色的透明度还同时修改字体的透明度
rgba只能影响颜色,而opacity可以修改颜色和字体

opacity: 0.5;

4.7 博客园页面搭建

当你在设计页面的时候 先用div划分区域,之后填写基本内容,最后再调节样式
在书写html代码的时候 class、id等属性最好都起的见名知意

[代码](博客园搭建 - maju - 博客园 (cnblogs.com))

posted @ 2021-12-07 16:59  maju  阅读(58)  评论(0)    收藏  举报