书写css代码的建议

1. 谨慎使用外边距属性

与其它的属性不同,垂直方向上的外边距相遇时将会发生折叠。这意味着如果一个元素的下边距遇到了另一个元素的上边距,那么二者中较大的一个将被留下。下面是一个简单的例子。

 <div class="square red"></div>
 <div class="square blue"></div> 

 .square { 
     width: 80px; 
     height: 80px;
 } 
 .red { 
     background-color: #F44336; 
     margin-bottom: 40px; 
 } 
 .blue { 
     background-color: #2196F3; 
     margin-top: 30px;
 }

其实上述两个元素在垂直方向上的距离并不是 70px, 而是 40px, 蓝色正方形的margin没有被计算在内。 有很多的方法消除这种默认的行为,但最好的方法是只使用一个方向上的margin属性,比如说margin-bottom

2. 利用盒子模型布局

盒子模型自然有其存在的理由。floatinline-block当然也可以工作,但它们都是样式化文档的基础工具,而不是整个网站。从某种意义来说,Flexbox是为更容易更精确创建我们想要的布局而设计的。

Flexbox模型提供的一系列属性给了开发者更大的灵活性,而且你一旦熟悉了它们,那创建任何响应式布局都是轻而易举的事。浏览器对Flexbox的支持也已经接近完美,所以已经没有什么理由能够阻止你使用Flexbox了。

 .container { 
     display: flex; 
 /* Don't forget to add prefixes for Safari */ 
     display: -webkit-flex; 
 }

3. 执行 CSS 重置

尽管这些年来情形已经有所好转,但是各浏览器的默认行为还是存在很多分歧。解决这个问题最好的办法就是使用一个CSS重置文件为所有元素重新设置默认样式。这可以让你在一个纯净的样式环境下工作,并且在所有浏览器中产生相同的结果。

有很多的库做这个工作做的非常不错,比如 normalize.css, minireset, 和 ress, 纠正了浏览器间的不一致。如果你不想使用库,你也可以自己制作一个简单的CSS
重置,像下面这样。
* { margin: 0; padding: 0; box-sizing: border-box; }

这可能看上去比较苛刻,但是消除了默认的marginpadding
我们将更容易的摆放我们的元素,而不用担心它会占用额外的空间。box-sizing: border-box是一个很受用的属性,我们将在下面介绍这个属性。

4.为所有元素使用 Border-box

许多初学者不知道box-sizing属性,但它的确很重要。了解它的最好办法就是看看它的两个可选值。

content-box(default) - 当我们为元素设置了宽度和高度,但那只是内容的尺寸。所有的paddingborder都在不包含在内容当中,也就是在内容的外部。举例来说,如果我们有一个div它的宽度为 100px,padding为 10px, 那么它的实际宽度为 120px。

border-box-paddingborder被包含在 宽度和高度当中。 如果一个div的宽度为100px,而被设置了box-sizing: border-box, 那么它的宽度将始终是100px, 无论你添加多少paddingborder

为所有元素设置border-box将有利于样式化,而且你在也不用做乏味的数学运算了。

5.图像作为背景

当你为自己的站点添加图片时,尤其是你想做响应式设计的时候,利用一个div标签并为其设置background属性,而不是使用<img>元素。

似乎额外的工作并没有起到任何作用,但实际上这更利于你对图片设置样式,保持它们原有的尺寸或者根据比例变化,这需要借助background-sizebackground-size还有一些其它的属性。

 <section> 
     <p>Img element</p> 
     <img src="" alt="bicycle"> 
 </section> 
 <section> 
 <p>Div with background image</p> 
     <div></div> 
 </section> 
 img { 
     width: 300px; 
     height: 200px; 
 } 
 div {
     width: 300px; 
     height: 200px; 
     background: url(''); 
     background-position: center center; 
     background-size: cover; 
 } 
 section{ 
     float: left; 
     margin: 15px; 
 }

这种技术的一个缺点是你页面的可访问性可能略有打击,因为你的图片不会被屏幕阅读器和引擎正确抓取。 这个问题可以被 object-fit 解决,但它还不被所有浏览器支持。

6.更好的注释方式

CSS可能不是一门编程语言但它的代码仍然需要被记录,所以一些简单的注释将会对你的同事或者未来的自己很有帮助!
对于CSS中的一些比较大的模块,比如主要模块或者媒体查询,使用风格化的注释并且在其后留下一些空行。

/*--------------- 
      #Header
 ---------------*/ 
header { } 
header nav { } 
/*--------------- 
    #Slideshow 
---------------*/ 
.slideshow { }

设计中的一些细节或那些不是特别重要的模块,可以用单行注释。

/* Footer Buttons */ 
.footer button { } 

.footer button:hover { }

另外,值得注意的是,CSS中没有//注释,所以当你需要注释的时候你需要使用/* */符号。

/* Do */ 
p { 
    padding: 15px; 
    /*border: 1px solid #222;*/ 
} 
/* Don't */ 
p { 
    padding: 15px; 
    // border: 1px solid #222;  
}

7.命名连接

class或者id不止一个单词的时候,需要使用-符号连接,CSS对大小写不敏感,所以骆驼命名法不是一个好的选择。很久以前,下划线不被支持所以破折号成为了默认约定。

/* Do */ 
.footer-column-left { } 
/* Don't */ 
.footerColumnLeft { } 
.footer_column_left { }

8.CSS 动画与变换

不要通过直接更改元素的宽度和高度去动画元素,或者是更改left/right/top/bottom。最好的办法是使用transform()属性因为它提供了更加圆滑的过渡效果而且可以让你的意图在阅读代码时更加易于理解。下面是一个例子,我们想动画一个ball,让它往右滑动。 不要去改变left的值,最好是使用translateX()

.ball { 
    left: 50px;
    transition: 0.4s ease-out; 
} 
/* Not Cool*/
.ball.slide-out { 
    left: 500px;
 } 
/* Cool*/ 
.ball.slide-out {
   transform: translateX(450px);
 }

transform以及它的所有方法(translate, rotate, scale等)拥有几乎一致的浏览器兼容性,你可以自由使用它们。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,721评论 1 92
  • `在这篇文章中,我想跟你分享 20 条由CSS社区推荐的约定和最佳实践。 有些建议可能比较适合新手,而有些则更高级...
    景岳阅读 214评论 0 3
  • 在这篇文章中,我想跟你分享 20 条由 CSS 社区推荐的约定和最佳实践。 有些建议可能比较适合新手,而有些则更高...
    ghwaphon阅读 4,104评论 26 72
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,723评论 0 2
  • (1)Hive的基本介绍 **** (2)Hive与传统数据库的区别 Hive不支持数据的更新,,也不支持事务和索...
    是蓝先生阅读 1,225评论 0 2