CodePen's CSS
翻译自: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。
<link href="http://assets.codepen.io/assets/about/about-a05e4bd3a5ca76c3fb17f2353fedbd99.css" media="screen" rel="stylesheet" type="text/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一个类。我是否应该把这样的类型的标题做成一个可重用组件。
然后我就不在意了。由于以后假设它变得非常常常使用。我能够非常easy的改动。
整体哲学是保持较低的特殊性。
由于不管多棒的可重用性。它总是可能多次覆盖,因此选择器的特殊性越低,越easy覆盖。并且这样的覆盖我们能够比較easy的再次覆盖。不用走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前端开发,分享相关资源,欢迎点赞。欢迎拍砖。
---------------------------------------------------------------------------------------------------------
CodePen's CSS的更多相关文章
- 39.纯 CSS 创作一个表达怀念童年心情的条纹彩虹心特效
原文地址:https://segmentfault.com/a/1190000015126240 HTML code: <div class="heart"> < ...
- 15个来自 CodePen 的酷炫 CSS 动画效果【下篇】
CodePen 是一个在线的前端代码编辑和展示网站,能够编写代码并即时预览效果.你在上面可以在线分享自己的 Web 作品,也可以欣赏到世界各地的优秀开发者在网页中实现的各种令人惊奇的效果. 今天这篇文 ...
- 赞!15个来自 CodePen 的酷炫 CSS 动画效果
CodePen 是一个在线的前端代码编辑和展示网站,能够编写代码并即时预览效果.你在上面可以在线分享自己的 Web 作品,也可以欣赏到世界各地的优秀开发者在网页中实现的各种令人惊奇的效果. 今天这篇文 ...
- 用 CSS 实现三角形与平行四边形
最近在逛某个技术网站的时候,感觉文章关键词上的样式好酷炫啊.于是我将那种写法照搬到了我的博客中,也许最近逛过我博客的小伙伴已经发现了它出现在哪儿了——分页的样式.来张截图: 你在首页的底部也可以看到这 ...
- N 种仅仅使用 HTML/CSS 实现各类进度条的方式
本文将介绍如何使用 HTML/CSS 创建各种基础进度条及花式进度条及其动画的方式,通过本文,你可能可以学会: 通过 HTML 标签 <meter> 创建进度条 通过 HTML 标签 &l ...
- 离谱的 CSS!从表盘刻度到艺术剪纸
某日,群里有这样一个问题,如何实现这样的表盘刻度: 这其实是个挺有意思的问题,方法也有很多. 单标签,使用 conic-gradient 实现表盘刻度 最简单便捷的方式,就是利用角向渐变的方式 con ...
- 纯 CSS 实现波浪效果!
一直以来,使用纯 CSS 实现波浪效果都是十分困难的. 因为实现波浪的曲线需要借助贝塞尔曲线. 而使用纯 CSS 的方式,实现贝塞尔曲线,额,暂时是没有很好的方法. 当然,借助其他力量(SVG.CAN ...
- 【翻译】基于web创建逼真的3D图形 | CSS技巧
个人翻译小站:http://www.zcfy.cc/article/creating-photorealistic-3d-graphics-on-the-web-css-tricks-4039.htm ...
- 过渡与动画 - steps调速函数&CSS值与单位之ch
写在前面 上一篇中我们熟悉五种内置的缓动曲线和(三次)贝塞尔曲线,并且基于此完成了缓动效果. 但是如果我们想要实现逐帧动画,基于贝塞尔曲线的调速函数就显得有些无能为力了,因为我们并不需要帧与帧之间的过 ...
随机推荐
- Ruby新手教程和技巧
Ruby真的比Java更好? Ruby On Rails 创始人:对Java 说再见 这两周以来环绕Java发生的两件大事:EclipseCon 和TheServerSide Java Sympo ...
- 如何用浏览器调试js代码
按F12打开调试工具
- ueditor富文本编辑的使用方法
平时在编写上传文件,图片,视频等等这些功能的代码会很繁琐,这里我介绍一款由百度推出的CuteEditor,是一款功能非常强大,支持图片上传.文件下载和word类似的文字编辑器.对于新闻发布系统和博客之 ...
- asp.net mvc输出自定义404等错误页面,非302跳转
朋友问到一个问题,如何输出自定义错误页面,不使用302跳转.当前页面地址不能改变. 还要执行一些代码等,生成一些错误信息,方便用户提交反馈. 500错误,mvc框架已经有现成解决方法: filte ...
- PHP学习笔记二十七【重写】
<?php // class Animal{ public $name; protected $price; function cry(){ echo "动物在叫....<br/ ...
- 触控(Touch)
1 使用触控实现一个简易的画板 1.1 问题 触控(Touch)是一个UITouch类型的对象,当用户触摸了屏幕上的视图时自动被创建,通常使用触控实现绘图.涂鸦.手写等功能.本案例使用触控实现一个简易 ...
- IOS 实现QQ好友分组展开关闭功能
贴出核心代码 主要讲一下思路. - (void)nameBtnClick:(myButton *)sender { //获取当前点击的分组对应的section self.clickIndex = s ...
- IIS Hang Troubleshoot
Your website maybe stop working and response very lowly. How to find out the reason? Below are the g ...
- java学会需要掌握的知识(来源网上。。)
Java就业指导 2016-03-22 骆昊 程序人生 点击上方"程序人生"关注我们 想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些 ...
- PHP API反射实例
*反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用.其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言.php反射api由若干类组成,可帮助我们用来 ...