面向对象的CSS应用

所属分类: 网页制作 / CSS 阅读数: 1344
收藏 0 赞 0 分享

什么是面向对象的 CSS

框架?工具?哲学?

Object-oriented CSS is a coding paradigm that styles "objects" or "modules"—nestable
chunks of HTML that define a section of a webpage—with robust, reusable styles.

很像语言的进化

令 CSS 更强大

有什么不同?

ul{...}
ul li{...}
ul li a(②但是,结构在这里){①直至现在,我们只关心这里}

CSS 大约 2005

意大利面条

CSS 大约 2008

稍微好一点

而不是使我们的代码变好

我们筑了大栅栏

性能呢?

公认的毒药中心

网站变慢

文件大小和 HTTP 请求未作优化

CSS 大约 2009

面向对象的CSS

性能的最佳实践、可扩展性、和最重要的-容易使用

  1. 创建对象而不是页面或模块
  2. 在内容对象上设置好的公用默认值
  3. 抽象重用元素
  4. 分离结构和皮肤(为两个 class)
  5. 分离容器和内容(开放的编辑区)
  6. 使用继承
  7. 对看起来 OO 的应用多个 class

9条最佳实践

  1. 组件库:可重用和冗余
  2. 一致性:避免位置依赖(location-dependent)的样式
  3. 抽象化
  4. 优化图像和 sprites
  5. 灵活
  6. 学会爱栅格
  7. 避免非标准的浏览器字体
  8. 避免高度对齐(alignment)
  9. 谨慎卖弄你的技术(choose your bling carefully)

9个陷阱

  1. 位置依赖的样式
  2. 避免指定一个 class 的标签
  3. 避免用 ID 定义主内容区域内的样式
  4. 避免不规则背景上阴影和圆角
  5. 不要拼合所有图片(触发只有少数几个页面)
  6. 避免高度对齐
  7. 文字就是文字,不要做成图片
  8. 冗余
  9. 避免过早优化

创建组件库

可重用的“乐高积木”

重用元素使得它们

性能“免费”

组件就像乐高积木

组合并匹配来创建不同的和有趣的页面

从组件库创建 HTML

新的页面一般不需要额外的 CSS

标题

根据你需要的语义来完成你想要的表现

列表

必须对页面中的所有模块可用

SIDE-WIDE LOGES

  • 标题
  • 列表(比如 action list, external link list, product list, 或 feature list)
  • 模块 headers 和 footers
  • 栅格
  • 按钮
  • 圆角 boxes
  • Tabs, Carousel, toggle blocks

避免重复

在不能增加价值的元件上浪费性能资源

近似相同的模块

h3 和 h5 太相似了

经验法则:

如果一个页面中的两个模块看起来太相似,它们在一个站点中太相似,选择一个!

例子

Yahoo! 个人财经

2+不同的 tab 风格。能用相同的图像吗?

3个元件的轮廓太相似了。选择一个。

模块宽度、背景色或背景图片的改变是个很好的模块复用的例子。

避免位置依赖(location-dependent)的样式

沙盒比意大利面条好,不过引起了性能问题

避免什么?

运行区域

不时…

返回直径

破坏

在 CSS 中我们一直这么做

破坏

不好的:

#weatherModule h3{color:red;}
#tabs h3{color:blue;}
  • h3 的全局颜色未定义,将导致
    • 在新模块中没有定义样式
    • 开发者被迫为相同的样式写更多 CSS

推荐:

h3{color:black;}
#weatherModule h3{color:red;}
#tabs h3{color:blue;}
  • 定义了全局颜色(更好!)
  • Weather 和 tabs 覆盖了缺省的 h3
    • h3 的3种样式在同一模块中不能并存
    • 缺省样式不能用在 weather 和 tabs 除非有更高的优先级
  • Weather 和 tabs 的 h3 永远不能在其他模块中使用

一致性

写更多规则去重写之前的疯狂规则。

比如标题在任意模块的表现是可预见的。

用这个来代替

h1, .h1{...}
h2, .h2{...}
h3, .h3{...}
h4, .h4{...}
h5, .h5{...}
h6, .h6{...}
  • 定义全局值
  • 遵循语义(同时允许灵活的视觉)

需要超过6个标题?

真的吗?没有重复?没有相似的?

仍然需要更多标题?

.category{...}
.section{...}
.product{...}
.prediction{...}
  • 通过对象本身的 class 扩展标题对象
  • 避免使用继承来改变嵌套对象的表现

抽象

复用代码段

重复编码

是抽象不同水准的语义失败所导致的

分离:

  • 容器和内容
  • 结构和皮肤
  • 轮廓和背景
  • 对象和混合物

分离容器和内容

定义每个对象的界限

开放的编辑区

图像或 flash

混合与匹配

容器和内容对象达到高性能设计

分离轮廓和背景

内部透明!

MAKING IT LOOK FAB

需要小心选择像素

考虑 PNG8 来渐进增强

陷阱

可变的或渐变背景

提防圆角后的可变或渐变背景

分离结构和皮肤

两个单独的 class

示例:模块

结构

Sloves borwser bugs, positions presentational elems, and generally does the heavy
lifting of CSS

皮肤

弄漂亮些。

目标是非常明确的皮肤,复杂的被结构对象和跨网站共享所吸收(The goal is very predictable skins, complexity is
absorbed by the structure object and shared across the site)。

/* ----- simple (extends mod) ----- */
.simple .inner{
  border:1px solid gray;
  -moz-border-radius:7px;
  -webkit-border-radius:7px;
  border-radius:7px;
}
.simple b{
  *background-image:url(skin/mod/corners.png);
}

什么属于皮肤?

皮肤的每个值应该是确定的,容易预测并测量。

  • 颜色
  • 边框
  • 图像

灵活性

可延长的高度和宽度

固定尺寸

Limit the ways in which a module can be resued

学着爱上栅格

坚信其会很美

传授 OO CSS

给设计师和工程师

自然改进

从简单到复杂的任务

一个真实案例

Gonzalo Cordero Yahoo! 前端开发工程师

需要考虑的设计因素

  • 跨浏览器兼容
  • 多语言支持
  • 可访问性
  • 按时完成全部布局和功能

困惑

WEB 妥协

  • 为什么“简单的东东”变复杂?
  • 为什么要妥协?
  • 为什么我们不能依固定的规则和结构?像讲台上那样?

OOCSS SAVES THE DAY

  • 单个简单的标签结构
  • 跨浏览器支持(甚至 IE 5.5!)
  • 非常少的 CSS
  • 可剥离的,容易应用在多个设计上

译注

这不仅仅是 OOCSS!

本文内容来源于:

更多精彩内容其他人还在看

CSS配合JavaScript做酷的动态页面效果

  利用CSS配合JavaScript的可以做很多更酷的动态页面效果,在本教程的最后给大家简单介绍一下CSS配合JS的应用。首先,要搞清楚事件和动作的概念。在客户端脚本中,JavaScript 通过对事件进行响应来获得与用户的交互。例如,当用户单击一个按钮或者在某段文字上移动鼠标
收藏 0 赞 0 分享

WEB标准,Web前端开发工程师必备技术列表

  想要打造并拥有一流的Web产品开发团队,在团队成员基础能力上一定要下功夫。对于Web前端产品开发来说,仅仅掌握Web1.0时代简单的"网页套接"是完全不够的。我结合自己的团队配备,特此罗列了Web前端产品工程师所涉及的技能列表如下:   通过许多实际项目,
收藏 0 赞 0 分享

用CSS制作Alpha滤镜测试板

alpha滤镜给制作网页特效提供了较大的创作空间,但由于它控制参数较多,在实际应用时,为了确定一组合适的参数值,不得不反复调整修改,在编辑窗口和预览窗口来回倒腾,甚是麻烦,本文介绍了一种简单的方法。制作一个“Alpha滤镜参数测试板”,在测试板上输入参数
收藏 0 赞 0 分享

非常流行的所谓的气泡窗口

普通的Alt无法自定义风格,而Sweet Titles通过JS脚本与CSS的集合.自定义了这种伪Alt风格. 前一段时间非常流行的,就所谓的气泡窗口(鼠标移到链接处出现的). 我们这里实现的用的是Sweet Titles的插件.显示效果完全由CSS控制.. 先下载Sweet Ti
收藏 0 赞 0 分享

CSS教程:li和ul标签用法举例

LI代码的格式化: A).运用CSS格式化列表符: ul li{ list-style-type:none; } B).如果你想将列表符换成图像,则: ul li{ list-style-type:none; list-style-image: url(/blog/images/
收藏 0 赞 0 分享

CSS教程:CSS中的定位(position)

  使用CSS来定位页面内层的位置,一直是比较难以掌握的事情,很多时候,往往被绝对定位的元素,总是以浏览器的左上角为坐标原点,此时,如果浏览器的大小改变,被定义的层就会偏离设计想要的位置,让人很挠头。   其实,要想控制好层的绝对定位,只要理解CSS中关于定位
收藏 0 赞 0 分享

CSS教程:盒模型(BOX Model)

  如果想熟练掌握DIV和CSS的布局方法,首先要对盒模型有足够的了解。每个HTML元素都可以看作一个装了东西的盒子,盒子里面的内容到盒子的边框之间的距离即填充(padding),盒子本身有边框(border),而盒子边框外和其他盒子之间,还有边界(margin),如图1所示。
收藏 0 赞 0 分享

无延迟翻滚的图形与CSS混合风格按钮

  在一个具有图形背景的按钮中添加CSS风格的文本,这种建立按钮的方法结合了具有CSS翻滚(CSS rollover)标记的开发速度和效率,从而有效地提高按钮外表图像的三维效果。   相比于常规的图形按钮,这些图形/CSS混合按钮可易于建立和载入,因为你只需要为空白按钮外面
收藏 0 赞 0 分享

css里expression实现界面对象的批量控制

用过css样式我们就知道, 可以定义一批对象的class属性来指定同一个样式来统一界面. 但如何统一同类型的对象的事件? 比如:界面有无数个 <img src="**.jpg"> 如何实现鼠标经过此图片, 图片的src变成是**_over.jpg?
收藏 0 赞 0 分享

CSS教程:水平对齐(text-align)

  水平对齐(text-align),用以设定元素内文本的水平对齐方式。   1.语法   text-align具体参数如下: 语法:text-align:left|right|center|justify 说明:设定元素内文本的水平对齐方式。 参数:left:左
收藏 0 赞 0 分享
查看更多