热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CodePen'sCSS

译者说:近来一些国外的大牛分享自己网站的CSS,从中我们了解css相关技术的应用情况,把握CSS的使用规范,今天翻译下ChrisCoyier分享的CodePen's,希望可以给大家一些帮助。
前端开发whqet,csdn,王海庆,whqet,前端开发专家

翻译自:CodePen's CSS

翻译人员:前端开发whqet,意译为主,不当之处欢迎大家指正。

译者说:近来一些国外的大牛分享自己网站的CSS,从中我们了解css相关技术的应用情况,把握CSS的使用规范,今天翻译下Chris Coyier 分享的CodePen's,希望可以给大家一些帮助。

------------------------------------------------------------

从Mark Otto的GitHub's CSS和Ian Feather的Lonely Planet's CSS哪里获得灵感,我迫不及待地加入到这个活动中来谈谈我们在CodePen网站里是怎么怎么做的。

概览

1.我们使用SCSS(CSS预处理器)

2.我们使用Autoprefixer(浏览器前缀兼容性工具)

3.我们使用the Rails Asset Pipeline(JS、CSS压缩工具

4.专门弄个SCSS文件来显示文档目录

5.我们也有样式,不过主要是为了好看

6.我们不适用任何特殊的架构,除了“use classes a bunch ”之外

7.努力保证每个页面使用2-3个css

8.使用@mixin来做媒体查询,以便于我们可以随时关闭该功能

9.使用注释是个好主意

10.一些统计

11.我是用了“我们”这个词,但其实大部分时候只是“我”而已

12.我们可能的未来


预处理器

总是有人喜欢或者讨厌CSS预处理器,但是如果没有预处理器,想在任何网站使用和维护变量将会变成天方夜谭。如果你觉得因为过度工具化将会丧失创造性,我只能一笑了之。

坦率的讲,所有主流预处理器(SASS、LESS、Stylus)都能够实现我的大部分需求,但是我更喜欢SCSS,因为良好的交流社区。下面列出SCSS的重要特征(依据重要程度排列):

a.@import

b.@mixin

c.nesting

d.variables

e.@extend

f.math

g.loops

h.working with them enough so I understand all the cool kid demos

它又增添了一些难以置信的功能(我都想象不到)。

前缀处理

我几乎不不考虑css属性和值的浏览器前缀问题,因为Autoprefixer可以很好的解决这个问题,我尤其喜欢它在处理flexbox时的表现。

我以前经常使用Compass,但是我发现我用到的95%都来自CSS3 @minxins,相对于仅仅为了前缀到处使用@include,我更喜欢使用和原生的CSS一样的写法。

我现在怀念Compass的一点是它的生成SVG渐变的能力,但是……,仅仅为了IE9需要的一些东西它太大一点了,所以我想我损失的不多。

Rails

我是Rails Asset Pipeline的疯狂粉丝。例如我把这些放到视图中

    <%= stylesheet_link_tag "about/about" %>

它会在我需要的时候生成一个css。

我们设置一个很长的过期时间。每次我们部署的时候,它都通过改变这些乱码数字打破缓存,因此,非常好的缓存配置。

在CodePen网站我们确实使用Sprockets,但是仅仅针对Javascript,类似于这样工作:

    //= require common/whatever.js
    //= require_tree ./../hearting/

本来也可以在CSS中这样做,但是没必要:

a.SASS可以做到这些

b.如果使用SASS解决问题,依赖关系更好。例如$variables和@mixin都可以跨文件使用。

文件组织

有个专门的SCSS文件仅仅用来展示需要加载的CSS文件,相当于一个目录,而不做任何实际的事情。例如网站的global.scss就是这样的:

// General Dependencies
    @import "global/colors";
    @import "global/bits";

// Base
    @import "global/reset";
    @import "global/layout";

// Areas
    @import "global/header";
    @import "global/footer";

// Patterns
    @import "global/typography";
    @import "global/forms";
    @import "global/toolbox";
    @import "global/buttons";    
    @import "global/modals";
    @import "global/messages";
    @import "global/badges";

// Third-Party Components
    // (none at the moment)

我努力遵守这些,但是也存在着大量的意外的情况,我不得不把应该导入的这些东西都扔到一个文件中去,所以我创建了一个shame文件(不大光彩的文件)来实现这个目的。

@import "shame";  // get organized, ya schlub.

代码组织

像强迫症一样执行的规范

a.对属性和嵌套应用2个空白的缩进

b.选择器前后各加一个空白

c.每行一个声明(对于区分来说非常重要)

d.:之后加一个空白

e.给结束符}一个相当于其选择器的缩进级别

f.0作为长度时,不加单位

g.使用连字符,不用下划线

大部分情况下我都会遵守的规范

非常相关的声明块之间不加空行

.thing {

}
.related-thing {

}

稍微有点相关的声明块之间加一个空行

.thing {

}

.another-thing {

}

非常不相关的声明块之间加两个空行

.thing {

}


.totally-different-thing {

}

一些我不太在意的规范

属性的顺序,相关的属性以经典组合出现,还是随便。

注释使用的样式。

在实际使用中,我甚至不遵循自己写的规范

架构

我的理论是,尽量给所有元素添加一个类,我不知道这点不是不是接近于SMACSS,OOCSS,BEM,或者诸如此类。

当然,不是说我不再进行任何嵌套,或者强制规定可以嵌套几层,我只是不进行深度嵌套。

一般来说,我经常这样做:

.box { 
  h2 {
    &:after {
    }
  }
}

这个时候我会想,我是否应该给h2一个类,我是否应该把这种类型的标题做成一个可重用组件。然后我就不在意了,因为以后如果它变得非常常用,我可以很容易的修改。

总体哲学是保持较低的特殊性。因为无论多棒的可重用性,它总是可能多次覆盖,因此选择器的特殊性越低,越容易覆盖。而且这种覆盖我们可以比较容易的再次覆盖,不用走ID选择器或者!important这种极端。

rem作文字的单位,px作其他单位,当然也有意外。

请求

我努力保证每个页面加载2-3个css请求

  • global.css
  • page.css (if not the editor)
  • section.css (if needed)

尽量减少页面的请求数量,但是不至于说把所有的东西都放到一个文件中去。CodePen有太多的单独页面CSS,如果都放到一块去global.css将不堪重负,我没有试过,也许那一天试试也很有意思,起个名字叫做squiCSSh_it_real_good.

媒体查询

我使用@minxin实现媒体查询,有时我采用“this width and bigger”,有时采用“this width and smaller”(可以看看媒体查询逻辑)。类似于这样:

@mixin breakpoint($point) {
  @if ($MQs == true) {
    @if $point == baby-bear {
      @media (max-width: 500px) { @content; }
    }
    @if $point == mama-bear {
      @media (max-width: 700px) { @content; }
    }
    @if $point == papa-bear {
      @media (max-width: 800px) { @content; }
    }
    @if $point == super-bear {
      @media (max-width: 1280px) { @content; }
    }

    @if $point == reverso-baby-bear {
      @media (min-width: 501px) { @content; }
    }
    @if $point == reverso-mama-bear {
      @media (min-width: 701px) { @content; }
    }
    @if $point == reverso-papa-bear {
      @media (min-width: 801px) { @content; }
    }
    @if $point == reverso-super-bear {
      @media (min-width: 1281px) { @content; }
    }

    @if $point == exclusive-baby-bear {
      @media (max-width: 500px) { @content; }
    }
    @if $point == exclusive-mama-bear {
      @media (min-width: 501px) and (max-width: 800px) { @content; }
    }
    @if $point == exclusive-papa-bear {
      @media (min-width: 801px) and (max-width: 1280px) { @content; }
    }

    @if $point == iOS {
      @media (min-device-width: 768px) and (max-device-width: 1024px), (max-device-width: 480px) { 
        @content; 
      }
    }
  }
}

注意mixin头部的语句“@if ($MQs == true) ”实现媒体查询功能的开启与关闭功能,在内容目录的scss文件头部声明一个变量$MQs(true或者false)控制开关。因为CodePen里的一些页面需要响应式布局而另一些页面不用,没有采用响应式布局的页面可能跳转到一个专门的移动端版本中去。

注释

我是一个注释自由主义者,主要是因为我从不后悔,如果之后该注释不够明朗、不太贴切,我会直接删掉该注释。

.drag-from-pen-grid {
  padding-bottom: 52px; /* adding this to make room for pagination. A little magic-numbery... */
}

一些统计

一共有160个单独的SCSS文件,我从来不担心找不到文件,因为Sublime提供了强大的查询功能,而且文件具有命名清晰、结构明了。

SCSS文件共13345行

global.css文件11.8k

page.css文件5.5k

editor.css文件6.2k

css文件不是影响性能的关键因素,自定义字体四倍与它,JS文件10倍与它。

仅仅是我

网站由三个人合作开发,CSS方面主要是我负责。

未来

我现在没有lint,我将会lint Javascript,那会很好

我没有创建本地资源地图,只是因为我觉得现在Sass/chrome不能很好的支持

我没有一个真正的模式类库。创建一个可视化的模式类库也许会很棒。


Enjoy it.

----------------------------------------------------------

前端开发whqet,关注web前端开发,分享相关资源,欢迎点赞,欢迎拍砖。
---------------------------------------------------------------------------------------------------------



推荐阅读
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 如何压缩网站页面以减少页面加载时间
    本文介绍了影响网站打开时间的两个因素,即网页加载速度和网站页面大小。重点讲解了如何通过压缩网站页面来减少页面加载时间。具体包括图片压缩、Javascript压缩、CSS压缩和HTML压缩等方法,并推荐了相应的压缩工具。此外,还提到了一款Google Chrome插件——网页加载速度分析工具Speed Tracer。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • ch3中可视化软件pangolin的安装步骤及注意事项
    本文介绍了在ch3中安装可视化软件pangolin的步骤及注意事项。首先提供了pangolin的下载地址,并说明了下载后需要放到与虚拟机交互的文件夹地址。然后详细介绍了安装pangolin所需的依赖项,并提供了在终端进行安装的命令。最后给出了解压pangolin的步骤。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 我有使用googledrivepdf的共享链接,我必须使用angular7下载pdf文件。我已经完成了自欺 ... [详细]
author-avatar
淡忘那曾经的你_953
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有