11月6日学习内容整理:伪类选择器,CSS属性操作补充
补充:
伪类选择器
伪类的定义是指标签的不同状态
1、anchor伪类:用来控制链接的显示效果
》》a:hover{} 指鼠标悬浮到标签上方时的效果
》》a:link{} 指鼠标没有和标签发生接触时的效果,就是常规状态
》》a:visited{} 指鼠标已经点击过后的效果
》》a:active{} 指鼠标正在点击但是没有松开时的效果
2、before和after伪类
标签名:before 在每个标签之前插入内容
标签名:after 在每个标签之后插入内容
CSS的其它属性操作
一、文本操作属性
》》》用来调整文本和图片的对齐方式
vertivcal-align:baseline(默认是基线)
老师博客:::::
/* font-size: 10px; line-height: 200px; 文本行高 通俗的讲,文字高度加上文字上下的空白区域的高度 50%:基于字体大小的百分比 vertical-align:-4px 设置元素内容的垂直对齐方式 ,只对行内元素有效,对块级元素无效 text-decoration:none text-decoration 属性用来设置或删除文本的装饰。主要是用来删除链接的下划线 font-family: 'Lucida Bright' font-weight: lighter/bold/border/ font-style: oblique text-indent: 150px; 首行缩进150px letter-spacing: 10px; 字母间距 word-spacing: 20px; 单词间距 text-transform: capitalize/uppercase/lowercase ; 文本转换,用于所有字句变成大写或小写字母,或每个单词的首字母大写 */
二、背景属性
》》》背景颜色
background
-
color: cornflowerblue
》》》背景图片
background
-
image: url(
'1.jpg'
);
括号里是图片连接
background
-
repeat: no
-
repeat;(repeat:平铺满)
默认的填充方式若图片比背景小则是重复填充,比背景大就是溢出了,norepeat就是不要重复填充,是多大就占多大
还有repeat-x和repeat-y,分别是按照x轴填充和y轴填充
background
-
position: right top(
20px
20px
);
上面三句可以简写为一句background:地址 填充方式 位置;三种参数顺序没有要求
注意当图片大小和背景大小不符合时,我们应该去调整背景的大小,而不是去拉伸图片
三、边框属性
》》边框宽度
border-width
》》边框的样式(直线虚线之类)
border-style
》》边框的颜色
border-color
上面三句可以简写为一句:border:宽度 样式 颜色 顺序没有要求
》》还可以单独设置一个方向的边框border
-
top
上
border
-
right
右
border
-
bottom
下
border
-
left
左
》》设置边框的形状:
border-radius:30px;设置半径来实现不同的边框形状
四、列表属性
list
-
style
-
type
设置列表项标志的类型。
list-
style
-
image:url("图片的路径") 将图象设置为列表项标志。
list
-
style
-
position 设置列表中列表项标志的位置。
或者直接写
list-style:用于把所有用于列表的属性设置于一个声明中
注意当为none时,代表去掉列表项的标志(空心圆方框之类的)
五、display属性
》》display:none
隐藏属性,不占空间,就是连标签所占的位置都隐藏了
老师博客::::
注意与visibility:hidden的区别:
visibility:hidden可以隐藏某个元素,但隐藏的元素仍需占用与未隐藏之前一样的空间。也就是说,该元素虽然被隐藏了,但仍然会影响布局。
display:none可以隐藏某个元素,且隐藏的元素不会占用任何空间。也就是说,该元素不但被隐藏了,而且该元素原本占用的空间也会从页面布局中消失。
》》display:block
将内联标签转变为块级标签
注意:一个内联元素设置为display:block是不允许有它内部的嵌套块元素。
》》display:inline
将块级标签转变为内联标签
》》display:inline-block
标签的性质变为可以修改长和宽,并且不再独占一行,可以并行显示
注意设置为inline-block后也可以实现两个或多个div标签并行显示,和float属性作用类似,所以要根据实际情况选择恰当的方法
六、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元素,会为这个框空出位置,然后按顺序排列。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!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形成覆盖现象。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> *{ margin: 0; } .r1{ width: 100px; height: 100px; background-color: #7A77C8; float: left; } .r2{ width: 200px; height: 200px; background-color: wheat; } </style> </head> <body> <div class="r1"></div> <div class="r2">region2</div> </body> </html>
>>>>解决方法:要么都不使用浮动;要么都使用float浮动;要么对没有使用float浮动的DIV设置margin样式
七、clear属性
1、作用:为了解决float属性中可能发生的父级坍塌现象;清除浮动
父级坍塌现象:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!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>
例子如上:.container和box3的布局是上下结构,上图发现box3跑到了上面,与.container产生了重叠,但文本内容没有发生覆盖,只有div发生覆盖现象。这个原因是因为第一个大盒子里的子元素使用了浮动,脱离了文档流,导致.container没有被撑开。box3认为.container没有高度(未被撑开),因此跑上去了。
其实就是由于浮动元素脱离文档流的特性,导致父级标签没有实际性的内容,也就没有高度,那下一个标签会紧挨着上一个标签的下方,这就导致元素重叠(元素指的就是html中的每一个标签)
第一个解决办法是给父级标签设置高度,但是一旦限制了高度就定死了,这样页面操作就不灵活了,所以我们采用第二个解决办法清除浮动
2、实现方式
clear:left 不允许左边有浮动元素
clear:right 不允许右边有浮动元素
clear:both 左边和右边都不能有浮动元素
注意:
清除浮动实现的原则:第一点所有的元素都是从上到下依次加载的,一个加载完后才会轮到下一个;第二点是clear是只能对自身做限制,不能让别的元素做出调整。所以在加载浮动元素时首先要看上一个元素是否是浮动的,其次再看是否设置了清除浮动,若是清除左浮动,那就左边不能有任何的浮动元素,若有的话只能到下一行了;同理清除右浮动和both也是一样的,这里就要注意一点,both的话当前标签只能确定自己的位置,只要自己的位置左右两边都没有浮动元素就可以,那么下一个元素在什么位置当前元素是管不了的也是没法知道的,当下一个元素开始加载时若本身没有清除浮动那么就会根据上一个元素是否是浮动的来确定自己的位置,所以有可能发生一个元素是清除both,但是最终所有的元素加载完后它的右边是有浮动元素的,这是因为它在加载时并不知道下一个元素是什么,它只要保证它加载的时候左右两边没有浮动元素
1、position:static
默认参数,无定位,就是正常文档流的位置,不能当作绝对定位的参照物,并且设置标签对象的left、top等值是不起作用的的
2、position:relative
相对定位,没有脱离文档流,空间位置还在别的元素无法占据,参照物是自身之前的位置,可以写left top buttom right来调整位置
3、position:absolute
绝对定位,完全脱离文档流,空间位置会被其它元素占据,参照物已经定位的父标签(注意一定是已经定位的,也就是父标签必须要设置position属性),可以写left top buttom right来调整位置
注意,relative和absolute一般都是配合着用,给父标签relative定位,再给子标签absolute定位
4、position:fixed
固定定位,完全脱离文档流,参照物就是当前可视窗口,意思就是一旦设置了fixed,标签就不会随着滚动条的移动而移动,同样可以写left top buttom right来调整位置
老师博客:::
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属性定义。
示例代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
总结:参照物用相对定位,子元素用绝对定位,并且保证相对定位参照物不会偏移即可。
fixed:对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性 定义。 注意点: 一个元素若设置了 position:absolute | fixed; 则该元素就不能设置float。这 是一个常识性的知识点,因为这是两个不同的流,一个是浮动流,另一个是“定位流”。但是 relative 却可以。因为它原本所占的空间仍然占据文档流。
在理论上,被设置为fixed的元素会被定位于浏览器窗口的一个指定坐标,不论窗口是否滚动,它都会固定在这个位置。
示例代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .pg-header{ height: 48px; width: 100%; background-color: #2459a2; position: fixed; top:0; left: 0; } .left{ position:absolute; left:0; top:48px; bottom:0; width:200px; background-color: #ededed; } .right{ position:absolute; right:0; left:200px; top:48px; bottom:0; overflow:auto; } .content{ height: 2000px; width: 100%; } </style> </head> <body> <div class="pg-header"></div> <div> <div class="left"> </div> <div class="right"> <div class="content"></div> </div> </div> </body> </html>