CSS3 Region:基于HTML和CSS3的富页面布局

标签: CSS Resource css3 region | 发表时间:2011-06-23 20:51 | 作者:神飞 John
出处:http://www.qianduan.net
译自:CSS3 regions: Rich page layout with HTML and CSS3
中文:CSS3 Region:基于HTML和CSS3的富页面布局
请尊重版权,转载请注明来源,多谢!

互联网已经成为一个提供参考、教材、新闻、文章和交互应用的大宝库了。然而,当为印刷设计内容时,一些功能显然仍然不可能或者很难使用Web标准来实现。

印刷出版物正在探索更好的方法来转换或者改变他们的内容以适应富数字格式。我们也看到这是一个让网页更富于表现和支持更复杂布局的好机会。

Adobe通过增强CSS进行了一些实验来展示一些传统杂志使用的复杂布局。我们也提交了一些建议到W3C CSS工作组,并构建了一个原型来通过webkit实现这些提案。你可以从Adobe Labs下载这些原型体验下。 然后你也可以在CSS Regions Module和这个W3C网站上的CSS Exclusions Module 页面找到W3C编写的草案。你也可以订阅W3C CSS 邮件列表来讨论这个问题。欢迎在邮件标题中加入”[css3-regions]“或者”[css3-exclusions]“来在这个邮件组中讨论这个问题。当然也可以通过Adobe Labs的CSS Regions 论坛反馈问题。

一些说明: 这是个在进行中的工作。随着我们和广大社区的讨论,我们将会做些改变。本文中用到的语法反映出当前W3C草案的现状,但是随着W3C工作组和社区的探讨可能会有些进化。同时也请注意,按照惯例,所有的新的数学将会首先采用-webkit-前缀。不过,为了简化,我在本文中省去了这个前缀。

现在,让我们了解这个扩展吧,他们可以被分为4类:

  • 线性内容(Threading content): 从一个区域“流向”另一个区域的内容。
  • 任意形状的容器(Arbitrarily shaped containers): 在非矩形区域内显示文本。
  • 任意形状环绕(Arbitrarily shaped exclusion): 文本环绕非矩形区域。
  • 区域样式(Region styling):根据流向区域显示内容。

下面是各种分类的例子:

内容流(Content flow)

在典型的HTML文档中,文字可以在多个区域显示,但是每个区域中的文字是不相关的(见图1)。如果你想要跨多个列显示文本,或者使用别的你需要的更复杂的区域来手动。在用户放大文字或者用户的字体比你设定的字体大时,这可能会无法乱掉。这个方法(css3 region)同样是的拥有在缩放窗口是自适应的流体布局成为可能,或者,当显示在平板上时,自适应竖屏(portrait)或者横屏(landscape)显示。

文字跨3个不同宽的列显示

文字跨3个不同宽的列显示

图1.文字跨3个不同宽的列显示

如果你想要单独地指定一托内容(比如文字和图片),那些内容如何在一串区域内显示(flow)呢?这正是内容流(content flow)要做的。

要使用它,通过flow属性赋予内容的容器一个名字,这样做会将内容从普通的CSS布局流中去掉,然后你可以插入这个线程到1个或多个其他区域——使用from()作为content属性的值。

上面的三列布局的代码如下:

CSS

1
2
3
4
5
6
7
#source {
	flow: "main-thread";
}
.region {
	content: from(main-thread);
	background: #C5DFF0;
}

HTML

1
2
3
4
5
6
7
 <div id="source">
	<p>Lorem ipsum dolor [...]</p>
</div>
 
<div id="region1" class="region"></div>
<div id="region2" class="region"></div>
<div id="region3" class="region"></div>

你可以在一个页面中联合多个命名的flow。你也可以使用content-order属性来控制文字流的顺序。如果没有指定,将会使用正常的文档顺序。

通过这个简单的构件,你可以实现更复杂的布局,包括多列文本、不同宽高的列,以及跨越多个列的区域。(见图2)

文字穿越堆叠的区域和列

图2. 文字穿越堆叠的区域和列

形状环绕(Wrap shape)

使用形状环绕,你可以控制文字经过区域的形状(见图3)。你也可以使用这个属性搭配内容流或者单独的创建更有趣的设计。

文字内容显示在自定义形状的内部

图3.文字内容显示在自定义形状的内部

要使用这个特性,你需要使用wrap-shape属性来定义形状,并设定wrap-shape-mode属性为需要的值。通过制定content的值,文字将显示在形状内部。

上面的现实心形的代码如下:

CSS

1
2
3
4
5
6
7
8
9
10
11
.circle{
/* 定义元素形状为一个圆*/
	wrap-shape: polygon(0px, 150px /* ...更多点*/);
	wrap-shape-mode: content;   
}
 
.heart{
	/* 定义元素形状为心形*/
	wrap-shape: polygon(150px, 32px /* ...更多的点 */);  
	wrap-shape-mode: content;   
}

HTML

1
2
<div class="circle"></div>
<div class="heart"></div>

我们的基于WebKit原型支持使用一个简单的多边形指定一个形状,但是你可以想象其它的集合体也可以被用于设定形状,或者甚至使用一张图片的alpha值。。。

环绕(Exclusions)

通过使用wrap-shap-mode属性的其它值,你可以创建不同的效果,包括指定的wrap-shape 属性可以理解为要完全避开的区域(看图4)。

图4. 文字环绕在自定义图形周围

图4. 文字环绕在自定义图形周围

CSS

1
2
3
4
.exclusion{
	/* 文字环绕整个元素 */
	wrap-shape-mode: around;
}

HTML

1
2
3
 <div class="exclusion circle">
	<p>Lorem ipsum dolor [...]</p>
</div>

区域样式(Region Styling)

在杂志中,指定内容环绕设计中的一个特定的区域是很常见的。我们称之为区域样式。例子展示了文字环绕在第一个区块(包括introduction标题的部分)被设定为深蓝色,而余下的文字则为灰色(看图 5)。

图5.文字样式依赖它流入的区域

图5.文字样式依赖它流入的区域

CSS

1
2
3
4
5
6
7
8
p {
	color: gray:
}
@region-style #region_1 {
	p {
		color: #0C3D5F;
	}
}

HTML

1
2
3
4
5
6
7
8
<div id="article">
	<h1>Introduction</h1>
	<p>This is an example [...]</p>
</div>
<div id="region_1"></div>
<div id="region_2"></div>
<div id="region_3"></div>
<div id="region_4"></div>

区域样式目前还没有在Adobe Labs的这个webkit原型里面实现。

CSS3 区域和媒体查询

那些基本的构建块可以组合起来创建更有趣更复杂的布局,类似你经常看到的印刷出版物。你也可以将它们配合其它web标准适用。比如,结合CSS媒体查询,可以创建适应不同设备的方向(横屏landscape、竖屏portrait等)的布局。

图 6展示了使用wrap-shape属性结合CSS3 媒体查询来实现适应不同屏幕朝向的布局。

图6. 使用属性结合CSS3 媒体查询来实现适应不同屏幕朝向的布局

图6. 使用属性结合CSS3 媒体查询来实现适应不同屏幕朝向的布局

图6. 使用属性结合CSS3 媒体查询来实现适应不同屏幕朝向的布局

图7 展示如何让同样的内容适应不同的屏幕方向,以及变化的列数

图7 内容适应不同的屏幕方向,同时改变的列数

图7 内容适应不同的屏幕方向,同时改变的列数

图7 内容适应不同的屏幕方向,同时改变的列数

CSS3 区域和JavaScript

你也可以将这些功能结合JavaScript以创建交互的内容。在下面的图8中展示的,你可以滑动双向的箭头以移动图片,这个时候,文字围绕山体和汽车重新布局。

图8. 滑动双向的箭头移动图片,文字围绕山体和汽车重新布局

图8. 滑动双向的箭头移动图片,文字围绕山体和汽车重新布局

图8. 滑动双向的箭头移动图片,文字围绕山体和汽车重新布局

图8. 滑动双向的箭头移动图片,文字围绕山体和汽车重新布局

这个例子包含在上面提到的WebKit原型中,你可以下载体验下。

译注:CSS3 region这个词,着实不太好翻译,暂时按照region的意思翻译为区域,但是感觉很别扭。还有文中的一些词组,如果你觉得有更好的中文说法,请赐教——神飞。

相关 [css3 region html] 推荐:

CSS3 Region:基于HTML和CSS3的富页面布局

- John - 前端观察
译自:CSS3 regions: Rich page layout with HTML and CSS3. 中文:CSS3 Region:基于HTML和CSS3的富页面布局. 请尊重版权,转载请注明来源,多谢. 互联网已经成为一个提供参考、教材、新闻、文章和交互应用的大宝库了. 然而,当为印刷设计内容时,一些功能显然仍然不可能或者很难使用Web标准来实现.

使用HTML与CSS3进行富页面布局

- - InfoQ cn
长久以来,复杂布局一直是印刷媒体的一个主要关注点. 出版物如杂志、报纸上固有的物理限制导致它们创造了非常复杂的流布局. 在这样的布局中,内容可以跨越多个列显示并且可以环绕在图片和表格周围进行编排. 布局需要能够在整个排版过程中随着内容添加和改变进行动态调整. Adobe正通过向W3C提案 CSS Regions Module与 CSS Exclusions Module,力图将该层次的布局控制引入到Web中.

css3 变形

- - 博客园_Ruby's Louvre
CSS3从IE滤镜偷窍过来的创意,但易用性明显提高了许多. 利用这个,我们可以对某个元素进行旋传,缩放,倾斜与位移,并且区分元素类型,无论对块状元素还是内联元素都有效. rotateX(angle) 单独设定 rX 轴的角度. rotateY(angle) 单独设定 rY 轴的角度. rotateZ(angle) 单独设定 rZ 轴的角度.

CSS3 代码生成工具:Create CSS3

- - 我爱水煮鱼
CSS3 具有相当多的新增属性,而且包括阴影、动画、过渡等华丽的效果. 但是由于 CSS3 出来并没有很久,各个浏览器厂商还在开发中,有些属性仍然会带有实验性前缀. 而且类似制作动画、渐变的 CSS3 代码也相当复杂,一旦写错就会导致出现问题. 为此,有人开发了一个生成 CSS3 代码的工具 Create CSS3.

CSS3 文字渐变

- slackware - 前端观察
之前,我们有发表过CSS文字渐变效果,但是其实那并不是纯粹的基于CSS的渐变,它需要一张半透明渐变的png图片. 今天我们将介绍两种使用CSS3实现实现文字的方法. 嗯,只有webkit浏览器支持,请暂时无视其它浏览器. 在《CSS的未来:一些试验性CSS属性》中,我们提到了这个属性,相对于Firefox只能用svg做mask,webkit则灵活很多,图片和css3渐变均可.

用css3写个logo

- 丸子 - 崔凯,前端开发
演示地址:http://uicss.cn/css3/maxthon-logo.html. 先画一个外框 width: 240px; height: 240px;border-radius: 120px;. 填充背景色background:#b1e4ff;. 描边border:2px solid #789cb6;.

CSS3 pointer-events介绍

- Pstrey - 前端观察
其实早知道这个属性,但是一直没有去研究过. 今天正好在twitter看到这个词,就去研究了下,正好解决了目前遇到的一个小难题,所以分享下. 嗯,其实这是个比较简单的CSS3属性. 在某个项目中,很多元素需要定位在一个地图层上面,这里就要用到很多绝对定位或者相对定位的元素,但是这样的话,这些浮在上面的div或者其它元素一般都会给个宽高,或者relative的元素可以不给宽高,这个时候,这些元素就会盖住下面的地图层,以至于地图层无法操作.

HTML 安全列表

- 火锅土豆 - 酷壳 - CoolShell.cn
下面这个网站罗列了,几乎所有的关于HTML 5 在各种主流浏览器上的安全问题,这些安全问题很有可能将会是黑客攻击你的网上的敲门砖,他们几乎都和Javascript都有关系,你就要好好注意了. IE6,7,8,9,和Opera 8.x, 9.x, 10.x 都支持这样的语法. 这个问题会存在于所有的Firefox版本中,可以让用户进行XSS(跨站脚本)攻击.

HTML学习笔记

- - CSDN博客推荐文章
超文本标记语言( 英文:HyperText Markup Language,HTML)是为“ 网页创建和其它可在 网页浏览器中看到的信息”设计的一种 标记语言. HTML被用来结构化信息——例如标题、段落和列表等等  点击打开链接. w3schools  点击打开链接 {语法大全,超赞.

html嵌套规则

- - Web前端 - ITeye博客
转载: http://www.studyofnet.com/news/412.html. 一、HTML 标签包括 块级元素(block)、内嵌元素(inline). 一般用来搭建网站架构、布局、承载内容……它包括以下这些标签:. 一般用在网站内容之中的某些细节或部位,用以“强调、区分样式、上标、下标、锚点”等等,下面这些标签都属于内嵌元素:.