CSS

1 CSS的定义

css就是层叠样式表(Cascading Style Sheets)

它是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力

简单地说就是给HTML标签添加样式,让它变的更加的好看

2 CSS的注释

# 注释
/*单行注释*/
/*
多行注释1
多行注释2
多行注释3
*/

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

3 CSS的语法结构

# css的语法结构
选择器 {
  属性1:值1;
  属性2:值2;
  属性3:值3;
  属性4:值4;
}

4 CSS的三种引入方式

# css的三种引入方式

1.style标签内部直接书写
  <style>
        h1  {
            color: burlywood;
        }
  </style>
    
    
2.link标签引入外部css文件(最正规的方式 解耦合)
  <link rel="stylesheet" href="mycss.css">
    
    
3.行内式(一般不用)
  <h1 style="color: green">老板好 要上课吗?</h1>

5 CSS选择器

5.1 基本选择器

5.1.1 id选择器

/*id选择器*/

/*找到id是d1的标签 将文本颜色变成绿黄色*/

#d1 {color: greenyellow;}

5.1.2 类选择器

/*类选择器*/

/*找到class值里面包含c1的标签*/

.c1 {color: red;}

5.1.3 元素(标签)选择器

/*元素(标签)选择器*/

/*找到所有的span标签*/

span {color: red;}

5.1.4 通用选择器

/*通用选择器*/

/*将html页面上所有的标签全部找到*/

* {color: green;}

5.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的父亲
  ...
"""

5.2.1 后代选择器

/*后代选择器*/
div span {color: red;}

5.2.2 儿子选择器

/*儿子选择器*/
div>span {color: red;}

5.2.3 毗邻选择器

/*毗邻选择器*/

/*同级别紧挨着的下面的第一个*/

div+span {color: aqua;}

5.2.4 弟弟选择器

/*弟弟选择器*/

/*同级别下面所有的span*/

div~span {color: red;}

5.3 属性选择器

"""
1 含有某个属性
2 含有某个属性并且有某个值
3 含有某个属性并且有某个值的某个标签
"""
# 属性选择器是以[]作为标志的

/*将所有 含有属性名username 的标签 背景色改为红色*/
[username] {background-color: red;}



/*找到所有 含有属性名username 并且 属性值是jason 的标签*/
[username='jason'] { background-color: orange;}



/*找到所有 含有属性名username 并且属性值是jason的input标签*/
/*注意: input后不能加空格*/
input[username='jason'] {background-color: wheat;}

5.4 伪类选择器

/*网址访问前的状态: 		a:link */
a:link {color: yellow}


/*鼠标悬浮在a标签上时的状态: 		a:hover*/
/*需要记住*/
a:hover {color: darkgray}


/*鼠标点击a标签后未松的状态:		a:active*/
a:active {color: aqua}


/*网址浏览后的状态:			a:visited*/
a:visited {color: red}


/*其他标签也能使用悬浮态*/
p:hover {color: blue;}


/*input框获取焦点 状态		(鼠标点击,进入了input框的状态)*/
input:focus {color: yellow;background-color: aqua}

5.5 伪元素选择器

/*修改第一个字的样式,部分符号不算第一个字,即可能连特殊符号和第一个字一起改变样式*/
p:first-letter {font-size: 48px;color: orange;}


/*在p标签开头 用css添加内容   该内容无法选中*/
p:before {content: '你说的对';color: blue;}


/*在p标签末尾 用css添加内容   该内容无法选中*/
p:after {content: '雨露均沾';color: orange;}



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

5.6 选择器的分组与嵌套

/*分组*/
/*逗号表示并列关系*/
div,p,span {color: yellow;}

d1,.c1,span {color: orange;}
/*嵌套*/

div p span {color: yellow;}
/*div标签内的p标签内的span标签 文字改成黄色*/

d1 .c1 span {color: orange;}
/*id为d1的标签内的属于c1类的标签内的span标签 文字改成橘色*/

5.7 选择器优先级

1.选择器相同 使用不同方式选中同一个标签时:
    就近原则:谁离标签更近就听谁的
    因为多次规定同一个标签的样式会产生覆盖的效果
    
    
2.选择器不同 都选中了同一个标签时:
    行内 > id选择器  > 类选择器 > 标签选择器
    精确度越高越有效

6 css属性相关

6.1 高度、宽度属性

/*块儿级标签能设置高度和宽度*/
p {
    background-color: red;
    height: 200px;
    width: 400px;
}



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

6.2 字体属性

字体类型,字体大小,字体粗细,字体颜色

p {
    /*字体类型设置*/
    font-family: "Arial Black","微软雅黑","..."; 
    /*如果第一个不生效,就使用第二个字体类型  可以写多个备用*/
    
    
    
    /*字体大小设置*/
    font-size: 24px;  
    
    
    
    /*字体粗细设置*/
    font-weight: inherit;  
    /*bolder粗 lighter细 也可以写100~900的数字 inherit继承父元素的粗细值*/
    
    
    
    /*字体颜色设置*/
    color: red;      /*1. 直接写颜色英文*/
    color: #ee762e;  /*2. 颜色编号*/
    color: rgb(128,23,45);  /*3. 三基色 数字  范围0-255*/
    color: rgba(23, 128, 91, 0.9);  /*4. 第四个参数是颜色的透明度 范围是0-1*/
    }
    
    
    /*
    
    当你想要查看某种颜色,可以利用现成的工具
        1 pycharm提供的取色器
        2 qq或者微信截图功能
        3 多软件结合使用 
        
    */

6.3 文字属性

文本居中,左对齐,右对齐,两端对齐

文本添加下划线,上划线,删除线,取消装饰线

文本字体大小,文本首行缩进

注意: a标签删除链接的下划线方法

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;
    
    /*在html中 有很多标签渲染出来的样式效果是一样的*/
    
    /*文本字体大小*/
    font-size: 16px;
    /*文本首行缩进*/
    text-indent: 32px;   /*缩进32px*/
    }



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

6.4 背景图片

background-image: url("222.png");

#d1 {
    height: 500px;
    background-color: red;
	}

#d2 {
    height: 500px;
    background-color: green;
	}

#d3 {
    height: 500px;
    /*添加背景图片	background-image: url("222.png");	*/
    background-image: url("222.png");
    
    /*产生高级效果*/
    background-attachment: fixed;
	}

#d4 {
    height: 500px;
    background-color: aqua;
	}


<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
<div id="d4"></div>

6.5 边框

设置 上下左右 边框的 宽度,颜色,边框类型

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%;  /*直接写50%即可 长宽一样就是圆 不一样就是椭圆*/
}




<p>穷人  被diss到了  哭泣.png</p>
<div>妈拉个巴子,妈拉个巴子,妈拉个巴子,妈拉个巴子</div>
<div id="d1"></div>

6.6 display属性

#d1 {
    display: none;    /*隐藏标签不展示到前端页面并且原来的位置也不再占有了 但是还存在于文档上*/
    display: inline;  /*将标签设置为行内标签的特点*/
    display: block;  /*将标签设置成块儿级标签的特点*/
    display: inline-block;  /*标签即可以在一行显示又可以设置长宽*/
}

#d2 {
    display: inline;
}

#d1 {
    display: block;  /*将标签设置成块儿级标签的特点*/
}

#d2 {
    display: block;
}

#d1 {
    display: inline-block;
}

#d2 {
    display: inline-block;  /*标签即可以在一行显示又可以设置长宽*/
}



注意:
<div style="visibility: hidden">单纯的隐藏 位置还在</div>  
这个和display: none;的隐藏不一样



<div style="display: none">div1</div>
<div>div2</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>

6.7 盒子模型

"""
盒子模型
	就以快递盒为例
		快递盒与快递盒之间的距离(标签与标签之间的距离 margin外边距)
		盒子的厚度(标签的边框 border)
		盒子里面的物体到盒子的距离(内容到边框的距离  padding内边距)
		物体的大小(内容 content)
	
	
	如果你想要调整标签与标签之间的距离 你就可以调整margin
	
	浏览器会自带8px的margin,一般情况下我们在写页面的时候,上来就会先将body的margin去除
	
"""

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一模一样
}





<p style="border: 1px solid red;" id="d1">ppp</p>
<p style="border: 1px solid orange;" id="d2">ppp</p>
<div style="border: 3px solid red;height: 400px;width: 400px">
<div id='dd' style="border: 1px solid orange;height: 50px;width: 50px;background-color: blue;"></div>
</div>

<p>ppp</p>

6.8 浮动

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

body {
    margin: 0;
}
#d1 {
    height: 200px;
    width: 200px;
    background-color: red;
    float: left;  /*浮动  浮到空中往左飘*/
}
#d2 {
    height: 200px;
    width: 200px;
    background-color: greenyellow;
    float: right;   /*浮动 浮到空中往右飘*/
}



ps:浏览器是优先展示文本内容的
    如果下层标签中的文本内容被上层标签遮盖住,可能会自动改变形状大小,使文本能被用户看到

6.9 解决浮动带来的影响

# 浮动带来的影响:
# 会造成父标签塌陷的问题

"""
解决浮动带来的影响 推导步骤
	第一种.自己加一个div设置高度
	太麻烦
	
	
	第二种.利用clear属性
		#d4 {
            clear: left;  /*该标签的左边(地面和空中)不能有浮动的元素*/
        }
     还可以改进



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

6.10 溢出属性

标签的内容超出标签的大小时会出现溢出的问题

可以使用overflow属性对超出部分进行设置

p {
height: 100px;
width: 50px;
border: 3px solid red;
overflow: visible;  /*默认就是可见 溢出还是展示*/
overflow: hidden;  /*溢出部分直接隐藏*/
overflow: scroll;  /*设置成上下滚动条的形式*/
overflow: auto;		/*自动设置(滚动条)*/
}

6.11 定位

定位可以有三种定位方法

在未定位前是静态,定位后是另一个状态

left: 20px 左边留20px

right: 20px 右边留20px

top: 20px 上边留20px

bottom: 20px 下边留20px

position: static 无法修改位置

position: relative 相对该标签的原来位置修改 不脱离文档流(不浮动)

position: absolute 以该标签的父类为基准修改 脱离文档流(浮动)

position: fixed 以整个显示页面为基准修改,固定不动 脱离文档流(浮动)

6.11.1 静态static

所有的标签默认都是静态的static,无法改变位置

6.11.2 相对定位 relative

相对于标签原来的位置做移动relative

6.11.3 绝对定位absolute (常用)

相对于已经定位过的父标签做移动(如果没有父标签那么就以body为参照)

eg:小米网站购物车

注意点: 使用绝对定位时, 父标签必须定位过(除了body),不能是静态

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

6.11.4 固定定位fixed (常用)

相对于浏览器窗口固定在某个位置

eg:右侧小广告

/*相对定位*/

#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;
}



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

"""
验证浮动和定位是否脱离文档流
    浮动
    相对定位
    绝对定位
    固定定位
"""

# 不脱离文档流的
  1.相对定位
# 脱离文档流的
  1.浮动
  2.绝对定位
  3.固定定位
  
<div style="height: 100px;width: 200px;background-color: red;position: relative;left: 500px"></div>
<div style="height: 100px;width: 200px;background-color: greenyellow"></div>

<div style="height: 100px;width: 200px;background-color: red;"></div>
<div style="height: 100px;width: 200px;background-color: greenyellow;position: absolute;left: 500px"></div>
<!--当没有父标签做到位 就参照与body-->
<div style="height: 100px;width: 200px;background-color: blue;"></div>

<div style="height: 100px;width: 200px;background-color: red;"></div>
<div style="height: 100px;width: 200px;background-color: greenyellow;position: fixed;bottom: 10px;right: 20px"></div>
<div style="height: 100px;width: 200px;background-color: blue;"></div>

6.13 z-index模态框

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;
            
            /*调完50%后会发现div标签的左上角处于屏幕中间*/
            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>

6.14 透明度opacity

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

opacity: 0.5;
 posted on 2020-05-12 23:44  wwwpy  阅读(138)  评论(0编辑  收藏  举报