CSS3让网页更富于表现和支持更复杂布局

文章简介:CSS3 Region:基于HTML和CSS3的富页面布局.

译自: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)显示。

图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. 文字环绕在自定义图形周围

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.文字样式依赖它流入的区域

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 媒体查询来实现适应不同屏幕朝向的布局

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

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

CSS3 区域和JavaScript

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

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

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

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索布局
, 内容
, 属性
, 文字
, 复杂布局
, css3怎么让背景自适应
, 区域
, 形状
, 区域布局
显示内容区域
css3复杂动画、css3 flex布局、css3布局、css3 弹性布局、css3响应式布局,以便于您获取更多的相关知识。

时间: 2024-11-02 14:52:27

CSS3让网页更富于表现和支持更复杂布局的相关文章

CSS3设计网页案例:漂亮的网页图片设计CSS实例

文章简介:今天我将重温这个主题然后向你展示使用background-image的方法可以实现多少效果.我将向你展示如何使用box-shadow.border-radius 和 transition 来创作不同的图片风格. 译自:CSS3 Image Styles中文:CSS3图片样式请尊重版权,转载请注明来源,多谢-- 直接在图片元素上直接应用CSS3 inset box-shadow 或 border-radius时,浏览器并不能完美的渲染它们.不过,如果把这个图片用作背景图,你就可以可以给它

CSS3教程:网页文字阴影属性text

文章简介:文字阴影在很多设计中都有应用,在过去我们只能通过图片来实现在Web上显示文字阴影,但是这样做对不太利于SEO,所以在CSS3中,text-shadow又恢复了其属性(text-shadow属性是CSS3中定义的,在CSS2.1中删除了). 文字阴影在很多设计中都有应用,在过去我们只能通过图片来实现在Web上显示文字阴影,但是这样做对不太利于SEO,所以在CSS3中,text-shadow又恢复了其属性(text-shadow属性是CSS3中定义的,在CSS2.1中删除了). text-

用CSS3实现网页文本禁止复制的CSS代码

文章简介:用CSS3实现网页文本禁止复制的CSS代码. 实例代码1: <!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>Demo1</title><style>.text{-moz-user-select:none;-webkit-

css3制作网页实例:点击切换不同的CSS列表

文章简介:css3制作网页实例:点击切换不同的CSS列表. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><met

azure-要想更新到更高等级的 Azure 支持计划,我该怎么做啊?

问题描述 要想更新到更高等级的 Azure 支持计划,我该怎么做啊? 真问题,求回复,求解答 谢谢 解决方案 参考这里: http://www.windowsazure.cn/support/plans/ 解决方案二: Hi, 请阅读兔子党提供的连接,如果有不明白的,请与世纪互联的支持团队联系. 您可以通过以下途径联系: 400-089-0365 010-84563652 https://windowsazure.cn/zh-cn/support/support-ticket-form/ Bes

求助-arcgis new一个polygon 对象,当网页运行时错误,对象不支持此操作

问题描述 arcgis new一个polygon 对象,当网页运行时错误,对象不支持此操作 有部分省略"esri/geometry/Polygon", "esri/SpatialReference", ], function (FeatureLayer, BootstrapMap, ABCLayer, Map, HeatmapRenderer, Polygon, SpatialReference) { var map = BootstrapMap.create(&q

Vb.net2008做成的软件编译完才不到1M.运行支持软件却需要220M!!不可思议!做的安装软件,需要220M左右的软件支持,太庞大了,有没有更简单更小的软件支持就可以了?

问题描述 Vb.net2008写的程序做成安装软件,在其他纯净的系统中就需要220M左右的软件支持,太庞大了,有没有更简单更小的软件支持就可以运行软件了?象.Net2005需要FrameWork2.0只有20多M,还能够接受!现在是越做越庞大了! 解决方案 解决方案二:buhuiba你从网上下载一个,netframwork就可以运行了啊解决方案三:vs.net2008会自动生成的.生成的文件在Debug文件下221M.编译设置上我只选择了包含Framework3.5.装完后看控制面板里有Fram

网页的标准,IMG不支持onload标签怎么办_JavaScript

网页的标准,IMG不支持onload标签怎么办 这个记得以前有人问过我,但是我那时还没有注意这些. 现在终于遇到这个问题了.因为 img 标签是没有 onload 事件的.所以 UBB 代码中的img用到的onload来处理大的图片进行自适应,这样的办法就不能采取了.但是经过测试,body还是可以带onload事件的, 所以我解决的办法就是在页面全部加载完后再处理太大的图片. 于是我用JS写了一段简单的代码 相关代码 function ReImgSize(){for (j=0;j<documen

[20170618]12c 支持更长的 identifiers

[20170618]12c 支持更长的 identifiers.txt --//12c 支持更长的索引与表名,带来的问题就是sqlplus显示混乱.太长了. --//必须有一个方法改变显示列的宽度. SCOTT@test01p> @ ver1 PORT_STRING                    VERSION        BANNER