一、CSS的四种引入方式
1. 行内式
行内式是在标记的style属性中设定CSS样式。(没有体现CSS优势)
<body>
<p style="color: #cc3399; background-color: greenyellow">
hello yuan
</p>
</body>
2. 嵌入式
嵌入式是将CSS样式 集中写在网页的标签对中的标签对中。以对应的标签名开头。格式如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CSS1</title>
<style>
p{
color: #cc3399;
background-color: greenyellow;
}
</style>
</head>
<body>
<p>
hello yuan
</p>
</body>
</html>
3. 链接式
将一个.css文件引入到HTML文件中,目的是允许多处使用这个.css 文件。
例如: css1.css中:p{
color: #cc3399;
background-color: greenyellow;
}
css.html中:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CSS1</title>
<link href="css1.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<p>
hello yuan
</p>
</body>
</html>
网页:
4. 导入式
将一个独立的.css文件引入HTML文件中,导入式使用CSS规则引入外部CSS文件,
<style type="text/css">
@import"mystyle.css"; #此处要注意.css文件的路径
</style>
链接式和导入式的区别:
导入式在整个网页装载完后再装载CSS文件,如果网页比较大则会先显示无样式的页面。链接式在装载网页body文件前装载CSS文件,因此显示出来的网页直接是带样式的效果的。
推荐使用链接式。
二、 css的选择器(Selector)
“选择器”指明了{}中的“样式”的作用对象,也就是“样式”作用于网页中的哪些元素。
1. 基础选择器
* :通用元素选择器,匹配任何元素
*{ font-size: 30px; }
<head>
<meta charset="UTF-8">
<title>选择器</title>
<style>
*{
font-size: 30px;
}
</style>
</head>
<body>
<p>hello p</p>
<div>hello div</div>
</body>
</html>
E :标签选择器,匹配所有使用E标签的元素
p { color:green; }
<head>
<meta charset="UTF-8">
<title>选择器</title>
<style>
div{
font-size: 30px;
color: #6DDCBD;
}
</style>
</head>
<body>
<p>hello p</p>
<div>hello div</div>
</body>
.info和E.info: class选择器,匹配所有class属性中包含info的元素
.info { background:#ff0; }
p.info { background:blue; }
<head>
<meta charset="UTF-8">
<title>选择器</title>
<style>
.p2{
font-size: 30px;
color: #6DDCBD;
}
</style>
</head>
<body>
<p class="p2">hello p</p>
</body>
#info和E#info id选择器,匹配所有id属性的元素
#info { background:#ff0; } p#info { background:#ff0; }
<head>
<meta charset="UTF-8">
<title>选择器</title>
<style>
#p1{
font-size: 30px;
color: #6DDCBD;
}
</style>
</head>
<body>
<p id="p1">hello p</p>
</body>
class 和 id的区别:
class可以有多个,id只能有1个。
2. 组合选择器
E F 后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分隔
li a { font-weight:bold; }
<head>
<meta charset="UTF-8">
<title>选择器</title>
<style>
div span{
font-size: 30px;
}
</style>
</head>
<body>
<div id="outer">
hello div
<span>hello span</span>
<p>hello p</p>
</div>
</body>
E > F 子元素选择器,匹配所有E元素的子元素F
div > p { color:#f00; }
E + F 毗邻元素选择器,匹配下一个紧随E元素之后的同级元素F
div + p { color:#f00; }
<head>
<meta charset="UTF-8">
<title>选择器</title>
<style>
#outer+p{
font-size: 30px;
}
</style>
</head>
<body>
<p id="p1">hello p1</p>
<div id="outer">hello div</div>
<p>pppp</p>
<p>pppppppp</p>
</body>
E,F 多元素选择器,同时匹配所有E元素或F元素,E和F之间用逗号分隔
div, p { color:#f00; }
<head>
<meta charset="UTF-8">
<title>选择器</title>
<style>
#p1,.s2{
font-size: 30px;
}
</style>
</head>
<body>
<p id="p1">hello p1</p>
<div id="outer">
hello div
<span class="s2">hello span</span>
<p>hello p</p>
</div>
</body>
注意嵌套规则:
a. 块级元素可以包含内联元素或某些块级元素,但内联元素不能包含块级元素,它只能包含其它内联元素。
b. 有几个特殊的块级元素只能包含内联元素,不能包含块级元素。如h1,h2,h3,h4,h5,h6,p,dt
c. li内可以包含div
d. 块级元素与块级元素并列、内联元素与内联元素并列。
3. 属性选择器
E[属性名] 匹配所有具有该属性的E元素,不考虑该属性的值。
注意:E在此处可以省略,比如“[cheacked]”。以下同。)
p[title] { color:#f00; }
<head>
<meta charset="UTF-8">
<title>选择器</title>
<style>
[id]{
font-size: 30px;
color: #cc3399;
}
</style>
</head>
<body>
<div class="div1">hello div1</div>
<div class="div2">hello div2</div>
<div class="div3">hello div3</div>
<div id="id1">hello id1</div>
</body>
E[att=val] 匹配所有att属性等于“val”的E元素。
div[class=”error”] { color:#f00; }
[class="div2"]{
font-size: 30px;
color: #cc3399;
}
E[att~=val] 匹配所有att属性具有多个空格分隔的值、其中一个值等于“val”的E元素
td[class~=”name”] { color:#f00; }
<head>
<meta charset="UTF-8">
<title>选择器</title>
<style>
.div1{
font-size: 30px;
}
.div2{
color: #cc3399;
}
</style>
</head>
<body>
<div class="div1 div2">hello div1</div>
</body>
class可以同时具有两个属性;这两个属性分别表现得效果都被class具有。
由此:
<head>
<meta charset="UTF-8">
<title>选择器</title>
<style>
[class~="div2"]{
background-color: yellow;
}
</style>
</head>
<body>
<div class="div1 div2">hello div1</div>
<div class="div2">hello div2</div>
</body>
E[attr^=val] 匹配属性值以指定值开头的每个元素
div[class^="test"]{background:#ffff00;}
E[attr$=val] 匹配属性值以指定值结尾的每个元素
div[class$="test"]{background:#ffff00;}
E[attr*=val] 匹配属性值中包含指定值的每个元素
div[class*="test"]{background:#ffff00;}
4. 伪类(Pseudo-classes)
CSS伪类是用来给选择器添加一些特殊效果。
anchor伪类:专用
于控制链接的显示效果
a:link(没有接触过的链接),用于定义了链接的常规状态。
a:hover(鼠标放在链接上的状态),用于产生视觉效果。
a:visited(访问过的链接),用于阅读文章,能清楚的判断已经访问过的链接。
a:active(在链接上按下鼠标时的状态),用于表现鼠标按下时的链接状态。
伪类选择器 : 伪类指的是标签的不同状态:
a ==> 点过状态 没有点过的状态 鼠标悬浮状态 激活状态
a:link{color: #cc3399;}
a:hover{color: yellow;}
a:visited{color: purple}
a:active{color: green}
before after伪类
p:before 在每个
元素的内容之前插入内容
p:before{content:“hello”;color:red}
p:after 在每个
元素的内容之前插入内容
p:after{ content:“hello”;color:red}
<head>
<meta charset="UTF-8">
<title>选择器</title>
<style>
p:after{content: "123";color: #cc3399}
</style>
</head>
<body>
<p>hello</p>
</body>
三、 CSS的常用属性
1. 颜色属性
<div style="color:blueviolet">ppppp</div> # 单词
<div style="color:#ffee33">ppppp</div> # RGB颜色对照表(十六进制)
<div style="color:rgb(255,0,0)">ppppp</div> # RGB
<div style="color:rgba(255,0,0,0.5)">ppppp</div> # RGB + 透明度(0-1)
2. 字体属性
font-size: 20px/50%/larger # 字体大小
font-family:'Lucida Bright' # 字体(Times New Roman等)
font-weight: lighter/bold/border/ # 加粗/透明/阴影
font-style: oblique # 斜体
3. 背景属性
background-color: cornflowerblue
background-image: url('1.jpg'); # 图片路径
background-repeat: no-repeat;(repeat:平铺满) # 平铺样式
background-position: right top(20px 20px);(横向:left center right)(纵向:top center bottom)
background-position: center; # 位置
简写:
<body style="background: 20px 20px no-repeat #ff4 url('1.jpg')">
<div style="width: 300px;height: 300px;background: 20px 20px no-repeat #ff4 url('1.jpg')">
<head>
<meta charset="UTF-8">
<title>选择器</title>
<style>
#div1{
height: 600px;
background-color: antiquewhite;
background-image: url("11.jpg");
background-repeat: no-repeat;
background-position: center;
}
</style>
</head>
<body>
<div id="div1"></div>
</body>
注意:如果将背景属性加在body上,要记得给body加上一个height,否则结果异常,这是因为body为空,无法撑起背景图片;另外,如果此时要设置一个width=100px,你也看不出效果,除非你设置出html。
4. 文本属性
font-size: 10px;
text-align: center; # 横向排列(文本居中)
line-height: 50px; # 文本行高 通俗的讲,文字高度加上文字上下的空白区域的高度 50%:基于字体大小的百分比
vertical-align:-4px #设置元素内容的垂直对齐方式 ,只对行内元素有效,对块级元素无效
text-indent: 150px; #首行缩进
letter-spacing: 5px; # 字母间隙
word-spacing: 20px; # 单词间隙
text-transform: capitalize; # 单词首字母大写
<head>
<meta charset="UTF-8">
<title>选择器</title>
<style>
p{
background-color: beige;
font-size: 10px;
text-align: center;
line-height: 50px;
letter-spacing: 5px;
word-spacing: 10px;
text-transform: capitalize;
}
</style>
</head>
<body>
<p>hello world python</p>
5. 边框属性
border-style: solid;
border-color: chartreuse;
border-width: 20px;
简写:border: 30px rebeccapurple solid;
6. 列表属性
ul,ol{ list-style: decimal-leading-zero;
list-style: none; <br> list-style: circle;
list-style: upper-alpha;
list-style: disc; }
7. 外边距和内边 (盒子模型)
margin: 用于控制元素与元素之间的距离;控制元素周围空间的间隔,从视觉角度上达到相互隔开的目的。
padding: 用于控制内容与边框之间的距离;
Border(边框) 围绕在内边距和内容外的边框。
Content(内容) 盒子的内容,显示文本和图像。
元素的宽度和高度:
当您指定一个CSS元素的宽度和高度属性时,你只是设置内容区域的宽度和高度。要知道,完全大小的元素,你还必须添加填充,边框和边距。
margin:10px 5px 15px 20px;-----------上 右 下 左
margin:10px 5px 15px;----------------上 右左 下
margin:10px 5px;---------------------上下 右左
margin:10px; ---------------------上右下左
下面的例子中的元素的总宽度为300px:
width:250px;
padding:10px;
border:5px solid gray;
margin:10px;
块级元素可以设置width、height、margin、padding属性;
内联元素设置width、height属性无效。inline元素的margin和padding属性。
其水平方向的padding-left, padding-right, margin-left, margin-right都产生边距效果;
竖直方向的padding-top, padding-bottom, margin-top, margin-bottom不会产生边距效果。
常见的块级元素有 div、form、table、p、pre、h1~h5、dl、ol、ul 等。
常见的内联元素有span、a、strong、em、label、input、select、textarea、img、br等
8. float(浮动)属性
文档流,指的是元素排版布局过程中,元素会自动从左往右,从上往下的流式排列。
脱离文档流,也就是将元素从普通的布局排版中拿走,其他元素顶替其位置向前正常排列。
只有绝对定位absolute(完全脱离)和浮动float(非完全脱离)才会脱离文档流。
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.div1{
background-color: aqua;
width: 100px;
height: 100px;
float: left;
}
.div2{
background-color: blueviolet;
width: 100px;
height: 100px;
float: left;
}
.div3{
background-color: yellow;
width: 200px;
height: 200px;
}
</style>
</head>
<body>
<div class="div1">111</div>
<div class="div2">222</div>
<div class="div3">333</div>
</body>
部分无视和完全无视的区别?
部分无视:使用float脱离文档流时,其他盒子会无视这个元素,但其他盒子内的文本依然会为这个元素让出位置,环绕在周围。
完全无视:使用absolute position脱离文档流的元素,其他盒子与其他盒子内的文本不会为这个元素让出位置。
注意:当初float被设计的时候就是用来完成文本环绕的效果,所以文本不会被挡住,这是float的特性,即float是一种不彻底的脱离文档流方式。无论多么复杂的布局,其基本出发点均是:“如何在一行显示多个div元素”。
清除浮动:
在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的现象。这个现象叫浮动溢出,为了防止这个现象的出现而进行的CSS处理,就叫CSS清除浮动。
clear语法:
clear: left; # 不允许左边有浮动对象
clear: both; # 不允许有浮动对象
clear: right; # 不允许右边有浮动对象
clear: none; # 默认值。允许两边都可以有浮动对象
9. position(定位)
9.1、 static
static 默认值,无定位,不能当作绝对定位的参照物,并且设置标签对象的left、top等值是不起作用的的。
9.2、relative/absolute
relative 相对定位。
相对定位是相对于该元素在文档流中的原始位置,即以自己原始位置为参照物。有趣的是,即使设定了元素的相对定位以及偏移值,元素还占有着原来的位置,即占据文档流空间。对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。而其层叠通过z-index属性定义。
注意:position:relative的一个主要用法:方便绝对定位元素找到参照物。
absolute 绝对定位。
定义:设置为绝对定位的元素框从文档流完全删除,并相对于最近的已定位祖先元素定位,如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块(即body元素)。元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。
重点:如果父级设置了position属性,例如position:relative;,那么子元素就会以父级的左上角为原始点进行定位。这样能很好的解决自适应网站的标签偏离问题,即父级为自适应的,那我子元素就设置position:absolute;父元素设置position:relative;,然后Top、Right、Bottom、Left用百分比宽度表示。
另外,对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠通过z-index属性定义。
总结:参照物用相对定位,子元素用绝对定位,并且保证相对定位参照物不会偏移即可。
9.3、fixed
fixed:对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性 定义。
注意点: 一个元素若设置了 position:absolute | fixed; 则该元素就不能设置float。这是一个常识性的知识点,因为这是两个不同的流,一个是浮动流,另一个是“定位流”。但是 relative 却可以。因为它原本所占的空间仍然占据文档流。
在理论上,被设置为fixed的元素会被定位于浏览器窗口的一个指定坐标,不论窗口是否滚动,它都会固定在这个位置。
<head>
<style>
.div1{
height: 1500px;
background-color: aquamarine;
}
.div2{
height: 1500px;
background-color: bisque;
}
a{
position: fixed;
bottom: 20px;
right: 20px;
}
</style>
</head>
<body>
<div class="div1"></div>
<div class="div2"></div>
<a>返回顶部</a>
</body>
9.4、 仅使用margin属性布局绝对定位元素
此情况,margin-bottom 和margin-right的值不再对文档流中的元素产生影响,因为该元素已经脱离了文档流。另外,不管它的祖先元素有没有定位,都是以文档流中原来所在的位置上偏移参照物。
Http协议(附)
特点:
- HTTP 超文本传输协议,基于请求模式和响应模式
- HTTP 是无状态协议
(无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。)
当你登录到一个网站时,你的登录状态也是由Cookie或Session来“记忆”的,因为服务器并不知道你是否登录。
URL:统一资源定位符,就是一个网址:协议名://域名:端口/路径
例如:http://www.oldboy.cn:80/index.html
1. 请求协议:
请求首行; // 请求方式 请求路径 协议和版本,例如:GET /index.html HTTP/1.1
请求头信息; // 请求头名称:请求头内容,即为key:value格式,例如:Host:localhost
空行; // 用来与请求体分隔开
请求体。 // GET没有请求体,只有POST有请求体。
1.1 GET请求
HTTP默认的请求方法就是GET
- 没有请求体
- 数据必须在1K之内!
- 请求数据会暴露在浏览器的地址栏中
GET请求常用的操作:
- 在浏览器的地址栏中直接给出URL,那么就一定是GET请求
- 点击页面上的超链接也一定是GET请求
- 提交表单时,表单默认使用GET请求,但可以设置为POST
1.2 POST请求
特点:
- 有请求体
- 数据大小没有上限
- 请求数据不会出现在浏览器的地址栏中
- 请求体中如果存在中文,会使用url编码
POST请求是可以有体的,而GET请求不能有请求体
- Referer:请求来自哪个页面,
例如你在百度上点击链接到了这里,那么Referer:http://www.baidu.com;
如果你是在浏览器的地址栏中直接输入的地址,那么就没有Referer这个请求头了; - Content-Type: application/x-www-form-urlencoded:表单的数据类型,说明会使用url格式编码数据;url编码的数据都是以“%”为前缀,后面跟随两位的16进制。
- Content-Length:13:请求体的长度,这里表示13个字节。
- keyword=hello:请求体内容!hello是在表单中输入的数据,keyword是表单字段的名字。
2.响应协议
2.1 响应内容
格式与请求协议格式对应:
响应首行;
响应头信息;
空行;
响应体。
2.2 状态码
200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
500:请求资源找到了,但服务器内部出现了错误;
302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;