<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>CSS-learning-note</title> <style type="text/css"> h1{color:red} p{font-size:20px;color:blue;font-family:"华文行楷",serif;font-weight:600;} .p1{font-family:"Times New Roman","华文行楷",serif;} .p2{font:italic bold 30px "Times New Roman";} .p3{text-align:center;} .p4{text-indent:2em;} .p5{ /*color:red;*/ /*color:rgb(255,0,0);*/ /*color:rgba(255,0,0,1);*/ /*color:#FF0000;*/ /*color:#F00;*/ color:rgb(100,100,100); } .a1{text-decoration:none;} #identity1{color:red;} #identity2{color:blue;} #identity3{color:green;} #identity4{color:yellow;} .p1{color:red;} .p2{color:blue;} .p3{color:green;} .p4{color:yellow;} .colorR{color:red;} .size30{font-size:30px;} .size20{font-size:20px;} .line{text-decoration:underline;} div>ul>li>p{color:red;} img[alt|=abc]{color:red;} img[alt$=abc]{color:yellow;} img[alt*=q]{color:green;} *{ color:green; } .staff{width:400px;height:240px} .icon{background-image:url(weibo.png);width:88px;height:31px;background-position:-424px -199px;} </style> </head> <body> <!--前瞻:CSS:Cascading StyleSheet 层叠式样式表--> <!--1、CSS的标准格式--> <!--<style> 标签名称{ 属性名称:属性对应的值; ... } </style> --> <!--该标准格式中,style里面的格式就是key:value;记住冒号不能省略--> <!--CSS都会写在<head></head>之间--> <!--1.1、第一个CSS超文本--> <!--1.2、style标签有个属性:type,主要用于告诉浏览器这个style标签是什么:<style type="text/css"> 意思就是说style标签存储的是文本类型的css代码--> <!--1.3、<style type="text/css">这句可写可不写,因为系统默认就是这一句,写上会规范一些--> <h1>我是标题</h1> <p>我是内容</p> <p>我是内容</p> <p>我是内容</p> <p>我是内容</p> <!--2.1、文字相关属性--> <!--1、font-style:normal正常的,默认就是正常的 italic倾斜的 2、font-weight:bold;加粗 bolder;比加粗还粗 lighter;细线,默认是细线 3、font-size:30px;设置字体大小为30像素 4、font-family:"华文行楷";设置字体的文字字体, 有两个注意点:1、如果取值是中文,需要用双/单引号括起来 2、设置的字体必须是电脑已经安装的,不然没有效果,也可以用字体包 --> <!--无论是什么类型的标签,只要有表示大小的,或是颜色的(颜色要加#),都可以加数值来作为属性值,比如设置 字体粗细的font-weight属性,也可以这样表示:font-weight:100;--> <!--2.2、文字相关属性补充--> <!--2.2.1、两个新问题:1、如果当电脑没有相关字体,且我们不要用系统默认的,怎么办呢? 解决:可以给字体设置备选方案 格式:font-family:"原方案","备选方案1","备选方案2"...; 2、如果同一标签,比如p标签里面前一部分用这种字体,后一种用另一种字体,怎么办? 解决:首先要明白,但凡是中文字体,里面都包含英文字体; 但凡是英文字体,里面都不包含中文字体; 所以:也是一样的,用备选方案,但需要注意的是英文字体需放中文字体前面。--> <!--2.2.2、相关练习--> <em>我是文字</em> <p>我是段落</p> <p class="p1">abc我是陈铎鑫</p> <!--2.3、字体属性小结 font:style,weight,size,family;最好就一直沿用该方式 注意点:1、size,family不能省略 2、size一定要在family前面 3、size和family一定要放在font属性的最后 4、根据前面的几个特性,备选方案的字体设置方式也就不能用了--> <p class="p2">abc我是陈铎鑫</p> <!--3、文本属性--> <!--3.1、具体的:1、文本装饰属性text-decoration:underline;下划线 line-through;删除线,跟del一样的效果 overline;上划线 none:什么都没有,最常见的作用就是去掉超链接的下划线 2、水平对齐属性text-align:left;左对齐 默认值是left center;居中 right;右对齐 3、文本缩进属性text-indent:2em;缩近两个文字的距离 --> <!--3.2、文本装饰属性--> <a class="a1" href="javascript:">a标签1</a> <!--3.3、文本对齐属性--> <p class="p3">我是陈铎鑫</p> <!--3.4、文本缩近属性--> <p class="p4">陈伪娘,原名陈炜明,因其娘的特性,故亦有小名伪娘,广工的屌丝一枚,自2016年大光棍校毕业后,于花果山进修一年有余, 后经同事介绍到了无名海,随着伟大神的到来,无名海掀起了波澜巨浪,导致狂风18级,无名海深处水深火热之中,大神不亏是大神, 目前屈居于无名海某个小角落,郁郁寡欢不得志,欲往大城市发展。</p> <!--4、颜色属性--> <!--通过color来设置:color:red;常见的一些颜色会有对应的英文单词对应 rgb(255,0,0);里面分别代表红绿蓝,也就是RGB,而数值呢,可以看成红绿蓝3颗灯珠的亮度。 rgba(255,0,0,1);跟rgb不同的是,它多了个透明度,取值是0~1,数值越小,越透明 #FF0000;16进制,与rgb是一样的,只不过其是每两位对应rgb的三原色每个颜色的数值 #F00;CSS简写的方式,当每种颜色对应的两个位数值一致时,可以用一个数值表示--> <!--注意web storm提供了取色器,数值多少其实不用管,很多软件都会有给你弄好的--> <p class="p5">我是陈铎鑫</p> <!--5、标签选择器--> <!--5.1、是什么,又有何作用? 标签选择器其实就是根据指定的标签名称,在当前界面中找到所有该名称的标签,然后设置属性--> <!--5.2、注意:1、标签选择器选到的是当前界面下的所有标签,而不是其中一个 2、标签选择器无论标签藏得有多深都能被选中 3、只要是html中有的标签都可以作为标签选择器(h,p,hr,a,img,ul,ol,dl,li,tr,td,input...--> <p>标签选择器</p> <p>标签选择器</p> <p>标签选择器</p> <p>标签选择器</p> <ul> <li> <ul> <li> <ul> <li> <p>标签选择器</p> </li> </ul> </li> </ul> </li> </ul> <!--6、id选择器--> <!--6.1、格式: #id{ 属性:属性值; ... } --> <!--6.2、在企业开发中一般情况下如果仅仅是为了设置样式,我们不会使用id,因为id是留给js使用的,不能随便乱用id--> <p id="identity1">id选择器</p> <p id="identity2">id选择器</p> <p id="identity3">id选择器</p> <p id="identity4">id选择器</p> <!--7、类选择器--> <!--7.1、前面学到id我们感觉作用非常大,因为它赋予了每个标签独一无二的一个身份,使每个标签都成为极具个性的个体 但是呢,id选择器更多的是给javascript用的,仅仅用于设置样式会很浪费,但个性化又是一定要的,是刚需,那 怎么均衡这个问题呢?这样类选择器就诞生了。 --> <!--格式: .类名{ 属性:属性值; ... } 其实类与id非常像,但注意到id是“#”,而类是“.”。 --> <hr /> <p class="p1">类选择器</p> <p class="p2">类选择器</p> <p class="p3">类选择器</p> <p class="p4">类选择器</p> <!--7.2、另一种格式:这种写法就是典型的活字印刷术了,你不必设置过多的类名,当它有很多属性时,把各个类的属性 重新拿来拼凑,你会发现这种做法真的非常的cool--> <hr /> <p class="p11 p12">当一个标签有多种属性时,可以这样写</p> <hr /> <ul> <li><a href src="html5-learning-note.html">个人简介</a></li> </ul> <!--7.3、id选择器与类选择器的区别--> <!--区别1、id选择器相当于人的身份证,不可以重复,而class相当于人的名称,可以重复 2、一个html标签只能绑定一个id,而class可以多个,格式是class="属性1,属性2,..." 不能是class="" class="" 3、id选择器以“#”开头,类选择器以“.”开头 4、在企业开发中,id选择器一般是给javascript开发使用的,css就用的话是杀鸡用牛刀,所以最好不用id,用class 5、在企业开发中,对类的使用可以看出开发人员的水平--> <p class="colorR size30">第一行</p> <p class="line size30">第二行</p> <p class="colorR size20 line">第三行</p> <!--8、后代选择器--> <!--8.1、后代选择器:找到指定标签的所有特定的后代标签,设置属性 最大的作用:当某个嵌套盒子或是标签里存在有上万个标签,当这些标签都需要修改或设置的时候, 用class或是id需要一个个区设置,会很累,效率也低,而后代选择器就是为了解决这个 而诞生的。--> <!--8.2、后代选择器需要用空格隔开,后代不仅仅是儿子,还有孙子/重孙,比如div p a img{},img就是后代--> <p>我是后代选择器</p> <div> <p>我是后代选择器</p> <p>我是后代选择器</p> </div> <p>我是后代选择器</p> <!--9、子元素选择器:找到指定标签中所有特定的直接子元素,设置属性--> <!--9.1、格式: 标签名称1>标签名称2{ 属性:值; }--> <!--9.2、子元素选择器最关键的就是“>”符号了,也是与后代选择器最大的区别,子元素选择器只能选择儿子,不能选择孙子 但他可以通过找了儿子后再让儿子去找儿子的儿子,也就是孙子,一级一级传递选择下去--> <p>我是子元素选择器</p> <div> <p>我是子元素选择器</p> <p>我是子元素选择器</p> <ul> <li> <p>我是子元素选择器</p> </li> </ul> </div> <p>我是子元素选择器</p> <!--10、其他选择器--> <!--10.1、交集选择器:标签与标签之间的符号 格式:与id有“#”,class有“.”不同,它没有间隔符号 企业开发中一般不用,因为交集选择器功能与直接设置类名或id名重复--> <!--10.2、并集选择器:简化操作,核心使用连接符为:“,”,也就是逗号--> <!--10.3、相邻兄弟选择器(CSS2):给指定选择器后面紧跟的那个选择器选中的标签设置属性 格式:选择器1+选择器2{ 属性:属性值; }--> <!--10.4、通用兄弟选择器(CSS3):与相邻兄弟选择器区别的是,前者是仅仅选中相邻的那一个,后者是选中该标签后的 所有标签,需要注意的是只要先出现了选择器1,后面出现的选择器2都会被选到,不 管中间是否有被隔开 格式:选择器1~选择器2{ 属性:属性值; }--> <!--10.5、序选择器:CSS3最具代表性的就是序选择器,它可以选择同级别或是同类型的标签,有10个标签--> <!--10.5.1、这10个标签其实就代表,同级别的第几个 1、:first-child:选中同级别的第1个,不区分类型;可能取到的是h标签,如果设置的是p标签属性,可能就无效 2、:first-of-type:选中同级别同类型的第1个 3、:last-child:选中同级别的最后1个,同样不区分类型 4、:last-of-type:选中同级别同类型的最后1个 5、:nth-child(3):同级别中的第3个,里面也可以改成任意数字,代表同级别那个数字对应的标签 6、:nth-of-type(3):其实都很类似,这个是同级别同类型的第3个 7、:nth-last-child(2):同类型倒数第2个,不区分类型 8、:nth-last-of-type(2):看文字就懂了,同类型倒数第2个 9、:only-child:选中父元素中唯一的元素,父类里记住必须只有1个标签,另外它不区分类型 10、:only-of-type:选择父元素中唯一的元素,父类里记住必须只有1个同类型的标签。 --> <h3>我是序选择器0</h3> <p>我是序选择器1</p> <p>我是序选择器2</p> <p>我是序选择器3</p> <p>我是序选择器4</p> <div> <p>我是序选择器1</p> <p>我是序选择器2</p> <p>我是序选择器3</p> <p>我是序选择器4</p> <p>我是序选择器5</p> </div> <!--10.6、属性选择器:了解了这么多选择器,其实他们是有很多共同点的,属性选择器也是,只不过它用了中括号[]来表示而已 两种表示形式:1、[attribute]{}:找到有该属性的标签 2、[attribute-value]{}:找到有该属性里有该属性值的标签 --> <!--举例:input[type]{} input[type=radio/password/name/text/checkbox...]{} 后面大括号内容跟正常的CSS设置一样,属性:属性值; --> <!--10.6.2、其他属性选择器: 属性的取值是以什么开头的? 1、[attribute|=value];CSS2,有局限,只能找到以“-”和其他内容隔开的,如下文的abc-www 2、[attribute^=value]:CSS3,只要是以abc开头的都可以被找到,abc_def,abc-www,abc ppp都可以 属性的取值是以什么结尾的? 3、[attribute$=value]:CSS3 属性的取值是否包含某个特定的值的? 4、[attribute~=value]:CSS2,只能找到被空格隔开,单独存在的value 5、[attribute*=value]:CSS3:只要包含value就可以找到 --> <img src="" alt="abc_def"> <img src="" alt="abc-www"> <img src="" alt="abc ppp"> <img src="" alt="defabc"> <img src="" alt="ppp abc"> <img src="" alt="www-abc"> <img src="" alt="qq"> <img src="" alt="yy"> <!--10.7、通配符选择器:带有*号的选择器--> <!--由于通配符选择器实际上是给界面上所有的标签一个通用的属性,所以它需要访问所有的标签,当界面上的标签很多时, 通配符的加入会带来不必要的资源浪费,也让浏览器的加载变得缓慢--> <!--针对这个需求和这个缺陷,后面会有相应的解决办法--> <h1>我是标题</h1> <p>我是段落</p> <a href="#">我是超链接</a> <!--11、CSS三大特性--> <!--11.1、CSS三大特性之——继承性--> <!--11.1.1、什么是继承性?给父元素设置一些属性,子元素也能用--> <!--11.1.2、注意点:1、并不是所有的属性都可以继承 只有以color/font-/text-/line开头的属性才可以继承 2、在CSS中,属性的继承不仅仅是子元素可以,后代都可以,也就是除了儿子,孙子/重孙都可以继承 3、继承性中的特殊性:①、a标签的文字颜色和下划线是不能继承的,但大小等等都可以 ②、h标签的文字大小是不能继承的 其实为何有这两个特殊性很好理解,因为父元素是类似于通配符那样,只要是父元素的后代,都贴上了 父元素的标签,父元素的特性,但无论是h标签的大小,或是a标签的下划线跟蓝色的文字颜色是它自己 的特性,它的优先级更高,会把父元素这些通用的属性覆盖掉,只会继承其他的属性。 --> <!--11.1.3、在企业级开发中,一般用于设置网页的一些共性信息,例如网页的文字颜色,字体,文字大小等内容,减少代码 重复性,精简代码--> <!--11.2、CSS三大特性之——层叠性--> <!--11.2.1、层叠性是CSS处理冲突的一种能力,层叠性只有在多个选择器选中“同一个标签”,然后又设置了同一个属性, 才会发生层叠性--> <!--11.3、CSS三大特性之——优先级--> <!--11.3.1、前面讲到CSS其实就是一个层叠样式表,层叠是它的特性,也是它的核心,但怎么层叠呢?谁层叠谁?怎么层叠? 这就是要讲的CSS最后一个特性——优先级 优先级有3种:1、是否是直接选中(间接选中就是指继承) 如果是间接选中,那么谁目标标签越近,目标标签的属性就跟谁谁 2、是否是相同选择器 如果都是直接选中,且都是同类型的选择器,那么谁写后面就听谁的 3、不同选择器 如果都是直接选中,并且不是相同类型的选择器,那么就会按照选择器的优先级来层叠 选择器优先级排列:id>class>标签>通配符>继承>浏览器默认 --> <!--11.3.2、优先级之提升:important,作用很简单,用于提升某个直接选中标签的选择器中的某个属性的优先级,可以将被 指定的属性优先级提升至最高,比id属性还高 具体是这样的: p{ color:red;!important; } --> <!--11.3.2.1、important需要注意的是,只能用于直接选中的选择器里,注意通配符以上包括通配符都属于直接选中的选择器。 !important只能提升被指定的对象的优先级,其他属性的优先级不会被提升, !important中的!不能省略 !important必须写在";",即分号前面--> <!--11.3.3、优先级之权重问题--> <!--当多个选择器混合一起使用时,我们可以通过计算权重来判断谁的优先级最高 权重计算规则:1、首先计算选择器有多少个id,id多的选择器优先级最高 2、其次当id选择器数量一致时,看类选择器,接下来再看标签 3、标签之后就随意了,哪个的代码写在后面,优先级最高 可能做面试题会考到,但实际开发自然而然就会懂的--> <!--12、div和span:这两个其实是属于html的标签,不过这两个和css关系较为密切,没有css一定的基础不好理解,所以现在再 来讲。这两个最大的作用其实就是用于网页的基本布局了--> <!--12.1、div是容器级标签,span是文本级标签 容器级标签:h,ul,ol,dl,li,div...它可以嵌套所有标签 文本级标签: span,p,buis strong em ins del...它只能嵌套文字/超链接/图片 --> <span></span> <!--12.2、块级元素和行内元素 块级元素:h,div,ol,ul,dl,li,p...所有容器级标签都是块级元素 行内元素:span,buis,strong,em,ins,del...文本级标签中除了p标签其他都是行内元素 这两者最大的区别就是是否独占1行,块级元素会独占1行 另一个区别就是行内元素不可以设置宽高度,而块级元素可以--> <!--12.2.1、行内块级元素:为了能既不占一行,又能设置宽高,就诞生了行内块级元素--> <img class="staff" src="职工.jpg" alt=""> <!--13.1、背景图片:background-image:url(image.jpg) 1、如果图片的大小没有标签的大,会自动复制平铺 2、图片可以是本地的图片地址,也可以是网络上的图片地址 3、如果网页上出现图片,浏览器会再次发送请求获取图片--> <!--13.2、背景平铺属性:background-repeat:repeat/repeat-y/repeat-x/no-repeat--> <!--可以通过背景平铺来降低图片大小,提升网页加载效率--> <!--background:1、background-repeat:repeat/repeat-y/repeat-x/no-repeat; 2、background-position:水平 垂直;(均有3个值left/center/right top/center/bottom,还可以设置数值) 这个position有个很重要的作用,由于对于世界上很多的用户来说,它们有着不同分辨率,各种尺寸的 电脑,所以网页的背景图设计尤为谨慎,一般情况下UI或是前端开发都会先制作一张很大很长的图,避免因显 示不完全从而影响用户体验,但过大的图对于一些小尺寸电脑会显示不完全,所以通过position设置成center 的方式可以让重要的内容居中,完美兼容各型尺寸终端。 3、background-image:url(本地图片地址/网页图片地址) 4、background-color:背景颜色 5、background-attachment:scroll(默认跟随)/fixed(固定); 默认情况下,背景图片会随着滚动条的滚动而滚动, --> <!--13.2.1:背景格式缩写的方式: background:背景颜色 背景图片 平铺方式 关联方式 定位方式--> <!--改背景格式可以省略任何一个属性--> <!--13.2.2:背景图片和插入图片区别:1、背景图片不占用位置,文字/文本/超链接等可以显示在上面,而插入图片不行 2、背景图片可以很方便的定位,而插入图片不行 3、插入图片有一个好处:就是语义强,容易被搜索引擎收录,在企业开发中有益处 --> <!--13.3、CSS精灵图:是一种图像合成技术。需要配合背景图片和背景定位--> <div class="icon"></div> <!--14、边框属性:边框就是环绕在标签四周的线条,故而只要是标签,都可以设置边框 14.1、同时设置4条边框:border,格式:border:1px solid blue; 14.2、分别设置4条边框:上:border-top 下:border-bottom 左:border-left 右:border-right--> <!--注意点:连写格式中,边框线条宽度,线条颜色均可以省略,会呈现默认值,但样式不能省略,省略样式边框会看不到--> <!--样式是什么呢?就是上面的solid,也就是实线,除此之外还有虚线dashed,点缀dotted...(可查询手册)--> <!--14.3、边框属性其他属性--> <!--分别设置4条边的边框属性:border-width:上右下左 border-style:上右下左 border-color:上右下左 可省略其中某些值,省略的值对于的边属性跟随其对边,即左右或上下,当只写了一个属性时, 其他边的属性就跟随有定义的那条边。 为什么是上右下左?其实就是按照顺时针的方向并且以上为起点来设置--> <!--此外还有border-top-width,border-top-style...很累,也很无语,也很重复浪费无奈,实在没办法,很烦--> <!--15、内边距--> <!--用的关键词:padding,格式跟border完全一样--> <!--16、外边距--> <!--用的关键词:margin,格式跟border完全一样--> <!--在默认布局的垂直方向上,外边距是不会叠加的,会出现合并现象,比如两个div,其设置的外边距为20px,10px,10px会被 覆盖掉,听20px也就是外边距比较大的那个--> <!--17.1、CSS盒子模型:所有的html标签其实都是盒子模型--> <!--宽度/高度:指定可以存放内容的区域 内边距:填充物 边框:手机盒子自己 外边距:盒子与盒子之间的间隙--> <!--17.2、盒子模型宽度和高度--> <!--1、内容宽高:通过标签width/height设置的就是内容宽高 2、元素的宽度和高度:宽度=左边框+左内边距+width+右内边距+有边框 3、元素空间的宽度和高度:宽度=左外边距+左边框+左内边距+width+右内边距+有边框+右外边距--> <!--17.3、盒子居中和内容居中:盒子居中:margin:0 auto; 内容居中;text-align:center;--> <!--18、清空默认边距--> <!--1、用通配符*直接设置margin和padding属性即可:但它会遍历所有的标签,性能不是很好--> <!--19、盒子浮动:盒子浮动是很强大的功能,但有个非常重要的注意点就是当这个盒子div下方还有一个div时, 这个盒子最好不要设置浮动,如果实在需要需要设置,可以先在在外面框一个大边框,再在 里面的边框设置浮动,也就是说,浮动的设置最好前提是一行,不要多行--> <!--19.1、浮动清除方式。1、给父类元素设置高度 2、clear;left/both/right/none/inherit;用clear清除浮动,其中both是指左右两侧均不允许浮动 3、隔墙法:①外墙法:即在两个设置浮动的标签中间添加一个块级元素,div即可同时把该div进行 clear:both清除浮动,同时由于清除属性,margin外边距会失效,无法设置, 此时可通过设置该div的高度保证两个标签之间的空隙 ②内墙法:隔离的一种方式,跟外墙法没区别,只不过是添加到两个浮动标签其中一个 里面,记得添加在第1个标签的最后或是第2个标签的最前 --> <!--19.2、伪元素选择器:就是在标签的前后快捷的添加子元素--> <!--div::before{content:"爱你"} 这个元素直接设置宽高没效果,需要加上显示display:block(意思是添加的子元素为 块级元素); div::after{content:"我爱你"}--> <!--格式:标签名称::before{ 属性:属性值; }--> <!--标签名称::after 属性:属性值; }-->--> <!--伪元素有个很好的东西,就是可以隐藏:通过visibility:hidden;--> <!--*zoom:1;可以帮助IE6里面兼容浮动问题--> <!--20、其他几个属性小结--> <!--20.1、overflow:hidden作用:当内容超过div时,如果不想要超出的内容显示,就可以把超过的部分隐藏起来--> <!--20.1.1、overflow:hidden既然有这个作用,那么清除浮动的时候是不是也可以用呢?毕竟浮动的那些是另外的div带来的。 答案是肯定的,呵呵,不过这个方式在IE6中无效,因为它也不兼容。当然也可以加*zoom:1;来解决兼容 --> <!--20.1.2、overflow:hidden还有一个很重要的作用,就是当嵌套的盒子里面要设置里面的盒子与外面盒子的边距时, 直接在里面的盒子用margin-top是无效的,为什么无效呢,因为父元素未设置的部分会跟随子元素 的设置一起变动,当加入overflow:hidden;就OK了,为什么呢?还是它作用的延伸,因为它会清除 掉超过的内容,所以父元素多余的设置全部被清除,框架框死了。 当然要实现上面的结果也可以通过padding,但padding有个不好的就是,父元素的外边宽会被顶大, 也就是当一个界面布局固定时,padding的设置可能会加大这类的样式混乱,且不利于修改维护。 --> </body> </html>