本帖最后由 长沙-小知姐姐 于 2019-3-28 16:04 编辑
今天,我继续来和大家聊聊css3. 在css3中,新增了很多样式,使得页面更加的美观,效果更加的优秀。 但是,同样要注意的是,很多css3提出的新样式没有得到浏览器的支持,也就意味着有一部分的css3样式属性甚至可能没有任何浏览器支持。 我们今天,就带大家来认识一些主流浏览器支持的并且常用的css3样式属性及其使用方式。
1.圆角边框 在css3中,可以通过border-radius属性给元素设置圆角边框。 一个元素有四个角,所以也可以通过 border-top-left-radius border-top-right-radius border-bottom-left-radius border-bottom-right-radius 分别设置四个角的圆角 A.案例:通过border-radius设置头像框
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div{ width: 200px; height: 200px; background: url(girl.jpg); border-radius:50%; } </style> </head> <body> <div></div> </body> </html>
代码效果如下:
通过border-radius:50%,可以将一个元素设置为圆形。 但是,前提条件是元素宽高一致。 B.案例:自定义圆角按钮:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div{ display: inline-block; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; border-radius: 20px; background-color: green; color:#fff; cursor:pointer; } </style> </head> <body> <div>点我看看</div> </body> </html>
代码效果如下:
在这个案例中,将border-radius设置成了20px,意味着元素的四个角变为圆角,圆的半径为20px。 补充:当border-radius的值设置为20px时,则元素的四个角都设置为半径20px的圆角 如果border-radius设置为多个值的时候,则按照左上角,右上角,右下角,左下角的顺序设置圆角。
2.文字阴影,盒子阴影 A.案例:盒子阴影形成光晕
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div{ width: 200px; height: 200px; background: url(girl.jpg); border-radius:50%; box-shadow: 0 0 50px rgb(166,124,64) } </style> </head> <body> <div></div> </body> </html>
代码效果如下: 由图可见,通过box-shadow属性为头像框添加了光晕效果。 添加盒子阴影的样式语法如下: box-shadow:横向偏移值 纵向偏移值 阴影辐射程度 颜色 B.案例:文字阴影效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> h1{ text-shadow: 0 0 50px cyan } </style> </head> <body> <h1>这是一句测试文字:hello world!</h1> </body> </html>
代码效果如下:
3.线性渐变,径向渐变,重复渐变 A.案例:线性渐变制作LOGO:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> h1{ display: inline-block; padding:4px 12px; border-radius: 5px; text-shadow: 0 0 5px cyan; background:linear-gradient(to top,#ccc,#fff) } </style> </head> <body> <h1>CSS那些事儿</h1> </body> </html>
代码效果如下:
观察css样式,我们给文字设置了阴影效果,然后通过background:linear-gradient()设置了背景颜色线性渐变。 添加背景颜色线性渐变的样式语法如下: background:linear-gradient( 线性渐变的方向 , 渐变颜色1 , 渐变颜色2 ... 渐变颜色n ) 可以添加的方向有:to top(从下到上),to bottom(从上到下),to left,to right, left top(从右下到左上),right top,left bottom , right bottom
注意:线性渐变存在浏览器兼容性问题,上面的代码如果需要兼容多个浏览器,则需要添加兼容性css代码,如下:
h1 { display: inline-block; padding:4px 12px; border-radius: 5px; text-shadow: 0 0 5px cyan; /* Safari 5.1 - 6.0 */ background: -webkit-linear-gradient(top,#ccc,#fff); /* Opera 11.6 - 12.0 */ background: -o-linear-gradient(top,#ccc,#fff); /* Firefox 3.6 - 15 */ background: -moz-linear-gradient(top,#ccc,#fff); /* 标准的语法 */ background: linear-gradient(to top,#ccc,#fff); }
B.案例:径向渐变
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div { width: 200px; height: 200px; /* Safari 5.1 - 6.0 */ background: -webkit-radial-gradient(circle, red, yellow, green); /* Opera 11.6 - 12.0 */ background: -o-radial-gradient(circle, red, yellow, green); /* Firefox 3.6 - 15 */ background: -moz-radial-gradient(circle, red, yellow, green); /* 标准的语法 */ background: radial-gradient(circle, red, yellow, green); } </style> </head> <body> <div></div> </body> </html>
代码效果如下:
添加背景颜色径向渐变的样式语法如下: background:radial-gradient( 正圆或者椭圆 , 渐变颜色1 , 渐变颜色2 ... 渐变颜色n )
C.通过重复渐变制作标靶图案
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div { width: 200px; height: 200px; background: repeating-radial-gradient(circle , #fff 0%,#fff 10%,#000 10%,#000 20%); } </style> </head> <body> <div></div> </body> </html>
代码效果如下:
添加背景颜色重复渐变的样式语法如下: background:repeating-radial-gradient( 正圆或者椭圆 , 渐变颜色1 位置1 , 渐变颜色2 位置2 ... 渐变颜色n 位置n ); 注意:其实无论是线性渐变还是径向渐变,亦或重复渐变,都可以设置渐变颜色的位置。
4.背景裁切(background-clip)和背景显示区域(background-origin)以及背景区域大小(background-size) A.使用background-origin设置背景展示的区域
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div { width: 200px; height: 200px; border:20px solid rgba(66, 88, 128, 0.3); padding:20px; float: left; margin:20px; background-image: url(girl.jpg); background-repeat: no-repeat; } div:nth-of-type(1){ background-origin: content-box } div:nth-of-type(2){ background-origin: padding-box } div:nth-of-type(3){ background-origin: border-box } </style> </head> <body> <div></div> <div></div> <div></div> </body> </html>
代码效果:
注意观察布局: 在页面中有三个div盒子,每个div盒子都有padding 20px,还有border:20px 当我们将第一个div盒子的background-origin设置为content-box的时候,发现图片从盒子的content部分进行了渲染展示,也就是说background-origin设置为content-box的时候,背景图片将会从盒子的内容部分开始渲染和展示. 当我们将第二个div盒子的background-origin设置为padding-box的时候,发现图片从盒子的padding部分进行了渲染展示,也就是说background-origin设置为padding-box的时候,背景图片将会从盒子的内间距部分开始渲染和展示. 当我们将第三个div盒子的background-origin设置为border-box的时候,发现图片从盒子的border部分进行了渲染展示,也就是说background-origin设置为border-box的时候,背景图片将会从盒子的边框部分开始渲染和展示. 所以,我们从这个案例中就可以得知,background-origin属性可以帮助我们设置背景图片从什么区域进行渲染展示,可以设置的值有content-box,padding-box,border-box B.使用background-clip进行背景内容的裁切
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div { width: 200px; height: 200px; border:20px solid rgba(66, 88, 128, 0.3); padding:20px; float: left; margin:20px; background-image: url(girl.jpg);
} div:nth-of-type(1){ background-clip: content-box } div:nth-of-type(2){ background-clip: padding-box } div:nth-of-type(3){ background-clip: border-box } </style> </head> <body> <div></div> <div></div> <div></div> </body> </html>
代码效果如下:
注意观察布局: 在页面中有三个div盒子,每个div盒子都有padding 20px,还有border:20px 当我们将第一个div盒子的background-clip设置为content-box的时候,发现图片从盒子的content部分进行了渲染展示,而原本应该在padding部分和border部分展示的图片重复部分被裁切掉了,没有了 。也就是说background-clip设置为content-box的时候,背景图片只会展示内容部分的图片,其他区域的图片内容会被裁切掉。 当我们将第二个div盒子的background-clip设置为padding-box的时候,发现图片从盒子的padding部分进行了渲染展示,而原本应该在border部分展示的图片重复部分被裁切掉了,没有了 。也就是说background-clip设置为padding-box的时候,背景图片会展示内间距区域以及内容区域的背景图片,border区域的图片内容会被裁切掉。 当我们将第三个div盒子的background-clip设置为border-box的时候,发现图片从盒子的border部分进行了渲染展示,也就是说background-clip设置为border-box的时候,背景图片将会从盒子的边框部分开始渲染和展示. 所以,我们从这个案例中就可以得知,background-clip属性可以帮助我们设置背景图片从什么区域进行渲染展示,而没有展示的区域的图片将会被裁切掉。可以设置的值有content-box,padding-box,border-box
C.使用background-size设置背景大小
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div { width: 300px; height: 400px; border: 3px solid cyan; float: left; margin:20px; background-image: url(girl.jpg); background-repeat: no-repeat; } div:nth-of-type(1){ background-size: 300px 400px; } div:nth-of-type(2){ background-size: contain } div:nth-of-type(3){ background-size: cover } </style> </head> <body> <div></div> <div></div> <div></div> </body> </html>
代码效果如下:
观察代码效果,希望大家能够了解background-size的各种设置方式的效果。 在第一种设置方式中,直接将background-size设置成了宽度300px,高度400px。显而易见,通过这种方式来设置背景图片的大小时,背景图片被拉伸了。并不是特别合适。 在第二种设置方式中,将background-size设置为了contain,这种情况下,会将背景图片进行缩放,使得背景图片能够适应元素的高度或者宽度,缩放填充。但是,如果元素的宽高比和图片的宽高比不一致,会导致元素的部分区域留白。 第三种设置方式中,将background-size设置成了cover,此时,会将背景图片进行缩放,将背景图片填充到元素中进行展示。但是,如果元素的宽高比和图片的宽高比不一致,会导致图片部分区域移出。
C.CSS3 :nth-of-type选择器 案例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div{ width:100px;height:100px; } div:nth-of-type(2){background: pink;} </style> </head> <body> <h2>这是一个测试</h2> <div class="one">1</div> <div class="one two">2</div> <div class="one two three">3</div> <h2>测试结束</h2> </body> </html>
代码效果如下:
如上图,div:nth-of-type(2)的意思就是找到div的父元素body,再找到body中的所有div元素中的第二个div元素,由此可以看出 nth-child和nth-of-type 的区别。 element:nth-child(n)是找到父元素中所有的子元素,然后找到符合n条件的子元素,查看符合n条件的子元素是否是element类型的元素(因为符合n条件的子元素也可能是其他元素类型,不是element类型),也就是说,nth-child需要符合两个条件才能选择成功,第一个是n条件,第二个是元素类型。 element:nth-of-type(n)是找到父元素中所有的子元素中的element元素,然后找到符合n条件的element元素,也就是说,nth-of-type是先找到element类型的元素,然后再找符合n条件的element类型的元素,先决条件就已经过滤掉了其他的元素。只查找element类型的元素。
D.CSS3 :nth-last-of-type选择器
5.通过box-sizing属性设置盒子模型 A.标准模式与怪异模式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div { width: 200px; height: 200px; border: 20px solid cyan; padding: 10px; float: left; margin:20px; } div:nth-of-type(1){ box-sizing : content-box; } div:nth-of-type(2){ box-sizing : border-box; }
</style> </head> <body> <div></div> <div></div> </body> </html>
代码效果如下: 结合代码查看页面效果: 1.从样式上看两个div元素的样式基本一致,只不过第一个div元素设置的box-sizing为content-box(标准模式),而第二个div元素设置的box-sizing为border-box(怪异模式) 2.两种模式的差别在于标准模式中 元素的宽高就是盒子模型中的content区域的宽高,即内容区域的宽度,高度。而怪异模式中,元素的宽高是包含了边框,内间距,内容区域。
所以,这是我们经常使用box-sizing来设置标准模式或者怪异模式,以满足我们页面布局的需要。
6.多列属性 案例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div {
column-count: 3; column-gap: 100px; column-rule:#ccc dashed 10px; box-sizing: border-box; }
</style> </head> <body> <div> <h1>三国演义</h1> 《三国演义》是中国古典四大名著之一,是中国第一部长篇章回体历史演义小说,全名为《三国志通俗演义》(又称《三国志演义》),作者是元末明初的著名小说家罗贯中。《三国志通俗演义》成书后有嘉靖壬午本等多个版本传于世,到了明末清初,毛宗岗对《三国演义》整顿回目、修正文辞、改换诗文。 [1] 《三国演义》描写了从东汉末年到西晋初年之间近百年的历史风云,以描写战争为主,诉说了东汉末年的群雄割据混战和魏、蜀、吴三国之间的政治和军事斗争,最终司马炎一统三国,建立晋朝的故事。反映了三国时代各类社会斗争与矛盾的转化,并概括了这一时代的历史巨变,塑造了一群叱咤风云的三国英雄人物。 全书可大致分为黄巾起义、董卓之乱、群雄逐鹿、三国鼎立、三国归晋五大部分。在广阔的历史舞台上,上演了一幕幕气势磅礴的战争场面。作者罗贯中将兵法三十六计融于字里行间,既有情节,也有兵法韬略。 《三国演义》是中国文学史上第一部章回小说,是历史演义小说的开山之作,也是第一部文人长篇小说。 整个故事在东汉末年至西晋初的历史大背景下展开。东汉末年,皇帝昏聩无能,宦官专权,朝廷腐败,百姓苦不堪言,进而爆发了大型农民起义——黄巾起义。乱世之中,一代枭雄与英雄人物竞相涌现。 是时,袁绍和曹操领众诸侯以平“十常侍之乱”为名冲人皇宫,汉少帝刘辩与陈留王刘协慌乱出逃。在各路诸侯争相寻找刘辩和刘协的过程中,原屯兵凉州的董卓因救驾有功随即掌控朝中大权,废汉少帝,立陈留王刘协为汉献帝。生性残暴的董卓倒行逆施,引发多方愤然。曹操假借圣旨之名,召集群雄联合讨伐董卓,迫使其挟汉献帝至长安。董卓后被其义子吕布所杀。 此后,袁绍欲谋长沙太守孙坚手中的传国玉玺,孙坚在逃避途中遭荆州刘表所袭而两相结怨。孙坚在后进攻荆州之时死于战中。与此同时,袁绍与公孙瓒在河北地界争斗,爆发界桥之战。曹操广泛招贤纳才,刘备不断扩充实力。此时,群雄逐鹿中原的雏形初成。 汉朝末年黄巾起义形势 汉朝末年黄巾起义形势 董卓死后,曹操“挟天子以令诸侯”,迎汉献帝于许昌建都,并运用权谋除去了吕布、袁术等人。在其后的官渡之战中,曹操以少胜多大败袁绍,继而一统北方,为此后魏国的建立奠定了坚实的基础。 在江东,孙坚之子孙策多年苦心经营,终于称霸江东六郡八十一州。孙策亡故后,其弟孙权继业。孙权在周瑜等人扶持下,为吴国的建立积聚了强大的实力。刘备则与关羽、张飞二人桃园结义,共同立起辅佐汉室的大旗。刘备在汝南遭刘表战败,投奔荆州刘表。而后刘备三顾茅庐,请得足智多谋而又心怀天下的诸葛亮辅佐。 曹操统一北方后开始举兵南征,矛头直指荆州和江都。此时,刘表亡故,其长子刘琦守江夏。次子刘琮接管荆州,后投降曹操,荆州于是落入曹操受众。面对曹操南征之势,刘备遣诸葛亮往江东与孙权结盟。诸葛亮凭借机智在江东舌战群儒,最终促成孙、刘联军,并在赤壁之战中通过反间计、连环计、苦肉计等一系列有步骤、有计划的行动,大破曹军,谱写了我国古代战争史上以少胜多的光辉篇章。 赤壁大战过后,刘备、孙权转而互争荆州。孙权遣鲁肃向刘备讨还荆州,刘备在诸葛亮的劝谕下多次推辞。周瑜向孙权献计,欲骗刘备前往东吴迎娶孙权之妹孙尚香为妻,进而扣留刘备,威逼诸葛亮以荆州换之。不料周瑜的计谋都被诸葛亮屡屡识破,致使其“赔了夫人又折兵”。周瑜最终在诸葛亮的讥讽中呕血而亡,留下了“既生瑜,何生亮!”的长叹。 周瑜死后,吴军忙于与曹军开战。刘备则在诸葛亮的劝说下打败刘璋,夺取西川,并从曹操手中夺得汉中,自封汉中王。至此,天下大势抵定,三国鼎立局面形成。刘备在巴蜀称帝,国号蜀汉;曹操称霸中原,后由其子曹丕篡汉,改国号为魏;孙权则坐镇江东一方。 后东吴与曹魏修好,孙权受封南昌侯。东吴大将吕蒙以白衣渡江之计夺取荆州。此时正在攻打樊城的关羽不得不退守麦城并在突围过程中被擒。关羽宁死不降而被孙权斩首。张飞亦被部下范强、张达所杀,刘备痛心疾首。 孙权继而拜陆逊为大都督,大败蜀军。刘备在率败军撤至白帝城之时病倒,并在临终前向诸葛亮托孤。曹丕此时趁机联合东吴、南蛮、羌族和蜀汉降将孟达进攻蜀国。诸葛亮派出马超、赵云等猛将把守关口,又派出李严,邓芝等人说服孟达与东吴。诸葛亮则亲领大军七擒七纵,平定了南蛮孟获之乱。 后曹丕病逝,其子曹睿即位。诸葛亮六出祁山,决心为刘备完成匡复汉室的遗愿。在此其间,诸葛亮收复姜维并以己平生所学相授。诸葛亮最终因操劳过度在五丈原病逝。姜维继承诸葛亮遗志,继续兴兵抗魏却被昏主奸臣所害,逃往阆中。魏将邓艾趁蜀国内乱之际发兵进攻,蜀主刘禅不战而降,蜀汉至此灭亡。姜维在司马昭的围攻下身负重伤,拔剑自刎。 东吴孙权死后,内乱不止,吴主孙亮被独揽大权的孙琳所废,孙休被立为帝。孙休联合老将丁奉除掉孙琳将大权夺回手中,但东吴此时也已呈现大江东去之势。在魏国,曹睿死后曹芳继位,司马懿从曹爽手中夺得兵权。后曹芳被废,司马兄弟立曹髦为帝,司马懿之子司马昭大权独揽。后司马昭之子司马炎篡位,改国号为晋,魏国灭。吴国最终被西晋所灭。 “天下大势,分久必合,合久必分”,百年战乱终于在此划下句点,西晋开拓了中国历史上又一个大一统的局面。 </div> </body> </html>
代码效果如下:
结合代码和页面效果图,我们来了解一下多列属性: A.column-count: 该属性用来设置内容划分的列数,本案例设置为3,所以页面中有了三列内容 B.column-gap:该属性用来设置每列之间的间隔,本案例中设置为100px,所以每列内容之间有100px的间距 C.column-rule:该属性用来设置每列之间的间隔线,本案例设置为#ccc dashed 10px,所以每列之间有一根灰色的10px的虚线分割线。
多列属性在我们需要电子书格式或者报纸排版展示的时候会使用到,相对来说,用到的概率较小,大家了解一下就可以了。
7.透明属性
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .first { width: 200px; height:200px; background:pink; opacity: 0.3; } .son{ width: 100%; height: 100px; background:cyan; } </style> </head> <body> <div class="first"> <p>这是一段文字</p> <div class="son">this is first</div> </div> </body> </html>
网页效果如下:
通过opacity属性我们将 div.first 元素设置为了透明度0.3,而效果就是包括div.first 元素和它的子元素都被半透明化了。所以大家在设置opacity的时候一定要注意这个效果。 好了,今天给大家介绍了一些CSS3中常用的样式属性,希望大家自己也好好练习一下哦。
如果大家在学习中遇到什么困难,或者需要全套前端学习资料 HTML5 + CSS3 -移动 Web 网页开发-JavaScript 网页编程-Node.js 与 AJAX-前端框架实战-微信小程序-项目实战源码 , 加小知姐姐微信 csheima7 免费分享,给你助攻哦
|