前端之 CSS🤖
css (层叠样式表) : 对html标签的渲染和布局
- 查找 (选择器)
- 操作标签 (属性操作)
导入用 link 标签,后面的href就用你的文件路径就好
写css文件,要单独写到一个文件里面去
推荐 : 链接式
1. 行内式 :
<p style='background-color: black'>hello doubi </p>
2. 嵌入式 : 嵌入式是将CSS样式几种写在网页的<head></head>标签对的<style></style>标签对中. 格式如下:
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
p{
background-color: #2b99ff;
}
</style>
</head>
3. 链接式 : 将一个.CSS文件引入到HTML文件中
<link href="mystyle.css" rel="stylesheet" type="text/css"/>
二. css的选择器(Selector)
'选择器'指明了{}中的'样式'的作用对象,也就是'样式'作用于网页中的哪些元素.
一 .基本选择器
标签选择器 : p{}
id选择器 : #i1{}
class选择器 : .c1{} !!!常用
统配选择器 : *{}
二 .组合选择器
后代选择器
.c2 p{
color : red;
}
所有属于c2类后代的p标签都使用这个样式. 用 空格
子代选择器
.c2>p{
color : red;
}
所有属于c2类的子元素p标签适用. 只适用子元素,孙子元素不能用,兄弟元素也不行. 用>.
毗(pi)邻选择器 :
.c2+p{
color : red;
}
紧随.c2之后的所有同级p标签. 用+.
兄弟选择器 :
.c2~p
##标签嵌套 : 块级元素可以嵌套内联元素或者某些块级元素.但!!!内联元素不可以嵌套块级元素,它只能包含其他内联元素. 再注意 : p标签不可以包含块级元素.
三 .属性选择器 :
E[att] 匹配所有具有att属性的E元素,不考虑它的值。(注意:E在此处可以省略。
比如“[cheacked]”。以下同。) p[title] { color:#f00; }
E[att=val] 匹配所有att属性等于“val”的E元素 div[class=”error”] { color:#f00; }
E[att~=val] 匹配所有att属性具有多个空格分隔的值、其中一个值等于“val”的E元素
td[class~=”name”] { color:#f00; }
E[attr^=val] 匹配属性值以指定值开头的每个元素
div[class^="test"]{background:#ffff00;}
E[attr$=val] 匹配属性值以指定值结尾的每个元素 div[class$="test"]{background:#ffff00;}
E[attr*=val] 匹配属性值中包含指定值的每个元素 div[class*="test"]{background:#ffff00;}
四 .选择器的优先级 :
继承是css的一个主要特征,依赖于祖先>后代的关系.
!!! 任何显示申明的规则都可以覆盖其继承样式。
!!! 有一些属性不能被继承,如:border, margin, padding, background等。
###CSS的优先级 :
所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序。
样式表中的特殊性描述了不同规则的相对权重,它的基本规则是:
1 内联样式表的权值最高 style=""---1000;
2 统计选择符中的ID属性个数。 #id ---100
3 统计选择符中的CLASS属性个数。 .class ---10
4 统计选择符中的HTML标签名个数。 p ---1
按这些规则将数字符串逐位相加,就得到最终的权重,然后在比较取舍时按照从左到右的顺序逐位比较。
🎃🎃🎃CSS的属性操作 : 重点
🤖🤖🤖display :
display:none; --让标签消失
display:inline; 块级标签设置为内联标签
display:block; 内联标签设置为块级标签
注 : 一个内联标签如果设置为块级标签,是不允许它内部嵌套块级元素的.
display:inline-block; 可做列表布局
#具有inline,默认自己有多少占多少
#具有black,可以设置无法设置高度,宽度,padding margin
<div style='background-color:red;display:inline;'>asd</div>
<div style='background-color:red;display:block;'>asd</div>
🤖🤖🤖float :
1 .基本浮动规则 :
先了解一下block和inline温宿在文档流中的排列方式
block元素通常被现实为独立的一块,独占一行,多个block元素会各自新起一行,默认block元素宽度自动填满其父元素宽度。block元素可以设置width、height、margin、padding属性;
inline元素不会独占一行,多个相邻的行内元素会排列在同一行里,直到一行排列不下,才会新换一行,其宽度随元素的内容而变化。inline元素设置width、height属性无效
常见的块级元素有 div、form、table、p、pre、h1~h5、dl、ol、ul 等。
常见的内联元素有span、a、strong、em、label、input、select、textarea、img、br等
所谓的文档流,指的是元素排版布局过程中,元素会自动从左往右,从上往下的流式排列。
脱离文档流,也就是将元素从普通的布局排版中拿走,其他盒子在定位的时候,会当做脱离文档流的元素不存在而进行定位。
假如某个div元素A是浮动的,如果A元素上一个元素也是浮动的,那么A元素会跟随在上一个元素的后边(如果一行放不下这两个元素,那么A元素会被挤到下一行);如果A元素上一个元素是标准流中的元素,那么A的相对垂直位置不会改变,也就是说A的顶部总是和上一个元素的底部对齐。此外,浮动的框之后的block元素元素会认为这个框不存在,但其中的文本依然会为这个元素让出位置。 浮动的框之后的inline元素,会为这个框空出位置,然后按顺序排列。
例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{
margin: 0;
}
.r1{
width: 300px;
height: 100px;
background-color: #7A77C8;
float: left;
}
.r2{
width: 200px;
height: 200px;
background-color: wheat;
/*float: left;*/
}
.r3{
width: 100px;
height: 200px;
background-color: darkgreen;
float: left;
}
</style>
</head>
<body>
<div class="r1"></div>
<div class="r2"></div>
<div class="r3"></div>
</body>
</html>
2 .非完全脱离文档流 :
左右结构div盒子重叠现象,一般是由于相邻两个DIV一个使用浮动一个没有使用浮动。一个使用浮动一个没有导致DIV不是在同个“平面”上,但内容不会造成覆盖现象,只有DIV形成覆盖现象。
那么如何解决呢?
要么都不适用浮动,要么都适用浮动.或者对没有适用float的div设置一个margin样式.
3 .腹父级坍塌现象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
* {
margin:0;padding:0;
}
.container{
border:1px solid red;width:300px;
}
#box1{
background-color:green;float:left;width:100px;height:100px;
}
#box2{
background-color:deeppink; float:right;width:100px;height:100px;
}
#box3{
background-color:pink;height:40px;
}
</style>
</head>
<body>
<div class="container">
<div id="box1">box1 向左浮动</div>
<div id="box2">box2 向右浮动</div>
</div>
<div id="box3">box3</div>
</body>
</body>
</html>
解决办法:
1) 清除浮动 : clean
clear语法:
clear : none | left | right | both
取值:
none : 默认值。允许两边都可以有浮动对象
left : 不允许左边有浮动对象
right : 不允许右边有浮动对象
both : 不允许有浮动对象
但是需要注意的是:clear属性只会对自身起作用,而不会影响其他元素。
把握住两点:1、元素是从上到下、从左到右依次加载的。
2、clear: left;对自身起作用,一旦左边有浮动元素,即切换到下一行来保证左边元素不是浮动的,依据这一点解决父级塌陷问题.
2) 固定高度
<div class="container">
<div id="box1">box1 向左浮动</div>
<div id="box2">box2 向右浮动</div>
<div id="empty" style="height: 100px"></div>
</div>
<div id="box3">box3</div>
这样会很不灵活,因为高度是固定的.
3) overflow:hidden
overflow:hidden的含义是超出的部分要裁切隐藏,float的元素虽然不在普通流中,但是他是浮动在普通流之上的,可以把普通流元素+浮动元素想象成一个立方体。如果没有明确设定包含容器高度的情况下,它要计算内容的全部高度才能确定在什么位置hidden,这样浮动元素的高度就要被计算进去。这样包含容器就会被撑开,清除浮动。
🤖🤖🤖position 定位:
1 .static
static 默认值,无定位,不能当作绝对定位的参照物,并且设置标签对象的left、top等值是不起作用的的。
2 .position: 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属性定义。
#####总结 :参照物用relative相对定位,子元素用absolute绝对定位,并且保证相对定位参照物不会偏移就OK.
3 .position:fixed
先用大白话说一下这个的作用 :
你有没有看过有些页面的最上面会有一个固定导航栏, 不管你页面如何滚动,它总是在页面最上方.就那么静静的看着你,守护着你.
也就是固定在页面的某个位置.
对,就用position:fixed就好了.
fixed:对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性 定义。 注意点: 一个元素若设置了 position:absolute | fixed; 则该元素就不能设置float。这 是一个常识性的知识点,因为这是两个不同的流,一个是浮动流,另一个是“定位流”。但是 relative 却可以。因为它原本所占的空间仍然占据文档流。
在理论上,被设置为fixed的元素会被定位于浏览器窗口的一个指定坐标,不论窗口是否滚动,它都会固定在这个位置。
🤖🤖🤖🤖🤖补充一些比较常用的 :
text-align center 水平居中, right left, opacity 透明度. 是针对文本的
height 高度 ,
width 宽度 像素,百分比,
line-height 垂直方向根据标签高度,
color 字体颜色,
font-size 字体大小,
font-weight 字体加粗
opcity: 0.5 透明度
z-index: 层级顺序
overflow: hidden,auto
hover : 鼠标悬浮到上面发生的状态(如:输入框)
🌈