阅读(38)

css样式标准

最后一次修改 2017年08月03日

如今我们的网站、页面更加需要注重细节,不论是字体的样式、还是图片的分辨率清晰度都会影响到用户的访问体验和PV,以及用户以后是否会回访我们的网站/博客。为了让我们的网页变得更加美观个性化,我们需要了解更多的CSS样式属性。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化,CSS拥有对网页对象和模型样式编辑的能力。为了方便大家学习css样式,下面大家整理css样式知识点及参考样式合集。


201611081829431336.png

一些常见不必要CSS样式

1、与默认CSS样式一致

我们有时候写的CSS样式会与浏览器默认的CSS样式一致,有时候您自己都可能没有意识到。

常见的例子有:
div{width:auto; height:auto;}
对于一些刚使用CSS的朋友,有时候,其为了表达这段div高度是自动适应于内部元素的,会情不自禁的加上height:auto;的样式。很显然,这段样式是没有必要的,默认的任何块状元素的高度几乎都是auto。

我们来看看人人网个人首页的CSS样式文件,在chrome浏览器下Ctrl+F搜索height:auto,居然显示了九条(见下图)。

height:auto

height:auto;的样式

按照常规来讲,height:auto只有在使用CSS优先级抹掉之前的height定值的样式的时候使用,其余情况基本上都是可以去掉的。就像是上面人人网的例子,居然9个height:auto,这里至少有一半是没有必要的。

body,p,h1,h2,h3,h4,h5,h6{margin:0;padding:0;}

上面有关body,p等标签的样式中有个样式是无效的,与默认值一致的,这个样式就是padding:0;,对于body,p,h1~6这些标签,本身的padding值就是0,所以只需要margin:0就可以了。


在CSS reset中,为了方便,都是一堆标签直接套个margin:0;padding:0;了事。还拿人人网的CSS样式文件举例,人人网个人首页样式第一行就是一长串标签带个margin:0;padding:0;先不管其把span,div,em之类的标签也加进入,就算是没有这些标签,也是极不推荐这种写法,完全的浪费资源,浪费CSS的渲染。比较推荐的做法是把ul,ol独立出来,因为ul,ol还要独立设置list-style样式,而且常用的标签就ul,ol列表元素有默认的padding值,所以高效的写法应该是:


body,p,h1,h2,h3,h4,h5,h6{margin:0;}
ul,ol{list-type:none; margin:0; padding:0;}

span{display:inline;float:left; margin-left:3px;}


这也是常出现的。出现这种情况的原因可能与IE6的浮动双边距bug有关,我们可以用设置display:inline的方法修复IE6的这个bug,但是,如果对这个bug理解不够,对CSS的理解不足,就会出现滥用的情况。上面是滥用的情况之一,对于span/a/em/cite/i/b/strong等行内元素默认就是display:inline的,所以给其设置display:inline属性是多此一举。


类似的情况还有对本身就是block水平的元素设置display:block属性,例如:

li{display:block;padding:4px 0;}

上面的情况屡见不鲜,甚至在比较优秀的网站上也会有这类低级的样式问题。



其他一些情况
div{margin:auto;}
textarea{overflow:auto;}
img,input,button{vertical-align:baseline;}
div{background-position:0 0;}

css参考样式集合


一. 字体属性:(font)

1. 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX、PD

2. 样式 {font-style: oblique;}(偏斜体) italic;(斜体) normal;(正常)

3. 行高 {line-height: normal;}(正常) 单位:PX、PD、EM

4. 粗细 {font-weight: bold;}(粗体) lighter;(细体) normal;(正常)

5. 变体 {font-variant: small-caps;}(小型大写字母) normal;(正常)

6. 大小写 {text-transform: capitalize;}(首字母大写) uppercase;(大写) lowercas       e;(小写) none;(无)

7. 修饰 {text-decoration: underline;}(下划线) overline;(上划线) line-through;(删     除线) blink;(闪烁)


二. 常用字体: (font-family)

"Courier New", Courier, monospace, "Times New Roman", Times, serif, Arial, Helvetica, sans-serif, Verdana


三. 背景属性: (background)

1. 色彩 {background-color: #FFFFFF;}

2. 图片 {background-image: none;}

3. 重复 {background-repeat: no-repeat;}

4. 滚动 {background-attachment: fixed;}(固定) scroll;(滚动)

5. 位置 {background-position: left;}(水平) top(垂直);

简写方法 {background:#000 url(..) repeat fixed left top;} /*简写·这个在阅读代码中经常出现.


四. 区块属性: (Block)

1. 字间距 {letter-spacing: normal;} 数值 

2. 对齐 {text-align: justify;}(两端对齐) left;(左对齐) right;(右对齐) center;(居中)

3. 缩进 {text-indent: 数值px;}

4. 垂直对齐 {vertical-align: baseline;}(基线) sub;(下标) super;(下标) top; text-top; middle; bottom; text-bottom;

5. 词间距word-spacing: normal; 数值

6. 空格white-space: pre;(保留) nowrap;(不换行)

7. 显示 {display:block;}(块) inline;(内嵌) list-item;(列表项) run-in;(追加部分) compact;(紧凑) marker;(标记) table; inline-table; table-raw-group; table-header-group; table-footer-group; table-raw; table-column-group; table-column; table-cell; table-caption;(表格标题) /*display 属性的了解很模糊*/


css


五. 方框属性: (Box)

1. width:; height:; float:; clear:both; margin:; padding:; 顺序:上右下左


六. 边框属性: (Border)

1. border-style: dotted;(点线) dashed;(虚线) solid; double;(双线) groove;(槽线) ridge;(脊状) inset;(凹陷) outset; border-width:; 边框宽度

border-color:#;

简写方法border:width style color; /*简写*/


七. 列表属性: (List-style)

1. 类型list-style-type: disc;(圆点) circle;(圆圈) square;(方块) decimal;(数字) lower-roman;(小罗码数字) upper-roman; lower-alpha; upper-alpha;

2. 位置list-style-position: outside;(外) inside;

3. 图像list-style-image: url(..);


八. 定位属性: (Position)

1.Position: absolute; relative; static;

visibility: inherit; visible; hidden;

overflow: visible; hidden; scroll; auto;

clip: rect(12px,auto,12px,auto) (裁切)


九. CSS文字属性:

1. color : #999999; /*文字颜色*/

2. font-family : 宋体,sans-serif; /*文字字体*/

3. font-size : 9pt; /*文字大小*/

4. font-style:itelic; /*文字斜体*/

5. font-variant:small-caps; /*小字体*/

6. letter-spacing : 1pt; /*字间距离*/

7. line-height : 200%; /*设置行高*/

8. font-weight:bold; /*文字粗体*/

9. vertical-align:sub; /*下标字*/

10. vertical-align:super; /*上标字*/

11. text-decoration:line-through; /*加删除线*/

12. text-decoration: overline; /*加顶线*/

13. text-decoration:underline; /*加下划线*/

14. text-decoration:none; /*删除链接下划线*/

15. text-transform : capitalize; /*首字大写*/

16. text-transform : uppercase; /*英文大写*/

17. text-transform : lowercase; /*英文小写*/

18. text-align:right; /*文字右对齐*/

19. text-align:left; /*文字左对齐*/

20. text-align:center; /*文字居中对齐*/

21. text-align:justify; /*文字分散对齐*/

vertical-align属性

22. vertical-align:top; /*垂直向上对齐*/

23. vertical-align:bottom; /*垂直向下对齐*/

24. vertical-align:middle; /*垂直居中对齐*/

25. vertical-align:text-top; /*文字垂直向上对齐*/

26. vertical-align:text-bottom; /*文字垂直向下对齐*/


十. CSS边框空白

1. padding-top:10px; /*上边框留空白*/

2. padding-right:10px; /*右边框留空白*/

3. padding-bottom:10px; /*下边框留空白*/

4. padding-left:10px; /*左边框留空白




css样式表中的样式覆盖顺序

有时候在写CSS的过程中,某些限制总是不起作用,这就涉及了CSS样式覆盖的问题,如下所示:
#navigator {  
    height: 100%;  
    width: 200;  
    position: absolute;  
    left: 0;  
    border: solid 2 #EEE;  
}  
  
.current_block {  
    border: solid 2 #AE0;  
}
在一些教材中,只说css的顺序是“元素上的style” > “文件头上的style元素” >“外部样式文件”,但对于样式文件中的多个相同样式的优先级怎样排列,没有详细说明。经过测试和继续搜索,得知优先级如下排列:
 
1. 样式表的元素选择器选择越精确,则其中的样式优先级越高:

id选择器指定的样式 > 类选择器指定的样式 > 元素类型选择器指定的样式
所以上例中,#navigator的样式优先级大于.current_block的优先级,及时.current_block是最新添加的,也不起作用。
 
2. 对于相同类型选择器制定的样式,在样式表文件中,越靠后的优先级越高:

注意,这里是样式表文件中越靠后的优先级越高,而不是在元素class出现的顺序。比如.class2 在样式表中出现在.class1之后:


.class1 {  
    color: black;  
}  
  
.class2 {  
    color: red;  
}


而某个元素指定class时采用 class="class2 class1"这种方式指定,此时虽然class1在元素中指定时排在class2的后面,但因为在样式表文件中class1处于class2前面,此时仍然是class2的优先级更高,color的属性为red,而非black。

 

3. 如果要让某个样式的优先级变高,可以使用!important来指定:

.class1 {  
    color: black !important;  
}  
  
.class2 {  
    color: red;  
}

时class将使用black,而非red。

 

对于一开始遇到的问题,有两种解决方案:

1. 将border从#navigator中拿出来,放到一个class .block中,而.block放到.current_block之前:

#navigator {  
    height: 100%;  
    width: 200;  
    position: absolute;  
    left: 0;  
}  
  
.block {  
    border: solid 2 #EEE;  
}  
  
.current_block {  
    border: solid 2 #AE0;  
}
 需要默认为#navigator元素指定class="block"

2. 使用!important:

#navigator {  
    height: 100%;  
    width: 200;  
    position: absolute;  
    left: 0;  
    border: solid 2 #EEE;  
}  
  
.current_block {  
    border: solid 2 #AE0 !important;  
}
此时无需作任何其他改动即可生效。可见第二种方案更简单一些。 



大家都知道CSS的全称叫做“层叠样式表”,但估计很多人都不知道“层叠”二字的含义。其实,“层叠”指的就是样式的覆盖,当一个元素被运用上多种样式,并且出现重名的样式属性时,浏览器必须从中选择一个属性值,这个过程就叫“层叠”。样式覆盖(这种叫法更大众化些)遵循一定的规则。


首先需要明确的是,很多情况都会导致一个元素被运用上多种样式,样式覆盖的规则也需要根据不同的情况来定,具体规则如下。



规则一:由于继承而发生样式冲突时,最近祖先获胜。


CSS的继承机制使得元素可以从包含它的祖先元素中继承样式,考虑下面这种情况:

<html><head><title>rule
 1</title><style>body
 {color:black;}p
 {color:blue;}</style></head><body>    <p>welcome
 to <strong>php中文网</strong></p></body></html>
strong分别从body和p中继承了color属性,但是由于p在继承树上离strong更近,因此strong中的文字最终继承p的蓝色。

规则二:继承的样式和直接指定的样式冲突时,直接指定的样式获胜。

在上面的例子中,假如还指定了strong元素的样式,如:

strong
 {color:red;}
那么根据规则二,strong中的文字最终显示为红色。

规则三:直接指定的样式发生冲突时,样式权值高者获胜。

样式的权值取决于样式的选择器,权值定义如下表。


css选择器

可以看到,内联样式的权值>>ID选择器>>类选择器>>标签选择器,除此以外,后代选择器的权值为每项权值之和,比如”#nav .current a”的权值为100 + 10 + 1 = 111。

规则四:样式权值相同时,后者获胜。

考虑下面这种情况
<pclass="byline">Written
 by <aclass="email"href="mailto:3400982550@qq.com">Jean
 Graine de Pomme</a></p>.byline
 a {color:red;}

p
 .email {color:blue;}

“.byline a”与”p .email”都直接指定了上面的a元素,且权值都为11,根据规则四,最终显示蓝色。


由于样式表可以是外部的,也可以是内部的,规则四提醒我们要注意外部样式表引入的顺序(及<link>元素的顺序),以及外部样式表与内部样式表的出现位置。一般来说,内部样式表出现在所有外部样式表的引入之后,一般是在</head>之前。



规则五:!important的样式属性不被覆盖。

!important可以看做是万不得已的时候,打破上述四个规则的”金手指”。如果你一定要采用某个样式属性,而不让它被覆盖的,可以在属性值后加上!important,以规则四的例子为例,”.byline a {color:red !important;}”可以强行使链接显示红色。大多数情况下都可以通过其他方式来控制样式的覆盖,不能滥用!important。

JQuery中操作Css样式的方法

//1、获取和设置样式
$("#tow").attr("class")获取ID为tow的class属性
$("#two").attr("class","divClass")设置Id为two的class属性。
//2、追加样式
$("#two").addClass("divClass2")为ID为two的对象追加样式divClass2
//3、移除样式
$("#two").removeClass("divClass")移除 ID为two的对象的class名为divClass的样式。
$(#two).removeClass("divClass divClass2")移除多个样式。
//4、切换类名
$("#two").toggleClass("anotherClass") //重复切换anotherClass样式
//5、判断是否含有某项样式
$("#two").hasClass("another")==$("#two").is(".another");
//6、获取css样式中的样式
$("div").css("color") 设置color属性值. $(element).css(style)
//设置单个样式
$("div").css("color","red")
//设置多个样式
$("div").css({fontSize:"30px",color:"red"})
$("div").css("height","30px")==$("div").height("30px")
$("div").css("width","30px")==$("div").height("30px")
//7.offset()方法
//它的作用是获取元素在当前视窗的相对偏移,其中返回对象包含两个属性,即top和left 。
//注意:只对可见元素有效。
var offset=$("div").offset();
var left=offset.left;         //获取左偏移
var top=offset.top;        //获取右偏移
//8、position()方法
//它的作用是获取元素相对于最近的一个position样式属性设置为relative或者absolute的祖父节点的相对偏移,与offset()一样,它返回的对象也包括两个属性即top和left。
//9、scrollTop()方法和scrollLeft()方法
$("div").scrollTop();        //获取元素的滚动条距顶端的距离。
$("div").scrollLeft();         //获取元素的滚动条距左侧的距离。
//10、jQuery中的 toggle和slideToggle 方法,都可以实现对一个元素的显示和隐藏。区别是:
//toggle:动态效果为从右至左。横向动作。
//slideToggle:动态效果从下至上。竖向动作。
//比如想实现一个树由下至上收缩的动态效果,就使用slideToggle就ok了。
$('input').attr("readonly",true)//将input元素设置为readonly
$('input').attr("readonly",false)//去除input元素的readonly属性
$('input').attr("disabled",true)//将input元素设置为disabled
$('input').attr("disabled",false)//去除input元素的disabled属性