分类 前端探索 下的文章

CSS学起来并不难,但在大型项目中,就变得难以管理,特别是不同的人在CSS书写风格上稍有不同,团队上就更加难以沟通,为此总结了一些如何实现高效整洁的CSS代码原则:

1. 使用Reset但并非全局Reset

不同浏览器元素的默认属性有所不同,使用Reset可重置浏览器元素的一些默认属性,以达到浏览器的兼容。但需要注意的是,请不要使用全局Reset:

*{ margin:0; padding:0; }

这不仅仅因为它是缓慢和低效率的方法,而且还会导致一些不必要的元素也重置了外边距和内边距。在此建议参考YUI Reset和Eric Meyer的做法。我跟Eric Meyer的观点相同,Reset并不是一成不变的,具体还需要根据项目的不同需求做适当的修改,以达到浏览器的兼容和操作上的便利性。我使用的Reset如下:

/** 清除内外边距 **/
body, h1, h2, h3, h4, h5, h6, hr, p,
blockquote, /* structural elements 结构元素 */
dl, dt, dd, ul, ol, li, /* list elements 列表元素 */
pre, /* text formatting elements 文本格式元素 */
form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */
th, td, /* table elements 表格元素 */
img/* img elements 图片元素 */{
border:medium none;
margin: 0;
padding: 0;
}
/** 设置默认字体 **/
body,button, input, select, textarea {
font: 12px/1.5 '宋体',tahoma, Srial, helvetica, sans-serif;
}
h1, h2, h3, h4, h5, h6 { font-size: 100%; }
em{font-style:normal;}
/** 重置列表元素 **/
ul, ol { list-style: none; }
/** 重置超链接元素 **/
a { text-decoration: none; color:#333;}
a:hover { text-decoration: underline; color:#F40; }
/** 重置图片元素 **/
img{ border:0px;}
/** 重置表格元素 **/
table { border-collapse: collapse; border-spacing: 0; }

2. 良好的命名习惯

无疑乱七八糟或者无语义命名的代码,谁看了都会抓狂。就像这样的代码:

.aaabb{margin:2px;color:red;}

我想即使是初学者,也不至于会在实际项目中如此命名一个class,但有没有想过这样的代码同样是很有问题的:

My name is Wiky

问题在于如果你需要把所有原本红色的字体改成蓝色,那修改后就样式就会变成:

.red{color:bule;}

这样的命名就会很让人费解,同样的命名为.leftBar的侧边栏如果需要修改成右侧边栏也会很麻烦。所以,请不要使用元素的特性(颜色,位置,大小等)来命名一个class或id,您可以选择意义的命名如:#navigation{…},.sidebar{…},.postwrap{…}
这样,无论你如何修改定义这些class或id的样式,都不影响它跟HTML元素间的联系。
另外还有一种情况,一些固定的样式,定义后就不会修改的了,那你命名时就不用担忧刚刚说的那种情况,如

.alignleft{float:left;margin-right:20px;}
.alignright{float:right;text-align:right;margin-left:20px;}
.clear{clear:both;text-indent:-9999px;

那么对于这样一个段落

我是一个段落!

如果需要把这个段落由原先的左对齐修改为右对齐,那么只需要修改它的className就为alignright就可以了。

3. 代码缩写

CSS代码缩写可以提高你写代码的速度,精简你的代码量。在CSS里面有不少可以缩写的属性,包括margin,padding,border,font,background和颜色值等,如果您学会了代码缩写,原本这样的代码:

li{
font-family:Arial, Helvetica, sans-serif;
font-size: 1.2em;
line-height: 1.4em;
padding-top:5px;
padding-bottom:10px;
padding-left:5px;
}

就可以缩写为:

li{
font: 1.2em/1.4em Arial, Helvetica, sans-serif;
padding:5px 0 10px 5px;
}

如果您想更了解这些属性要怎么缩写,可以参考《常用CSS缩写语法总结》或者下载CSS-Shorthand-Cheat-Sheet.pdf 。

4. 利用CSS继承

如果页面中父元素的多个子元素使用相同的样式,那最好把他们相同的样式定义在其父元素上,让它们继承这些CSS样式。这样你可以很好的维护你的代码,并且还可以减少代码量。那么本来这样的代码:

#container li{ font-family:Georgia, serif; }
#container p{ font-family:Georgia, serif; }
#container h1{font-family:Georgia, serif; }

就可以简写成:

#container{ font-family:Georgia, serif; }

5. 使用多重选择器

你可以合并多个CSS选择器为一个,如果他们有共同的样式的话。这样做不但代码简洁且可为你节省时间和空间。如:

h1{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }
h2{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }
h3{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }

可以合并为

h1, h2, h3{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }

6. 适当的代码注释

代码注释可以让别人更容易读懂你的代码,且合理的组织代码注释,可使得结构更加清晰。你可以选择做的样式表的开始添加目录:

/*------------------------------------
1. Reset
2. Header
3. Content
4. SideBar
5. Footer
----------------------------------- */

如此你代码的结构就一目了然,你可以容易的查找和修改代码。

而对于代码的主内容,也应适当的加以划分,甚至在有必要的地方在对代码加以注释说明,这样也有利于团队开发:

/*** Header ***/
#header{ height:145px; position:relative; }
#header h1{ width:324px; margin:45px 0 0 20px; float:left; height:72px;}
/*** Content ***/
#content{ background:#fff; width:650px; float:left; min-height:600px; overflow:hidden;}
#content h1{color:#F00}/* 设置字体颜色 */
#content .posts{ overflow:hidden; }
#content .recent{ margin-bottom:20px; border-bottom:1px solid #f3f3f3; position:relative; overflow:hidden; }
/*** Footer ***/
#footer{ clear:both; padding:50px 5px 0; overflow:hidden;}
#footer h4{ color:#b99d7f; font-family:Arial, Helvetica, sans-serif; font-size:1.1em; }

7. 给你的CSS代码排序

如果代码中的属性都能按照字母排序,那查找修改的时候就能更加快速:

/*** 样式属性按字母排序 ***/
div{
background-color:#3399cc;
color:#666;
font:1.2em/1.4em Arial, Helvetica, sans-serif;
height:300px;
margin:10px 5px;
padding:5px 0 10px 5px;
width:30%;
z-index:10;
}

8. 保持CSS的可读性

书写可读的CSS将会使得更容易查找和修改样式。对于以下两种情况,哪种可读性更高,我想不言而明。

/*** 每个样式属性写一行 ***/
div{
background-color:#3399cc;
color:#666;
font: 1.2em/1.4em Arial, Helvetica, sans-serif;
height:300px;
margin:10px 5px;
padding:5px 0 10px 5px;
width:30%;
z-index:10;
}
/*** 所有的样式属性写在同一行 ***/
div{ background-color:#3399cc; color:#666; font: 1.2em/1.4em Arial, Helvetica, sans-serif; height:300px; margin:10px 5px;padding:5px 0 10px 5px; width:30%; z-index:10; }

当对于一些样式属性较少的选择器,我会写到一行:

/*** 选择器属性少的写在同一行 ***/
 div{ background-color:#3399cc; color:#666;}

对于这个规则并非硬性规定,但无论您采用哪种写法,我的建议是始终保持代码一致。属性多的分行写,属性少于3个可以写一行。

9. 选择更优的样式属性值

CSS中有些属性采用不同的属性值,虽然达到的效果差不多,当性能上却存在着差异,如


区别在于border:0把border设为0px,虽然在页面上看不见,但按border默认值理解,浏览器依然对border-width/border-color进行了渲染,即已经占用了内存值。


而border:none把border设为“none”即没有,浏览器解析“none”时将不作出渲染动作,即不会消耗内存值。所以建议使用border:none;


同样的,display:none隐藏对象浏览器不作渲染,不占用内存。而visibility:hidden则会。

10. 使用代替@import

首先,@import不属于XHTML标签,也不是Web标准的一部分,它对于较早期的浏览器兼容也不高,并且对于网站的性能有某些负面的影响。具体可以参考《高性能网站设计:不要使用@import》。所以,请避免使用@import

11. 使用外部样式表

这个原则始终是一个很好的设计实践。不单可以更易于维护修改,更重要的是使用外部文件可以提高页面速度,因为CSS文件都能在浏览器中产生缓存。内置在HTML文档中的CSS则会在每次请求中随HTML文档重新下载。所以,在实际应用中,没有必要把CSS代码内置在HTML文档中:

<style type="text/css" >
    #container{ .. }
    #sidebar{ .. }
</style>

<li style="font-family:Arial, helvetica, sans-serif; color:#666; " >

而是使用导入外部样式表:

<link rel="stylesheet" type="text/css" href="css/styles.css" />

12. 避免使用CSS表达式(Expression)

CSS表达式是动态设置CSS属性的强大(但危险)方法。Internet Explorer从第5个版本开始支持CSS表达式。下面的例子中,使用CSS表达式可以实现隔一个小时切换一次背景颜色:

background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" );

如上所示,expression中使用了JavaScript表达式。CSS属性根据JavaScript表达式的计算结果来设置。


表达式的问题就在于它的计算频率要比我们想象的多。不仅仅是在页面显示和缩放时,就是在页面滚动、乃至移动鼠标时都会要重新计算一次。给CSS表达式增加一个计数器可以跟踪表达式的计算频率。在页面中随便移动鼠标都可以轻松达到10000次以上的计算量。


如果必须使用CSS表达式,一定要记住它们要计算成千上万次并且可能会对你页面的性能产生影响。所以,在非不得已,请避免使用CSS表达式。

13. 代码压缩

当你决定把网站项目部署到网络上,那你就要考虑对CSS进行压缩,出去注释和空格,以使得网页加载得更快。压缩您的代码,可以采用一些工具


利用它可精简CSS代码,减少文件大小,以获得更高的加载速度。

14. 总结

在本文中,我力图更详尽的总结书写更高效的CSS代码的原则,但鉴于本人见识和精力有限,我还是希望这些原则能帮助您更好的书写和管理您的CSS代码,不知您又是如何书写CSS的,是否也有一些想要分享的技巧?给我留言吧谢谢~

背景

这篇文章定义了 HTML 和 CSS 的格式和代码规范,旨在提高代码质量和协作效率。

通用样式规范

协议

省略图片、样式、脚本以及其他媒体文件 URL 的协议部分(http:,https:),除非文件在两种协议下都不可用。这种方案称为 protocol-relative URL,好处是无论你是使用 HTTPS 还是 HTTP 访问页面,浏览器都会以相同的协议请求页面中的资源,同时可以节省一部分字节。

<!-- Not recommended -->
<script src="https://www.google.com/js/gweb/analytics/autotrack.js"></script>
<!-- Recommended -->
<script src="//www.google.com/js/gweb/analytics/autotrack.js"></script>
/* Not recommended */
    .example {
      background: url(https://www.google.com/images/example);
    }
/* Recommended */
    .example {
      background: url(//www.google.com/images/example);
    }

通用格式规范

缩进

一次缩进2个空格,不要使用 tab 或者混合 tab 和空格的缩进。

<ul>
      <li>Fantastic
      <li>Great
    </ul>
.example {
      color: blue;
    }

大小写

以下都应该用小写:
HTML 元素名称,属性,属性值(除非 text/CDATA),CSS 选择器,属性,属性值。

<!-- Not recommended -->
    <A HREF="/">Home</A>
<!-- Recommended -->
    <img src="google.png" alt="Google">
 /* Not recommended */
    color: #E5E5E5;
/* Recommended */
    color: #e5e5e5;

结尾空格

结尾空格不仅多余,而且在比较代码时会更麻烦。

<!-- Not recommended -->
    <p>What?_

    <!-- Recommended -->
    <p>Yes please.

通用元规范

编码

在 HTML 中通过指定编码方式,CSS 中不需要指定,因为默认是 UTF-8。

注释

使用注释来解释代码:包含的模块,功能以及优点。

任务项

用 TODO 来标记待办事项,而不是用一些其他的标记,像 @@。

<!-- TODO: remove optional tags -->
    <ul>
      <li>Apples</li>
      <li>Oranges</li>
    </ul>

HTML 风格规范

文档类型

HTML 文档应使用 HTML5 的文档类型:。
孤立标签无需封闭自身,<br> 不要写成 <br />。

HTML 正确性

尽可能使用正确的 HTML。

<!-- Not recommended -->
    <title>Test</title>
    <article>This is only a test.
<!-- Recommended -->
    <!DOCTYPE html>
    <meta charset="utf-8">
    <title>Test</title>
    <article>This is only a test.</article>

语义化

根据使用场景选择正确的 HTML 元素(有时被错误的称为“标签”)。例如,使用 h1 元素创建标题,p 元素创建段落,a 元素创建链接等等。正确的使用 HTML 元素对于可访问性、可重用性以及编码效率都很重要。

<!-- Not recommended -->
    <div onclick="goToRecommendations();">All recommendations</div>
<!-- Recommended -->
    <a href="recommendations/">All recommendations</a>

多媒体元素降级

对于像图片、视频、canvas 动画等多媒体元素,确保提供其他可访问的内容。图片可以使用替代文本(alt),视频和音频可以使用文字版本。

<!-- Not recommended -->
    <img src="spreadsheet.png">
<!-- Recommended -->
    <img src="spreadsheet.png" alt="Spreadsheet screenshot.">

关注分离

标记、样式和脚本分离,确保相互耦合最小化。

实体引用

如果团队中文件和编辑器使用同样的编码方式,就没必要使用实体引用,如 ,除了一些在 HTML 中有特殊含义的字符(如 < 和 &)以及不可见的字符(如空格)。

<!-- Not recommended -->
    The currency symbol for the Euro is &ldquo;&eur;&rdquo;.
<!-- Recommended -->
    The currency symbol for the Euro is “€”.

type 属性

在引用样式表和脚本时,不要指定 type 属性,除非不是 CSS 或 JavaScript。
因为 HTML5 中已经默认指定样式变的 type 是 text/css,脚本的type 是 text/javascript。

<!-- Not recommended -->
    <link rel="stylesheet" href="//www.google.com/css/maia.css"
      type="text/css">

    <!-- Recommended -->
    <link rel="stylesheet" href="//www.google.com/css/maia.css">

    <!-- Not recommended --><script src="//www.google.com/js/gweb/analytics/autotrack.js"
      type="text/javascript"></script>

    <!-- Recommended --><script src="//www.google.com/js/gweb/analytics/autotrack.js"></script>

HTML 格式规范

HTML 引号

属性值用双引号。

<!-- Not recommended --><a class='maia-button maia-button-secondary'>Sign in</a>
<!-- Recommended --><a class="maia-button maia-button-secondary">Sign in</a>

CSS 风格规范

ID 和 Class 命名

使用有含义的 id 和 class 名称。

/* Not recommended: meaningless */
    #yee-1901 {}

    /* Not recommended: presentational */
    .button-green {}
    .clear {}
/* Recommended: specific */
    #gallery {}
    #login {}
    .video {}

    /* Recommended: generic */
    .aux {}
    .alt {}

ID 和 Class 命名风格

id 和 class 应该尽量简短,同时要容易理解。

/* Not recommended */
    #navigation {}
    .atr {}
/* Recommended */
    #nav {}
    .author {}

选择器

除非需要,否则不要在 id 或 class 前加元素名。

/* Not recommended */
    ul#example {}
    div.error {}
/* Recommended */
    #example {}
    .error {}

属性简写

尽量使用 CSS 中可以简写的属性 (如 font),可以提高编码效率以及代码可读性。

/* Not recommended */
    border-top-style: none;
    font-family: palatino, georgia, serif;
    font-size: 100%;
    line-height: 1.6;
    padding-bottom: 2em;
    padding-left: 1em;
    padding-right: 1em;
    padding-top: 0;
/* Recommended */
    border-top: 0;
    font: 100%/1.6 palatino, georgia, serif;
    padding: 0 1em 2em;

0 和单位

值为 0 时不用添加单位。

margin: 0;
    padding: 0;

开头的 0

值在 -1 和 1 之间时,不需要加 0。

font-size: .8em;

16进制表示法

/* Not recommended */
    color: #eebbcc;


/* Recommended */
    color: #ebc;

前缀

使用带前缀的命名空间可以防止命名冲突,同时提高代码可维护性。

.adw-help {} /* AdWords */
    #maia-note {} /* Maia */

ID 和 Class 命名分隔符

选择器中使用连字符可以提高可读性。

/* Not recommended: does not separate the words “demo” and “image” */
    .demoimage {}

    /* Not recommended: uses underscore instead of hyphen */
    .error_status {}
/* Recommended */
    #video-id {}
    .ads-sample {}

CSS 格式规范

书写顺序

按照属性首字母顺序书写 CSS 易于阅读和维护,排序时忽略带有浏览器前缀的属性。

background: fuchsia;
    border: 1px solid;
    -moz-border-radius: 4px;
    -webkit-border-radius: 4px;
    border-radius: 4px;
    color: black;
    text-align: center;
    text-indent: 2em;

块级内容缩进

为了反映层级关系和提高可读性,块级内容都应缩进。

@media screen, projection {

      html {
        background: #fff;
        color: #444;
      }

    }

声明结束

每行 CSS 都应以分号结尾。

/* Not recommended */
    .test {
      display: block;
      height: 100px
    }
/* Recommended */
    .test {
      display: block;
      height: 100px;
    }

属性名结尾

属性名和值之间都应有一个空格。

/* Not recommended */
    h3 {
      font-weight:bold;
    }
/* Recommended */
    h3 {
      font-weight: bold;
    }

声明样式块的分隔

在选择器和 {} 之间用空格隔开。

/* Not recommended: missing space */
    #video{
      margin-top: 1em;
    }

    /* Not recommended: unnecessary line break */
    #video
    {
      margin-top: 1em;
    }
/* Recommended */
    #video {
      margin-top: 1em;
    }

选择器分隔

每个选择器都另起一行。

/* Not recommended */
    a:focus, a:active {
      position: relative; top: 1px;
    }
/* Recommended */
    h1,
    h2,
    h3 {
      font-weight: normal;
      line-height: 1.2;
    }

规则分隔

规则之间都用空行隔开。

html {
      background: #fff;
    }

    body {
      margin: auto;
      width: 50%;
    }

CSS 引号

属性选择器和属性值用单引号,URI 的值不需要引号。

/* Not recommended */
    @import url("//www.google.com/css/maia.css");

    html {
      font-family: "open sans", arial, sans-serif;
    }
/* Recommended */
    @import url(//www.google.com/css/maia.css);

    html {
      font-family: 'open sans', arial, sans-serif;
    }

CSS 元规则

分段注释

用注释把 CSS 分成各个部分。

/* Header */

    #adw-header {}

    /* Footer */

    #adw-footer {}

    /* Gallery */

    .adw-gallery {}

结语

坚持遵循代码规范。

来自:Web Develop - SegmentFault

原文:Google HTML/CSS Style Guide

估计大多数人误解了float的原本设计初衷,但是这里的“误用”是要加引号的,因为这是一种无心插柳的应用。即,用float做网页布局是很合情合理的,鼓励同志们继续使用。

这篇文章主要是为了解决一个实际遇到的问题:
左右两列布局,左侧宽度固定,右侧宽度自适应(或左中右三列布局,左侧和中间宽度固定,右侧宽度自适应),当页面宽度变化时,怎样使右侧元素中的内容始终在页面剩余宽度中居中显示,设置了text-align: center;之后,问题其实也就是怎样让右侧元素的宽度占据页面剩余所有宽度。

基础知识:元素float之后的变化

1.原本为inline或原本为block的元素,设置了float: left 或 float: right之后,会变得具有inline-block元素的特性,即:不独占一行,且可以设置宽和高。
2.与position:absolute;的脱离文档流不同的是:float的几个元素,它们在同一个文档流中。
3.float半脱离文档流:两个元素中的前一个设置了float:left;,对于后续元素的元素来说,前一个元素是脱离文档流的,也就是会占据元素的位置;对于后续元素的内容来说,前一个元素又是占据文档流的,也就是不会覆盖前一个元素的内容。如图所示:
合理使用float布局网页
合理使用float布局网页

方法一: float + calc()

html:

<div class="wrap">
    <div class="left">left</div>
    <div class="right"><p>我要居中</p><p>center</p></div>
</div>

css:

.wrap {
  width: 500px;
  background: yellow;
  overflow: hidden;
}
.left {
  float:left;
  width: 100px;
  background: blue;
}
.right{
  float:left;
  background: red;
  text-align:center;
}

如果我们仅仅这样写,那么效果会像下图这样:
合理使用float布局网页
可以看到右侧元素的宽度并不是页面剩余宽度。原因是:右侧元素float之后具有了行内块级元素的特性,即宽度为auto。所以无法占满剩余宽度。
这不是我们想要的结果,所以我们要自己设置右侧元素的宽度:

.right {
    width: calc(100% - 100px);
}

就符合我们的要求了:
合理使用float布局网页
方法二:position / float + margin-left

html部分同上:

<div class="wrap">
    <div class="left">left</div>
    <div class="right"><p>我要居中</p><p>center</p></div>
</div>

css:

.left {
  position:absolute;left: 0; /*或 float:left; */
  width: 100px;
  background: blue;
}
.right{
  margin-left: 100px;
  background: red;
  text-align:center;
}

原理是:左侧元素float: left或者设置position: absolute 之后脱离了文档流,右侧其实依然是一个霸道的独占一行的块级元素(block),设置margin-left为左侧元素宽度之后,看起来就像是两个元素在同一行,且右侧元素宽度自适应啦:
合理使用float布局网页
参考:imooc

序言

使用技巧会让人变的越来越懒,没错,我就是想让你变懒。

下面是我收集的CSS高级技巧,希望你懒出境界。

1. 黑白图像

这段代码会让你的彩色照片显示为黑白照片,是不是很酷?


    img.desaturate {    
             filter: grayscale(100%);    
             -webkit-filter: grayscale(100%);    
             -moz-filter: grayscale(100%);    
             -ms-filter: grayscale(100%);    
             -o-filter: grayscale(100%);
    }

2. 使用 :not() 在菜单上应用/取消应用边框

先给每一个菜单项添加边框



    /* add border */
    .nav li {  
         border-right: 1px solid #666;
    }

……然后再除去最后一个元素……



    // remove border /
    .nav li:last-child {
      border-right: none;
    }


……可以直接使用 :not() 伪类来应用元素:



    .nav li:not(:last-child) {  
           border-right: 1px solid #666;
    }

这样代码就干净,易读,易于理解了。

当然,如果你的新元素有兄弟元素的话,也可以使用通用的兄弟选择符(~):



    ..nav li:first-child ~ li {  
             border-left: 1px solid #666;
    }


3. 页面顶部阴影

下面这个简单的 CSS3 代码片段可以给网页加上漂亮的顶部阴影效果:



    body:before {          
              content: "";          
              position: fixed;          
              top: -10px;          
              left: 0;          
              width: 100%;          
              height: 10px; 
              
              -webkit-box-shadow: 0px 0px 10px rgba(0,0,0,.8);          
              -moz-box-shadow: 0px 0px 10px rgba(0,0,0,.8);          
              box-shadow: 0px 0px 10px rgba(0,0,0,.8); 
              
              z-index: 100;
    }

4. 给 body 添加行高

你不需要分别添加 line-height 到每个p,h标记等。只要添加到 body 即可:



    body {  
         line-height: 1;
    }


这样文本元素就可以很容易地从 body 继承。

5. 所有一切都垂直居中

要将所有元素垂直居中,太简单了:



    html, body {  
         height: 100%;  
         margin: 0;
    }
    body {  
         -webkit-align-items: center;  
        -ms-flex-align: center;  
        align-items: center;  
         display: 
         -webkit-flex;  
         display: flex;
    }


看,是不是很简单。

注意:在IE11中要小心flexbox。

6. 逗号分隔的列表

让HTML列表项看上去像一个真正的,用逗号分隔的列表:



    ul > li:not(:last-child)::after {  
          content: ",";
    }


对最后一个列表项使用 :not() 伪类。

7. 使用负的 nth-child 选择项目

在CSS中使用负的 nth-child 选择项目1到项目n。



    li {
      display: none;
    }
    /* select items 1 through 3 and display them */
    li:nth-child(-n+3) {
      display: block;
    }

8. 对图标使用 SVG

我们没有理由不对图标使用SVG:



    .logo {
      background: url("logo.svg");
    }


SVG对所有的分辨率类型都具有良好的扩展性,并支持所有浏览器都回归到IE9。这样可以避开.png、.jpg或.gif文件了。

9. 优化显示文本

有时,字体并不能在所有设备上都达到最佳的显示,所以可以让设备浏览器来帮助你:



    html {
      -moz-osx-font-smoothing: grayscale;
      -webkit-font-smoothing: antialiased;  
      text-rendering: optimizeLegibility;
    }

注:请负责任地使用 optimizeLegibility。此外,IE /Edge没有 text-rendering 支持。

10. 对纯 CSS 滑块使用 max-height

使用 max-height 和溢出隐藏来实现只有CSS的滑块:



    .slider ul {
      max-height: 0;  
      overlow: hidden;
    }
    .slider:hover ul {
      max-height: 1000px;  
      transition: .3s ease;
    }

11. 继承 box-sizing

让 box-sizing 继承 html:



    html {
      box-sizing: border-box;
    }
    *, *:before, *:after {
      box-sizing: inherit;
    }


这样在插件或杠杆其他行为的其他组件中就能更容易地改变 box-sizing 了。

12. 表格单元格等宽

表格工作起来很麻烦,所以务必尽量使用 table-layout: fixed 来保持单元格的等宽:



    .calendar {
      table-layout: fixed;
    }

13. 用 Flexbox 摆脱外边距的各种 hack

当需要用到列分隔符时,通过flexbox的 space-between 属性,你就可以摆脱nth-,first-,和 last-child 的hack了:



    .list {
      display: flex;  
      justify-content: space-between;
    }
    .list .person {
      flex-basis: 23%;
    }

现在,列表分隔符就会在均匀间隔的位置出现。

14. 使用属性选择器用于空链接

当a元素没有文本值,但 href 属性有链接的时候显示链接:



    a[href^="http"]:empty::before {
      content: attr(href);
    }

相当方便。

15. 检测鼠标双击

HTML:



    

CSS:



    .test3 span {
      position: relative;
    }
    .test3 span a {
      position: relative;  
      z-index: 2;
    }
    .test3 span a:hover, .test3 span a:active {
      z-index: 4;
    }
    .test3 span input {
      background: transparent;  
      border: 0;  
      cursor: pointer;  
      position: absolute;  
      top: -1px;  
      left: 0;  
      width: 101%;  /* Hacky */
      height: 301%; /* Hacky */
      z-index: 3;
    }
    .test3 span input:focus {
      background: transparent;  
      border: 0;  
      z-index: 1;
    }

16. CSS 写出三角形



    /* create an arrow that points up */
    div.arrow-up {  
       width:0px;  
       height:0px;  
       border-left:5px solid transparent;  /* left arrow slant */
      border-right:5px solid transparent; /* right arrow slant */
      border-bottom:5px solid #2f2f2f; /* bottom, add background color here */
      font-size:0px;  
       line-height:0px;
    }
     /* create an arrow that points down */
    div.arrow-down {
      width:0px;  
      height:0px;  
      border-left:5px solid transparent;  
      border-right:5px solid transparent;  
      border-top:5px solid #2f2f2f;  
      font-size:0px;  
      line-height:0px;
     }
     /* create an arrow that points left */
     div.arrow-left {
       width:0px;  
       height:0px;  
       border-bottom:5px solid transparent;  /* left arrow slant */
       border-top:5px solid transparent; /* right arrow slant */
       border-right:5px solid #2f2f2f; /* bottom, add background color here */
       font-size:0px;  
       line-height:0px;
     }
     /* create an arrow that points right */
     div.arrow-right {
       width:0px;  
       height:0px;  
       border-bottom:5px solid transparent;  /* left arrow slant */
       border-top:5px solid transparent; /* right arrow slant */
       border-left:5px solid #2f2f2f; /* bottom, add background color here */
       font-size:0px;  
       line-height:0px;
     }

17. CSS3 calc() 的使用

calc() 用法类似于函数,能够给元素设置动态的值:



    /* basic calc */
    .simpleBlock {
      width: calc(100% - 100px);
    }
     /* calc in calc */
    .complexBlock {
      width: calc(100% - 50% / 3);  
      padding: 5px calc(3% - 2px);  
      margin-left: calc(10% + 10px);
    }


18. 文本渐变

文本渐变效果很流行,使用 CSS3 能够很简单就实现:



    h2[data-text] {
      position: relative;
    }
    h2[data-text]::after {
      content: attr(data-text);
      z-index: 10;
      color: #e3e3e3;
      position: absolute;
      top: 0;
      left: 0;
        -webkit-mask-image: 
           -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,0)), 
           color-stop(50%, rgba(0,0,0,1)), to(rgba(0,0,0,0)));
    }

19. 禁用鼠标事件

CSS3 新增的 pointer-events 让你能够禁用元素的鼠标事件,例如,一个连接如果设置了下面的样式就无法点击了。



    .disabled { pointer-events: none; }

20. 模糊文本

简单但很漂亮的文本模糊效果,简单又好看!



    .blur {
       color: transparent;   
       text-shadow: 0 0 5px rgba(0,0,0,0.5);
    }

工作是高端大气上档次,工资是低调奢华接地气!

我们叫做“程序猿”,也叫“攻城狮”!

但是往往城还没攻下来,我们的头发就先掉下来!

我们最喜欢听的一句话就是

同志,快醒醒,客户说不用改需求了

段子一

“等我敲完这行代码,就和你离婚!”
他头也不抬的说
听完之后,她心里暖暖的
她想,这可能是最长情的承诺
(因为深知永远敲不完代码)
–2017年度十大感动故事奖

段子二

“等我敲完这行代码,就陪你去吃饭”
听完之后,她的心拔凉拔凉的
她想,这可能是最婉转的分手了
(因为深知永远敲不完代码)
–2017年度十大感动故事提名奖

段子三

人生难得一知己,别人都不懂搞程序的我在想什么~终于有一天,我在山顶上与我的蓝颜知己相遇了。他光着头,穿着僧衣,莫名的,我两心心相惜。
我对他说:我放不下一些事,放不下一些人。
他说:这个世界上没有什么是放不下的。
我说:可我偏偏放不下。
他说:依我看,无非是你存储空间不足,要学会内部虚拟化,自然放得下。
我惊呼了,急忙问道:大师,你怎么这么懂。
他叹了一口气说:当初我就是不懂得内部虚拟化,费脑过多,头发掉光光,最后才来当和尚~

段子四

一位搞程序的刚结婚不久,跟老板出去见客户,边喝酒边要说一些是人都听不懂的abcd代码,醉倒后不省人事。被抬回家后,老婆试着用各种方法给他醒酒,都无济于事,于是打电话询问他的同事。
同事说,我在现在做的系统发一个bug通知,突然老公手机短信微信邮箱钉钉同时震了,只见男人噌的一下从床上蹦起来,精神抖擞,大喊:“又TM的哪里有BUG”老公好惨!老公好辛苦!老公加油!
——致敬这一群拥有无与伦比的耐力、超越时代的智商、和横穿社会的苦逼
等我敲完这行代码,就和你离婚!

段子五

男盆友是传说中的攻城狮,bug对他来说就是☞因为要修改,接着就是加班,然后就是没有夜生活~夜生活~夜生活~
等我敲完这行代码,就和你离婚!

段子六

程序猿的世界你不懂~男朋友出差到上海做系统演讲,他说这是他长的这么大第一次走出广东省,屁溜溜地乘着火车滚了~途经长江,就想看到长江的宏伟壮大~而在程序猿的眼中,长江是这样滴~
等我敲完这行代码,就和你离婚!

段子七

最烦男友说一句话就是:电脑在手,代码我有!
坐车就好好坐车,还发了图片证明自己坐车也不忘工作
一分钟不敲代码是不是就手痒,手痒我可以抽你
(我不就是想让你多休息休息)
等我敲完这行代码,就和你离婚!

段子八

在IT这个行业里,程序猿都被称为“互联网精英”,其实他们是拿着“白菜”工资的“短命鬼”,正常上班时,他们在公司加班;正常休假时,他们在家加班,吃饭更没规律,只因他们要时时刻刻盯着,防着bug的骚扰。
连亲人和他见个面都要杀到机房才能见到他,不知道的人、不了解的人还以为你早出晚归,甚至夜不归宿是因为外面有“小五”。
等我敲完这行代码,就和你离婚!
做这行业的没有一个会脑呆,因为每天大脑都在高速运转,看不懂英语没关系,我看懂代码就知道上面那句翻译是什么,神思维~

段子九

记者问一个大爷:大爷,您保持亮丽的秘诀是什么?
大爷说:白天敲代码,晚上撸系统,姿势不要动,眼动手动就可以。
记者:啊?大爷您是做什么工作的?
大爷:敲代码的呀。
记者:那大爷您是本身就很喜欢光头的吗?
大爷:掉光的~

段子十

如果你身边有搞程序的朋友,请多给他一点帮助。一天差不多有十几个小时坐在电脑前,保持一个姿势动也不动。有时间多带他出去见见溜溜,约他吃饭,喝酒吃肉各种消费时你来买单吧,不要跟他提钱了。
工作压力已经很大,请理解她、包容他、打牌也故意输给他。临走再塞个万儿八千的红包也行,让他感受到人间的温暖吧!请紧密陪伴他,生活是相互扶持的!不说了,前边有人扔鸡蛋!!!我要正面迎敌~

看完以上的段子,你是不是感同身受,哭笑不得呢,虽然有一丢丢夸张搞笑的成分在,但是IT行业是真心不容易!每一个搞程序的人都是可亲可敬的超级英雄!