• 【死记硬背】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- 1200px;
        background: #f5f5f5;
        _ 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- 481px){
    	html {
    		font-size: 94%!important;
    	}
    }
    @media only screen and (min- 561px){
    	html {
    		font-size: 109%!important;
    	}
    
    }
    @media only screen and (min- 641px){
    	html {
    		font-size: 125%!important;
    	}
    }
    

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

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

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

    两篇文章:

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

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

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

    【本地项目在“D:MY_WEB_DEMOMyFrontFrameJS-PluginfuckIE 对兼容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
    color:red
    红色
    N
    N
    N
    N
    Y
    N
    Y
    N
    Y
    N
    9
    color:red9
    粉色
    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;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 都为相同的像素值

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

    那么一个办法是只定义宽度,然后在这个div中放一个正方形的完全透明的图片,越小越好,然后让这个图片{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了。

    持续增加中……

  • 相关阅读:
    删除ubuntu多余内核
    Linux从入门到精通(第8章--磁盘管理)
    图书销售管理系统概要设计,系统数据结构设计分工
    图书管理销售系统,出错设计部分
    图书管理销售系统概要分析,接口设计部分
    图书管理销售系统,运行设计部分
    图书管理销售管理系统,总体设计部分
    图书销售管理概要分析报告,引言部分
    图书销售管理系统概要分析报告总体分工
    图书销售管理系统需求分析,各种功能图部分
  • 原文地址:https://www.cnblogs.com/ferron/p/4735892.html
Copyright © 2020-2023  润新知