CSS
CSS解释
css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化,CSS的可以使页面更加的美观,
用来控制网页数据的表现,可以使网页的表现与数据内容分离。基本上所有的html页面都或多或少的使用css。
一,CSS的四中引入方式
1,行内式
行内式是在标记的style属性中设定CSS样式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p style="color: blue">Don't work hard can't want to live!</p> <!--直接在标签上使用--> </body> </html>
2,嵌入式
嵌入式是将CSS样式集中写在网页的<head></head>标签对的<style></style>标签对中
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div{ background-color: fuchsia; /*背景填色*/ color: blue; /*字体填色*/ 200px; height: 100px; /*表框的大小*/ } </style> </head> <body> <p>Hello,word!</p> <div>Progress is not created by contented people.</div> <p>进步不是由满足的人所创造。</p> </body> </html>
3,导入式
将一个独立的.css文件引入HTML文件中,导入式使用CSS规则引入外部CSS文件,<style>标记也是写在<head>标记中。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> @import "CSSQ.css"; </style> </head> <body> <p id="www">Every day is a great day!</p> </body> </html>
#CSSQ.css
#www{ background-color: fuchsia; color: blue; 200px; height: 100px; }
4,链接式
也是将一个.css文件引入到HTML文件中 <link href="mystyle.css" rel="stylesheet" type="text/css"/>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link href="CSSQ.css" rel="stylesheet"> </head> <body> <p>不努力就不能有想要的生活!</p> <p id="www">Don't work hard can't want to live!</p> </body> </html> #CSSQ.css
#www{ background-color: fuchsia; color: blue; 200px; height: 100px; }
注意:
导入式会在整个网页装载完后再装载CSS文件,因此这就导致了一个问题,如果网页比较大则会儿出现先显示无样式的页面,闪烁一下之后,再出现网页的样式。
这是导入式固有的一个缺陷。使用链接式时与导入式不同的是它会以网页文件主体装载前装载CSS文件,因此显示出来的网页从一开始就是带样式的效果的,
它不会象导入式那样先显示无样式的网页,然后再显示有样式的网页,这是链接式的优点。
二 CSS的选择器(Selector)
“选择器”指明了{}中的“样式”的作用对象,也就是“样式”作用于网页中的哪些元素
1 ,基础选择器
1.1 * :通用元素选择器,匹配任何元素
<head> <meta charset="UTF-8"> <title>Title</title> <style> *{ /*通用元素选择器,匹配任何元素*/ background-color: lavender; color: red; font-size: 12px; } </style> </head> <body> <a>Do one thing at a time, and do well.</a> <p>Keep on going never give up.</p> </body> </html>
1.2 E :标签选择器,匹配所有使用E标签的元素p { color:green; }
<head> <meta charset="UTF-8"> <title>Title</title> <style> a{ <!--标签选择器,匹配所有使用a标签的元素--> background-color: lavender; color: red; font-size: 12px; } </style> </head> <body> <a>Do one thing at a time, and do well.</a> <a>one thing at a time.</a> </body> </html>
1.3 class选择器,匹配所有class属性中包含info的元素 .info { background:#ff0; } p.info { background:blue; }
class寻找是可重复的 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .tt{ color: blueviolet; font-size: 30px; } .rr{ /*class选择器,匹配所有class属性中包含rr的元素*/ color: brown; font-size: 10px; } </style> </head> <body> <p class="tt rr">Keep on going never give up.</p> <!--tt rr 是两个标签名字--> <!--下面覆盖上面,右边覆盖左边--> <p class="ss rr">Whatever is worth doing is worth doing well.</p> <!--公共部分一样修饰,非公共部分各自修饰--> </body> </html>
1.4 id选择器,匹配所有id属性等于footer的元素
id 寻找是唯一的 <head> <meta charset="UTF-8"> <title>Title</title> <style> #qwe{ /*id选择器,匹配所有id属性等于qwe的元素*/ background-color: lavender; color: red; font-size: 12px; } </style> </head> <body> <a>Do one thing at a time, and do well.</a> <p>Keep on going never give up.</p> <p id="qwe">Whatever is worth doing is worth doing well.</p> </body> </html>
&
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div.rr{ /*class选择器,匹配所有class属性中只对drv class="rr"的元素修饰*/ color: red; font-size: 20px; } </style> </head> <body> <div>Action speak louder than words.</div> <p class="tt rr">Keep on going never give up.</p> <!--tt rr 是两个标签名字--> <!--下面覆盖上面,右边覆盖左边--> <div class="rr">Believe in yourself.</div> <p class="rr">Whatever is worth doing is worth doing well.</p> </body> </html>
2, 组合选择器
2.1 E,F 多元素选择器,同时匹配所有E元素或F元素,E和F之间用逗号分隔
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div,p{ /*对div和p标签进行装饰*/ font-size: 20px; color: yellow; } </style> </head> <body> <p>sssssssss</p> <div>oooo</div> <p class="rr">ttttttt</p> <div>Hello,word!</div> </body> </html>
效果如下:
2.2 E F 后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分割
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div p{ /*div p 表示对div的子代p标签进行装饰*/ font-size: 20px; color: yellow; } </style> </head> <body> <div class="r1">hello1 <div class="r2">hello2 <p>hello4</p> </div> <div>hello3</div> </div> </body> </html>
效果如下:
2.3 E>F 子元素选择器,匹配所有E元素的子元素F
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .div1>p{ /*子元素选择器,匹配所有div1元素的子元素p*/ background-color: cornflowerblue; color: blue; } .main2>div{ /*子元素选择器,匹配所有main2元素的子元素div*/ background-color: brown; color: yellow; } </style> </head> <body> <div class="div1"> I can because i think i can. <div class="div2"> Action speak louder than words. <div>Never say die.</div> </div> <p>Judge not from appearances.</p> </div> <p>Kings have long arms.</p> <hr> <!--水平线--> <div class="main2">我行,因为我相信我行! <div> 行动胜于言语! <div> 普天之下,莫非王土。 </div> </div> <div> 永不气馁! </div> </div> </body> </html>
效果如下:
2.4 E+F 毗邻元素选择器,匹配所有紧随E元素之后的同级元素F
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .r2+div{ font-size: 30px; color: pink; } </style> </head> <body> <div class="r1">hello1 <div class="r2">hello2 <p>hello4</p> </div> <div>hello3</div> </div> </body> </html>
效果如下:
注意嵌套规则:
1,块级元素可以包含内联元素或是某些块级元素,但内联元素不能包含块级元素,它只能包含其他内联元素。
2,块级元素不能放在p标签里面
3,有几个特殊的块级元素只能包含内联元素,不能包含块级元素。如h1,h2,h3,h4,h5,h6,p,dt
4,li内可以包含div
5,块级元素与块级元素并列、内联元素与内联元素并列。(错误的:<div><h2></h2><span></span></div>)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> [suoning]{ color: blueviolet; } .he>div{ color: bisque; } </style> </head> <body> <div class="he">111 <p class="fr">222 <div>333</div> </p> <div>444</div> </div> *************************** <div suoning="sb">ddd <p>pppp</p> </div> <p suoning="sb2">ddd2 <p>pppp2</p> </p> </body> </html>
3 属性选择器
3.1 E[att] 匹配所有具有att属性的E元素,不考虑它的值。(注意:E在此处可以省略,比如“[cheacked]”。以下同。)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> [son]{ /*匹配具有son属性的元素进行修饰*/ font-size: 40px; color: yellow; } </style> </head> <body> <div son="boy"> I can because i think i can.</div> </body> </html>
效果如下:
3.2 E[att=val] 匹配所有att属性等于“val”的E元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> [son="girl"]{ /*匹配定义的并进行修饰*/ font-size: 40px; color: yellow; } </style> </head> <body> <div son="boy"> I can because i think i can.</div> <div son="girl">Kings have long arms.</div> </body> </html>
效果如下:
3.3 E[att~=val] 匹配所有att属性具有多个空格分隔的值、其中一个值等于“val”的E元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> [son~="girl"]{ /*加上~,只需要通过某一个定义名找到并修饰*/ font-size: 40px; color: yellow; } </style> </head> <body> <div son="boy girl"> I can because i think i can.</div> <!--<div son="girl">Kings have long arms.</div>--> </body> </html>
效果如下:
3.4 E[att|=val] 匹配所有att属性具有多个连字号分隔(hyphen-separated)的值、其中一个值以“val”开头的E元素,主要用于lang属性, 比如“en”、“en-us”、“en-gb”等等
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> [son|="boy"]{ /*加上|,(定义的属性名字用的是-连接;如:boy-girl)匹配到boy开头的属性并进行修饰*/ font-size: 40px; color: yellow; } </style> </head> <body> <div son="boy-girl"> I can because i think i can.</div> <div son="girl">Kings have long arms.</div> </body> </html>
效果如下:
“en”、“en-us”、“en-gb”
<!DOCTYPE html> <html >
/*去掉了全局修饰*/ <head> <meta charset="UTF-8"> <title>Title</title> <style> [son|="en"]{ /*“en”、“en-us”、“en-gb”*/ font-size: 40px; color: yellow; background-color: aqua; } </style> </head> <body> <div son="en-us"> I can because i think i can.</div> <div son="girl">Kings have long arms.</div> </body> </html>
3.5 E[attr^=val] 匹配属性值以指定值开头的每个元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> [son^="en"]{ /* ^ 匹配属性值以指定值开头的每个元素 */ font-size: 40px; color: yellow; background-color: aqua; } </style> </head> <body> <div son="enus"> I can because i think i can.</div> <div son="girl">Kings have long arms.</div> </body> </html>
3.6 E[attr$=val] 匹配属性值以指定值结尾的每个元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> [son$="us"]{ /* $ 匹配属性值以指定值结尾的每个元素 */ font-size: 40px; color: yellow; background-color: aqua; } </style> </head> <body> <div son="enus"> I can because i think i can.</div> <div son="girl">Kings have long arms.</div> </body> </html>
3.7 E[attr*=val] 匹配属性值中包含指定值的每个元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> [son*="nu"]{ /* * 匹配属性值以指定值的任意元素 */ font-size: 40px; color: yellow; background-color: aqua; } </style> </head> <body> <div son="enus"> I can because i think i can.</div> <div son="girl">Kings have long arms.</div> </body> </html>
3.8 p:before 在每个 <p> 元素的内容之前插入内容
p:after 在每个 <p> 元素的内容之前插入内容
<!DOCTYPE html> <html lang="en-us"> <head> <meta charset="UTF-8"> <title>Title</title> <style> p{ background-color: aliceblue; color: blueviolet; } p:before{ content: "开始:"; color: red; } p:after{ content: "结束"; color: red; } </style> </head> <body> <div langs="enus">Learn to walk before you run.</div> <p>Let bygones be bygones.</p> <p>Life is but a span.</p> </body> </html>
效果如下:
4 伪类选择器
伪类选择器: 专用于控制链接的显示效果,伪类选择器:
a:link(没有接触过的链接),用于定义了链接的常规状态。 line-height内容高度
a:hover(鼠标放在链接上的状态),用于产生视觉效果。
a:visited(访问过的链接),用于阅读文章,能清楚的判断已经访问过的链接。
a:active(在链接上按下鼠标时的状态),用于表现鼠标按下时的链接状态。
伪类选择器 : 伪类指的是标签的不同状态:
a ==> 点过状态 没有点过的状态 鼠标悬浮状态 激活状态
a:link {color: #FF0000} /* 未访问的链接 */
a:visited {color: #00FF00} /* 已访问的链接 */
a:hover {color: #FF00FF} /* 鼠标移动到链接上 */
a:active {color: #0000FF} /* 选定的链接 */ 格式: 标签:伪类名称{ css代码; }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style type="text/css"> a:link{ color: red; } a:visited { color: blue; } a:hover { color: green; } a:active { color: yellow; } </style> </head> <body> <a href="01-hello-world.html">hello-world</a> </body> </html>
三 CSS的常用属性
1 颜色属性
1.1 <div style="color:blueviolet">ppppp</div>
1.2 <div style="color:#ffee33">ppppp</div>
1.3 <div style="color:rgb(255,0,0)">ppppp</div>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> p{ color: rgb(25,200,0); /*调色*/ } </style> </head> <body> <p>Let bygones be bygones.</p> </body> </html>
1.4 <div style="color:rgba(255,0,0,0.5)">ppppp</div>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> p{ color: rgba(255,0,0,0.5); /*rgba中的a(0-1),表示透明度*/ } </style> </head> <body> <p>Let bygones be bygones.</p> </body> </html>
2 字体属性
font-size: 20px/50%/larger
font-family:'Lucida Bright'
font-weight: lighter/bold/border/
<h1 style="font-style: oblique">老男孩</h1> #字体倾斜度
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .a{ font-size: 30px; /*文本大小*/ font-family: 宋体; /*字体*/ font-weight: 100; /*字体深度“加粗”*/
letter-spacing:8px;
/*字间距为8px*/ } .b{ font-weight: 800; } </style> </head> <body> <p class="a">alex</p> <p class="b">alex</p> </body> </html>
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)
简写:<body style="background: 20px 20px no-repeat #ff4 url('1.jpg')">
<div style=" 300px;height: 300px;background: 20px 20px no-repeat #ff4 url('1.jpg')">
注意:如果讲背景属性加在body上,要记得给body加上一个height,否则结果异常,这是因为body为空,无法撑起背景图片,另外,如果此时要设置一个
width=100px,你也看不出效果,除非你设置出html。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> html{ background-color: antiquewhite; } body{ /* 600px;*/ height: 600px; background-color: yellowgreen; /*背景颜色*/ background-image: url(1.png); /*添加背景图片*/ background-repeat: repeat-x; /*x轴排列*/ background-repeat: repeat-y; /*y轴排列*/ background-repeat: no-repeat; /*图片位置在左上角*/ background-position: center center; /*两个参数,从而控制图片位置*/ /*top上;bottom下;left左;right右;center中*/ } </style> </head> <body> </body> </html>
4 文本属性:
font-size: 10px;
text-align: center;横向排列
line-height: 200px;文本行高 通俗的讲,文字高度加上文字上下的空白区域的高度 50%:基于字体大小的百分比
text-indent: 150px; 首行缩进,50%:基于父元素(weight)的百分比
letter-spacing: 10px; 控制字母之间的句离
word-spacing: 20px; 控制单词见得距离
direction: rtl; 文本从右往左写
text-transform: capitalize; 控制首字母大写
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div{ background-color: aqua; /*背景颜色*/ height: 200px; /*作用域高度*/ font-size: 20px; /*文本大小*/ text-align: center; /*文本靠上居中*/ line-height: 200px; /*文本离上200px居中*/ text-indent: 30px; /*首行缩进;*/ /*letter-spacing: 10px*/ /*控制字母间的距离*/ word-spacing: 100px /*控制单词间的距离*/
text-transform:capitalize
/*控制首字母大写*/
cursor:pointer;
/*鼠标放上变小手*/
} </style> </head> <body> <div>Let bygones be bygones.</div> </body> </html>
&
简写:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div{ height: 800px; /*background-color: aquamarine;*/ /*background-image: url(1.png);*/ /*background-repeat: no-repeat;*/ /*background-position: center center;*/ background: no-repeat yellow url(1.png) center; /*上面注释的可以简写为一行*/ } </style> </head> <body> <div> I can because i think i can.</div> </body> </html>
5 边框属性:
border-style: solid; 边框线样式;solid表示实线 dashed表示虚线
border-color: chartreuse; 边框颜色
border- 20px; 边框宽度
简写:border: 30px rebeccapurple solid;
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div{ background: chartreuse; height: 300px; 300px; border: solid 5px red; /*边框;solid表示实线 5px边框宽度 边框颜色*/ } </style> </head> <body> <div> </div> </body> </html>
6 列表属性
ul,ol{ list-style: decimal-leading-zero;
list-style: none;
list-style: circle;
list-style: upper-alpha;
list-style: disc; }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> ul{ list-style: decimal-leading-zero /*列表前是数字 01. 11111这个样式*/ list-style: circle /*列表前是空心园*/ list-style: upper-alpha /*列标签是字母*/ list-style: disc /*列表前是实心园*/ list-style: none; /*去掉列表排序是的实心点*/ } </style> </head> <body> <ul> <li>11111</li> <li>22222</li> <li>33333</li> <li>44444</li> </ul> </body> </html>
7 dispaly属性
none 隐藏
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> p{ background-color: yellow; display: inline; /*把块级标签变成内联标签*/ display: none; /*隐藏该标签*/ } span{ background-color: yellow; display:block; /*把内联标签变成块级标签*/ } </style> </head> <body> <span> I can because i think i can. </span> <p>Hello,word!</p> </body> </html>
block 把内联标签变成块级标签
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> span{ background-color: yellow; display:block; /*把内联标签变成块级标签*/ } </style> </head> <body> <span> I can because i think i can. </span> </body> </html>
inline 把块级标签变成内联标签
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> p{ background-color: yellow; display: inline; /*把块级标签变成内联标签*/ } </style> </head> <body> <p> I can because i think i can. </p> </body> </html>
ps:inline-block属性 可以设置高度、宽度
8 盒子模型
CSS 框模型 (Box Model) 规定了元素框处理元素内容、内边距、边框 和 外边距 的方式。
内边距、边框和外边距都是可选的,默认值是零。
-
element : 元素。
-
padding : 内边距。
-
border : 边框。
-
margin : 外边距。
1,padding 内边距
用于控制内容与边框之间的距离;
分别设置上、右、下、左内边距:
padding-top 元素的上内边距
padding-right 元素的右内边距
padding-botton 元素的下内边距
padding-left 元素的左内边距
h1 { padding-top: 10px; padding-right: 0.25em; padding-bottom: 2ex; padding-left: 20%; }
2,border 边框
边框在默认情况下会定位于浏览器窗口的左上角
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 属性 描述 2 border 简写属性,用于把针对四个边的属性设置在一个声明。 3 border-style 用于设置元素所有边框的样式,或者单独地为各边设置边框样式。 4 border-width 简写属性,用于为元素的所有边框设置宽度,或者单独地为各边边框设置宽度。 5 border-color 简写属性,设置元素的所有边框中可见部分的颜色,或为 4 个边分别设置颜色。 6 border-bottom 简写属性,用于把下边框的所有属性设置到一个声明中。 7 border-bottom-color 设置元素的下边框的颜色。 8 border-bottom-style 设置元素的下边框的样式。 9 border-bottom-width 设置元素的下边框的宽度。 10 border-left 简写属性,用于把左边框的所有属性设置到一个声明中。 11 border-left-color 设置元素的左边框的颜色。 12 border-left-style 设置元素的左边框的样式。 13 border-left-width 设置元素的左边框的宽度。 14 border-right 简写属性,用于把右边框的所有属性设置到一个声明中。 15 border-right-color 设置元素的右边框的颜色。 16 border-right-style 设置元素的右边框的样式。 17 border-right-width 设置元素的右边框的宽度。 18 border-top 简写属性,用于把上边框的所有属性设置到一个声明中。 19 border-top-color 设置元素的上边框的颜色。 20 border-top-style 设置元素的上边框的样式。 21 border-top-width 设置元素的上边框的宽度。
3,margin 外边距
用于控制元素与元素之间的距离
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
属性 描述 margin 简写属性。在一个声明中设置所有外边距属性。 margin-bottom 设置元素的下外边距。 margin-left 设置元素的左外边距。 margin-right 设置元素的右外边距。 margin-top 设置元素的上外边距。
margin 属性接受任何长度单位,可以是像素、英寸、毫米或 em。
margin 可以设置为 auto。更常见的做法是为外边距设置长度值
值复制:
- 如果缺少左外边距的值,则使用右外边距的值。
- 如果缺少下外边距的值,则使用上外边距的值。
- 如果缺少右外边距的值,则使用上外边距的值。
h2 { margin-top: 20px; margin-right: 30px; margin-bottom: 30px; margin-left: 20px; } 简写: h2{margin: 20px 30px 30px 20px;}
注意1:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .div1{ background-color: aqua; 300px; height: 300px; } .div2{ background-color: blueviolet; 100px; height: 100px; } </style> </head> <body> <div class="div1"> <div class="div2"></div> <div class="div2"></div> </div> </body> </html>
边框在默认情况下会定位于浏览器窗口的左上角,但是并没有紧贴着浏览器的窗口的边框,
这是因为body本身也是一个盒子(外层还有html),在默认情况下,
body距离html会有若干像素的margin,具体数值因各个浏览器不尽相同,
所以body中的盒子不会紧贴浏览器窗口的边框了,为了验证这一点,加上
body{ border: 1px solid; background-color: cadetblue; } >>>>解决方法: body{ margin: 0; }
注意2:margin collapse(边界塌陷或者说边界重叠)
外边距的重叠只产生在普通流文档的上下外边距之间,这个看起来有点奇怪的规则,其实有其现实意义。
设想,当我们上下排列一系列规则的块级元素(如段 落P)时,那么块元素之间因为外边距重叠的存在,
段落之间就不会产生双倍的距离。又比如停车场
1)兄弟div:
上面div的margin-bottom和下面div的margin-top会塌陷,也就是会取上下两者margin里最大值作为显示值
2)父子div
if 父级div中没有 border,padding,inline content,子级div的margin会一直向上找,直到找到某个标签包括border,padding,inline content 中的其中一个,然后按此div 进行margin ;
<!DOCTYPE html> <html lang="en" style="padding: 0px"> <head> <meta charset="UTF-8"> <title>Title</title> <style> body{ margin: 0px; } .div1{ background-color: aqua; 300px; height: 300px; } .div2{ background-color: blueviolet; 100px; height: 100px; margin: 20px; } </style> </head> <body> <div style="background-color: cadetblue; 300px;height: 300px"></div> <div class="div1"> <div class="div2"></div> <div class="div2"></div> </div> </body> </html>
解决方法:
1: border:1px solid transparent 2: padding:1px 3: over-flow:hidden;
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> body{ margin: 0px; /*border: solid red 3px;*/ } .outer{ 600px; height: 600px; background-color: antiquewhite; border: 1px solid transparent; /*padding-top: 100px;*/ /*padding-left: 100px;*/ } .inner{ 100px; height: 100px; background-color: rebeccapurple; /*margin-top: 100px;*/ /*margin-left: 100px;*/ margin: 20px; } </style> </head> <body> <div class="outer"> <div class="inner"></div> <div class="inner"></div> </div> </body> </html>
9 float 浮动
浮动可以理解为让某个div元素脱离标准流,漂浮在标准流之上,和标准流不是一个层次。
左浮动(float:left;),可以理解为漂浮起来后靠左排列,
右浮动(float:right;)当然就是靠右排列。这里的靠左、靠右是说页面的左、右边缘。
元素浮动之前,也就是在标准流中,是竖向排列的,而浮动之后可以理解为横向排列。
清除浮动可以理解为打破横向排列。
清除浮动的关键字是clear,官方定义如下:
语法:
clear : none | left | right | both
取值:
none : 默认值。允许两边都可以有浮动对象
left : 不允许左边有浮动对象
right : 不允许右边有浮动对象
both : 不允许有浮动对象
对于CSS的清除浮动(clear),一定要牢记:这个规则只能影响使用清除的元素本身,不能影响其他元素。
10 position 定位
position 属性值的含义:
1 static,默认值 static:无特殊定位,对象遵循正常文档流。 top,right,bottom,left等属性不 会被应用。 说到这里我们不得不提一下一个定义——文档流,文档流其实就是文档的输出顺序, 也就是我们通常看到的由左 到右、由上而下的输出形式,在网页中每个元素都是按照这个顺序进行排序和显示的,而float和position两个属性可以将元素从文档流脱离出来显示。 默认值就 是让元素继续按照文档流显示,不作出任何改变。 2 position:relative relative:对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。而其层叠通过z-index属性定义。 3 absolute:对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠通过z-index属性定义。 如果设定 position:relative,就可以使用 top,bottom,left和 right 来相对于元素在文档中应该出现的位置来移动这个元素。[意思是元素实际上依然占据文档 中的原有位置,只是视觉上相对于它在文档中的原有位置移动了] 当指定 position:absolute 时,元素就脱离了文档[即在文档中已经不占据位置了],可以准确的按照设置的 top,bottom,left 和 right 来定位了。 如果一个元素绝对定位后,其参照物是以离自身最近元素是否设置了相对定位,如果有设置将以离自己最近元素定位,如果没有将往其祖先元素寻找相对定位元素, 一直找到html为止。 4 position:fixed 在理论上,被设置为fixed的元素会被定位于浏览器窗口的一个指定坐标,不论窗口是否滚动,它都会固定在这个位置。 fixed:对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性 定义。 注意点: 一个元素若设置了 position:absolute | fixed; 则该元素就不能设置float。这 是一个常识性的知识点,因为这是两个不同的流,一个是浮动流, 另一个是“定位流”。但是 relative 却可以。因为它原本所占的空间仍然占据文档流。
- 1)static
- 元素框正常生成。块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。
- 2)relative
- 元素框偏移某个距离。元素仍保持其未定位前的形状,它原本所占的空间仍保留。
-
<head> <meta charset="UTF-8"> <title>shuaige</title> <style> #sub1 { position: relative; padding: 5px; top: 5px; left: 5px; } </style> </head> <body> <div id="parent"> <div style="background-color:blueviolet;" id="sub1">sub1</div> <div style="background-color:blue;" id="sub2">sub2</div> </div> </body>
- 3)absolute
- 元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。
-
当sub1的position设置为absolute后,其到底以谁为对象进行偏移呢?这里分为两种情况:
- 当sub1的父对象(或曾祖父,只要是父级对象)parent也设置了position属性,且position的属性值为absolute或者relative时,也就是说,不是默认值的情况,此时sub1按照这个parent(在父对象内)来进行定位。
- 如果sub1不存在一个有着position属性的父对象,那么那就会以body为定位对象,按照浏览器的窗口进行定位,这个比较容易理解
代码:
<div style="position:relative;background-color: blue;height:100px;"> <!--当sub1的父对象(或曾祖父,只要是父级对象)parent也设置了position属性--> <div style="position:absolute;right: 0px;bottom:0px;background-color: blueviolet">su1</div> </div>
&
<div style="background-color: blueviolet;height: 2000px;"> <!--如果父对象内没有,positionabsolute或者relative时,那么会按照你打开网页时的位置进行固定,然后滑动浏览器的时候也随之变化--> <div style="position:absolute;right: 30px;bottom: 30px;"> su1 </div> </div>
- 4)fixed
- 元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。
-
<body> <div style="height:2000px;background-color: blueviolet;"> <!--这里设置position:fixed 并且靠右边和底部各30px--> <a style="position: fixed;right: 30px;bottom: 30px;"> 跳转到顶部 </a> </div> </body>
11 background-position 图片位移
俗称:抠图
在实际的生产环境中咱们在网页上看到的小图片不是一个一个的零散的小图片的,咱们只是看到了大图片的一部分
<style> .chuangkou{ /*定义一个图片*/ background-image: url('content_images.jpg'); /*定义一个窗口,指定长和宽*/ height: 30px; 30px; /*设置图片不重复*/ background-repeat:no-repeat; background-position: 3px 10px ; } </style> <body> <div class="chuangkou"> </div> </body>
12 overflow 样式
增加overflow样式,滚动菜单
效果就会,在div块级标签内有个滚动条
代码如下:
<div style="overflow:auto;height:100px;background-color:green;"> tianshuai <br/> tianshuai <br/> tianshuai <br/> tianshuai <br/> tianshuai <br/> tianshuai <br/> tianshuai <br/> tianshuai <br/> tianshuai <br/> tianshuai <br/> tianshuai <br/> tianshuai <br/> tianshuai <br/> tianshuai <br/> tianshuai <br/> tianshuai <br/> </div>
还有一个样式:hidden超出div区域的将会自动隐藏
<div style="overflow:hidden;height:100px;background-color:green;">
13 透明度
<div style="background-color:blue;height:100px;padding-top:30px"> <!--这里设置内部的div的透明度--> <div style="opacity: 0.5;background-color:pink;height:30px;margin-left: 30px;margin-right:30px;"> </div> </div>
14 z-index
用来设置展示在浏览器中的页面的层级
CSS页面实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>TT</title> <style> .pg-hander { height:48px; background-color: cornflowerblue; } .pg-body .pg-left { /*往左飘*/ position:absolute; top: 50px; left: 0px; bottom: 0px; 200px; overflow: auto; background-color: #dddddd; } .pg-body .pg-right { position: absolute; top:50px; bottom:0px; /*这里离左边是200像素,因为上面设置的宽为200px*/ left:200px; right:0px; overflow: auto; background-color: lightblue; } </style> </head> <body style="margin:0 auto"> <!--定义把整个窗体分为2大部分上,下 <!--上部分--> <div class="pg-hander"> </div> <!--下部分--> <div class="pg-body"> <!--左部分--> <div class="pg-left"> <a>Hello,word!</a> </div> <!--右部分--> <div class="pg-right"> <div style="height:1000px"> I can because i think i can. </div> </div> </div> </body> </html>
CSS实例运用
1 三角
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .up{ border-top: 80px solid red; border-right: 80px solid yellow; border-bottom: 80px solid navy; border-left: 80px solid blueviolet; display: inline-block; } </style> </head> <body> <div class="up"></div> </body> </html>
2 尖角
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> /*.up{*/ /*border-top: 30px solid blueviolet;*/ /*border-right: 30px solid red;*/ /*border-bottom: 30px solid blue;*/ /*border-left: 30px solid deepskyblue;*/ /*display: inline-block;*/ /*}*/ /*.down{*/ /*border-bottom: 30px solid darkmagenta;*/ /*border-left: 30px solid red;*/ /*border-right: 30px solid deepskyblue;*/ /*border-top: 30px solid darkmagenta;*/ /*}*/ .c1{ border: 30px solid transparent; border-top: 30px solid greenyellow; display: inline-block; margin-top: 40px; } .c1:hover{ border: 30px solid transparent; border-top: 30px solid greenyellow; display: inline-block; margin-top: 10px; } .c2{ border-right: 30px solid red; border-bottom: 30px solid blue; border-left: 30px solid deepskyblue; display: inline-block; margin-top: 40px; } .c2:hover{ border: 30px solid transparent; border-bottom: 30px solid greenyellow; display: inline-block; margin-bottom: 10px; } </style> </head> <body> <div class="up"></div> <div class="down"></div> <div style="height: 100px;background-color: blue;"> <div class="c1"></div> <div class="c2"></div> </div> </body> </html>
3、特殊图标使用
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link type="text/css" rel="stylesheet" href="../font-awesome/css/font-awesome.css"> </head> <body> <span class="icon-linux"></span> </body> </html>
4、登录_小图标
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .user{ position: relative; 250px; } .user input{ height: 30px; 170px; padding-right: 30px; } .user .ren{ position: absolute; top:8px; left: 180px; } </style> </head> <body> <div class="user"> <input type="text"> <span class="ren">RR</span> </div> </body> </html>
5、购物数量框
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .left{ float: left; } .wrap{ height: 22px; 150px; border: 1px solid #ddd; } .wrap .minus{ cursor:pointer; /*鼠标尖头变小手*/ height: 22px; 22px; line-height: 22px; text-align: center; } .wrap .plus{ cursor:pointer; /*鼠标尖头变小手*/ height:22px; 21px; line-height: 22px; text-align: center; } .wrap .count input{ padding: 0; border: 0; 104px; height: 22px; border-left:1px solid #dddddd; border-right: 1px solid #dddddd; } </style> </head> <body> <div class="wrap"> <div class="minus left" onclick="Minus()">-</div> <div class="count left"> <input id="count" type="text" value="1"> </div> <div class="plus left" onclick="Plus();">+</div> </div> <script type="text/javascript"> function Plus(){ var old_str = document.getElementById('count').value; var old_int = parseInt(old_str); var new_int = old_int + 1; document.getElementById('count').value = new_int; } function Minus(){ var old_str = document.getElementById('count').value; var old_int = parseInt(old_str); var new_int = old_int - 1; document.getElementById('count').value = new_int; } </script> </body> </html>
6、鼠标放上出现了内容
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .ele{ height: 900px; 900px; overflow: hidden; position: relative; } .ele .content{ background: rgba(0,0,0,.6); position: absolute; top: 0; bottom: 0; left: 0; right: 0; visibility: hidden; color: white; text-align: center; } .ele:hover .content{ visibility: visible; } .ele .content .c1{ font-size: 32px; padding: 30px 0; } .ele .content .c2{ font-size: 18px; color: red; font-weight: bold; } </style> </head> <body> <div class="ele"> <div class="img"><img src="../CSS/wo.jpg"></div> <div class="content"> <div class="c1">ALEX</div> <div class="c2">50-1000(日)</div> </div> </div> </body> </html>
后续更新中......
详细参考:http://www.cnblogs.com/yuanchenqi/articles/5615774.html
http://www.w3school.com.cn/css/index.asp