【死记硬背】CSS常用属性和注意事项

★ 超出省略号代替

{display:block;white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}

需要多个属性配合

强制不换行 white-space:nowrap;

自动换行 word-wrap: break-word; word-break: normal; 

强制英文单词断行 word-break:break-all;

文字两端对齐 text-align:justify

 

 

★ 对于不支持max min css属性的低版本浏览器的处理方法:

body {
    font-family: microsoft Yahei;
    min-width: 1200px;
    background: #f5f5f5;
    _width: expression(document.documentElement.clientWidth>1200?document.documentElement.clientWidth:1200);
}

 

 

 

★ CSS3 Transition详细研究并理解记住,挺有用的

RGBA和opacity的区别 
opacity会使整个元素包括子元素透明,而RGBA仅仅是元素本事透明,子元素不透明

background:rgba(0,0,0,.5); 

filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#BF000000,endColorstr=#BF000000); 

我们需要留意的是StartColorStrEndColorStr的值,前两位是十六进制的透明度,后面六位是十六进制的颜色。 
换算方法:x=alpha*255 将计算的结果x转换成十六进制即可

 

★ 关于 display:inline-block的使用注意的一个场景:

<div><a></a>……<a></a></div>

div设置宽度,a标签设置字体大小宽度和margin值,在前端demo中无任何问题,但是在thinkPHP框架项目下,a实际宽度多了一像素,导致布局错乱。

对比样式,发现完全一致。使用float:left后解决。

所以以后还是要慎用inline-block,毕竟低版本浏览器支持不全,并且使用block+float只是顺手的事情。

 

★ CSS字体设置

font简写:

这个简写属性用于一次设置元素字体的两个或更多方面。使用 icon 等关键字可以适当地设置元素的字体,使之与用户计算机环境中的某个方面一致。注意,如果没有使用这些关键词,至少要指定字体大小和字体系列。

可以按顺序设置如下属性:

  • font-style 字体样式 [normal(正常) | italic(斜体) | oblique(倾斜)]
  • font-variant 字体变化[normal(正常) | small-caps(小体大写字母)]
  • font-weight 字体粗细[normal(正常) | bold(粗体) | bolder(更粗) | lighter(更细) | 100-900(400:normal,700:bold) 前面两个都支持,后面三个看浏览器了]
  • font-size/line-height 字体大小/行间距[%,px,em,rem]
  • font-family 字体族["具体的字体",通常字体(可理解为字体类型,字体系列)] 详情点击css字体系列

可以不设置其中的某个值,比如 font:100% verdana; 也是允许的。未设置的属性会使用其默认值。

 

★display[block/none]/visibility[hidden/visible]区别

display隐藏后,元素不可见,并且不再占据空间,其他dom有可能会占据他的空间

visibility隐藏后,元素不可见,但是仍然占据空间,其他dom时不会占据他的空间的

 

★ css3旋转动画

.my-case a span{
-webkit-transition: -webkit-transform 0.3s;
-ms-transition: -ms-transform 0.3s;
-o-transition: -o-transform 0.3s;
transition: transform 0.3s;
}
.my-case a:hover span{
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-ms-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);
}

只写下面这个是不可以的,必须有上面的那个才可以动起来

 

★ 关于css字体大小单位的认识

常用的单位有px em rem ……(其他的有空在研究)

px是像素,是长度单位。经常被用来设置字体大小

em是倍数单位,相对于父容器字体大小的倍数

如:<div><a></a><div>

div设置(或继承自他的父容器)的字体大小是10px,那么在a上设置字体大小为2em,就是20px

rem也是倍数单位,相对于根元素<html>的字体大小的倍数。

如:<html><div><a></a></div></html>

html设置为10px的话,div和a都设置为2rem,则他们字体都是20px。

如果这是设置div为2rem(即20px),a设置为2em和2rem,大小分别是40px和20px

 

另外:

① rem的作用,主要是用来统一修改整体页面字体大小用的。也简化了设置字体大小的计算过程,不然一级一级的父容器向上找字体大小值也挺麻烦的。

如果用px的话是无法通过修改一个地方就达到修改整体字体大小的作用。如果用em的话,一级一级的父容器会导致很复杂。

② em,rem也可以被用来设置text-indent,margin,padding,line-height等。这个时候em依据的是当前设置对象的字体的大小。而不是它的容器的字体大小

  举例:<html><div><a>一二三四五六七八九十</a></div></html>

  html{font-size:20px}div{font-size:20px} a{display:block;font-size:10px;text-indent:2em;line-height:1em;margin-right:2rem}

  此时text-indent:2em为20px,line-height:1em为10px,margin-right:2rem为40px

③ rem不支持ie8,em支持。考虑兼容ie8的话一般是这样设置的{font-size:20px;font-size:2rem} 有点麻烦。

可以考虑使用兼容ie的两个方法(手写html法和js检测法,以后有空写),然后写单独的ie兼容样式进去

④。为了物尽其用,正确发挥rem和em的作用,在以后设置字体的时候,如果不是特殊需求,推荐使用px,如果有响应式需求,首先选择rem,但是设置缩进内边距行间距的时候推荐使用em。这样他们会随着实际字体大小的改变而改变,如果使用rem和px的话,这些边距行间距不会随着字体大小改变而改变【当然实际应用中,需求极其复杂,真正掌握知识,才能灵活应用】

使用rem时,如果不去做类似下面的操作,那么它和用px没有任何功能上的区别,都是写死的固定的单位,可以看做一个(ie8不支持)的(px的代号)单位。

 

html {
	font-size: 62.5%;
}
@media only screen and (min-width: 481px){
	html {
		font-size: 94%!important;
	}
}
@media only screen and (min-width: 561px){
	html {
		font-size: 109%!important;
	}

}
@media only screen and (min-width: 641px){
	html {
		font-size: 125%!important;
	}
}

  【如上面代码,用rem就是为了方便的统一设置字体大小用的,不然和px有何区别?徒增ie8不支持的烦恼罢了】

所以:如果不是和字大小相关太密切,需要随着字体大小改变而改变的,不推荐使用em和rem,直接用px,然后每个对应的模块写自己的响应式css代码就好了

@media (min-width: 768px) {
/*成功案例*/
.xh-suc{
padding: 2rem;
}
}
@media (min-width: 992px) {
/*成功案例*/
.xh-suc{
padding: 3rem;
}
}
在上面这种情况中,还不如用px呢。横竖你都要重设大小,这样反而不用考虑ie8的兼容情况。不然用em也行啊

两篇文章:

http://www.w3cways.com/1713.html

http://www.520ued.com/article/53e98eafbb16a74c41b5de77

 

★ 兼容低版本ie的集中方法

【本地项目在“D:\MY_WEB_DEMO\MyFrontFrame\JS-Plugin\fuckIE 对兼容IE(各版本)的研究成果”文件夹中】

1、参考360导航,360搜索网站的做法:

<!DOCTYPE html>
<!--[if lt IE 7 ]><html class="ie6"><![endif]-->
<!--[if IE 7 ]><html class="ie7"><![endif]-->
<!--[if IE 8 ]><html class="ie8"><![endif]-->
<!--[if IE 9 ]><html class="ie9"><![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--><html class="w3c"><!--<![endif]-->

然后css中这样写:

#head{}

.ie7 #head,.ie6 #head{} //这里写在所有对应样式的后面,看起来不会太乱的

好处:只加载一个样式。

缺点:每个页面都要这样写开头,不方便。

2、和上面的那个一样,只不过通过js自动完成

我知道的有一个叫modernizr.js的可以做到(简单看了一下,这货不是干这个用的?那就考虑自己写一个js插件来实现吧)

【上面说的无法实现,自己写也不行,js无法操作html以外部分,只能通过后端部分实现(但前端开发时还是要自己写,而且写完给后端还要删掉?so此路不通),或者给html添加不同class方法来间接实现】

好处:只加载一个样式。且不用每个页面都这么写开头

缺点:多了一个js占用资源

3、通过 条件注释法 实现

<!--[if IE 8 ]><link href=“ie8.css”><![endif]-->

<!--[if IE 7 ]><link href=“ie7.css”><![endif]-->

<!--[if IE 6 ]><link href=“ie6.css”><![endif]-->

需要多加载额外样式,开发中,需要写多个css文件,每个对应的html文件都要有这个引用,每个对应的兼容css文件都要重新写,即便代码兼容方案相同

4、通过 类内属性前缀法 实现

hack
写法
实例
IE6(S)
IE6(Q)
IE7(S)
IE7(Q)
IE8(S)
IE8(Q)
IE9(S)
IE9(Q)
IE10(S)
IE10(Q)
*
*color
青色
Y
Y
Y
Y
N
Y
N
Y
N
Y
+
+color
绿色
Y
Y
Y
Y
N
Y
N
Y
N
Y
-
-color
黄色
Y
Y
N
N
N
N
N
N
N
N
_
_color
蓝色
Y
Y
N
Y
N
Y
N
Y
N
N
#
#color
紫色
Y
Y
Y
Y
N
Y
N
Y
N
Y
\0
color:red\0
红色
N
N
N
N
Y
N
Y
N
Y
N
\9\0
color:red\9\0
粉色
N
N
N
N
N
N
Y
N
Y
N
!important
color:blue !important;color:green;
棕色
N
N
Y
N
Y
N
Y
N
Y
Y

 

在main.css中这样写: *margin{} _margin{}

纯css兼容法,但不推荐,写起来太麻烦。

3、4这两点可以参考百度百科css hack词条。

 

★select美化

重点:-webkit-appearance:none;appearance:none;

<div class="select" style="margin-top:0px;outline:none;border:1px solid #BBBBBB;border-radius:4px;position:relative;"> 
<select id="orderTimeDataSel" class="text" style="height:40px;-webkit-appearance:none;appearance:none;border:none;font-size:18px;padding:0px 10px;display:block;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;color:#333333;border-radius:4px;"> 
<option>--预约日期--</option> 
</select> 
</div> 

 

★如果使用css不用js定义一个正方形div

1、使用css 设置width height 都为相同的像素值

但是如果不能用像素值来定义,只能使用百分比定义的时候。是不可以使用例如{width:30%;height:30%}来定义的。除非它处于一个正方形容器中。但是一般情况下都是在body下的,然而大部分屏幕的宽高是不同的。

那么一个办法是只定义宽度,然后在这个div中放一个正方形的完全透明的图片,越小越好,然后让这个图片{width:100%;height:auto},这个时候设置器父容器{overflow:hidden;}即可保证此div为方的。

其他网友的方案:

http://www.cocoachina.com/webapp/20150807/12940.html

css3的vw vh单位不错,在移动端应该都兼容吧

 

★关于css样式的继承问题,或者说css的组件化问题

我一直纠结的一个问题就是css如何的组件化。来配合已经比较成熟的js组件化和本来就没有问题的dom组件化(不就是嵌套吗,其实web组件主要是css和js的组件化)

css组件化,说白了就是样式复用。

而样式服用,天生就会出现容易被干扰的情况。

比如

.redList .list{} .redList .list a{}

.redList .redList-list{} .redList .redList-list a{}

上面两个是比较成熟的两种书写方式:

第一种方式容易被样式干扰:对应的那个dom会继承.list{}然后再被.redList .list{}重写。团队合作沟通不好容易出问题。合并页面时还需要调整这些东西。

第二种看似没有问题,amui也推崇这种写法,但是写起来太麻烦了。如果是相同的组件需要复用但是又不一样。比如:我写了一个这样的dom结构:

<ul class="redList"><li class="redList-list"></li><li class="redList-list"></li><li class="redList-list"></li></ul>

如果我需要一个相同的blueList不愿意手写了,因为上面那个dom结构及其复杂,手写纯属浪费时间。那么我直接复制就好了。但是就会遇到这样的问题。

那就是每一个子项目我都需要修改对应的class为blueList-*。这是很烦的。

所以我们可以使用这样的办法:

那就是 .commonList .list {} 或者 .commonList c-list{}都行,后者保证不会被样式中不小心出现的.list干扰。

然后通过添加额外的class .redList 和 .blueList来重写不同的部分。

这样既满足了复制dom结构是时不需要修改子项目的需求,也满足个性化定制的需求。大部分的UI框架也是这么做的。

 

 

★line-height不带单位

主要问题在于继承。子元素会默认继承父元素的行高。

如果在父元素中设置了字体和行高。

子元素只设置了字体,没有设置行高。使用具体的单位值(px/em)的话,那所有的子元素的行高就是一样的固定的。可能会出问题。

不带单位的话,子元素只继承这个倍数,然后根据自己的字体大小进行计算。这样就是一个动态的行高。

这里要说的是,如果你用的是百分比,仍然是先根据父元素字体的大小计算出结果,然后一路继承下去的。所以这个不带单位在很多时候很有必要。

 

 

★IE8不支持rgba()

今天遇到了一个问题,要在一个页面中设置一个半透明的白色div。这个貌似不是难题,只需要给这个div设置如下的属性即可:

background: rgba(255,255,255,.1);

但是要兼容到ie8。这个就有点蛋疼了。因为ie8不支持rgba()函数。下面我们总结一下rgba()函数的含义。

rgba的含义,r代表red,g代表green,b代表blue,红绿蓝是三原色。所有颜色都可以由这三种颜色拼合而成。a代表透明度。比如rgba(255,255,255,0.1)就是透明度为0.1的白色。在现代浏览器中是支持rgba的。但是在ie8等古董级浏览器中是不支持的rgba的,ie8只能勉强支持rgb()函数(即去掉了透明度,只能表示颜色)。

所以在ie8中设置半透明就要费点脑子了。从大神那里得知可以使用ie的filter来解决这个问题,css代码如下:

<span style="white-space:pre"></span>
<style>
  background: rgba(255,255,255,.1);   filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#19ffffff,endColorstr=#19ffffff);
</style>

第二句话的意思就是当上一行的透明度不起作用的时候执行。这句话的意思本来是用来做渐变的。但是这个地方不需要渐变。所以两个颜色都设置成了相同的颜色。

大家注意,这个颜色“#19ffffff”是由两部分组成的。

第一部是#号后面的19 。是rgba透明度0.1的IEfilter值。从0.1到0.9每个数字对应一个IEfilter值。对应关系如下:

rgba和ie下filter数值转换
0.1 19
0.2 33
0.3 4C
0.4 66
0.5 7F
0.6 99
0.7 B2
0.8 C8
0.9 E5

直接取整计算的,没有进位直接舍去

alpha*255再转成16进制即可

 

第二部分是19后面的六位 。这个是六进制的颜色值。要跟rgb函数中的取值相同。比如rgb(255,255,255)对应#ffffff;都是白色。

到这里,rgba的用法就可以兼容IE8了。

持续增加中……

posted @ 2016-03-11 10:03  幻想家~  阅读(522)  评论(0编辑  收藏  举报