11.4 “5图形”二维滑动门经典圆角框


11.3节介绍的不固定宽度的圆角框制作方法只适用于单色的圆角框,对于带有复杂边框的圆角框就不适用了。

另外,还需要考虑一个问题,用11.3节介绍的方法制作的圆角框,尽管可以适应不同宽度,但是它里面的正文段落也承担了设置圆角框布局的任务。也就是说,圆角框中的正文并不是独立的,正文内容不能自由地设置样式。这对于通用型的网页来说,局限性很大;例如,如果较为复杂的页面,每个圆角框用于放置不同的栏目,希望达到的目标应该是可以在每个圆角框中放置任何内容,并且可以对这些内容设置样式,还能保证圆角框本身显示正确。简单地说,就是使圆角框的本身与内容完全分离。

这里向读者介绍一种非常经典的利用5个背景图像制作圆角框的方法。这种方法可以实现上面说的要求。

这种方法是由丹麦的设计师Staren Madsen,于2003年12月发表在著名的Web设计与开发电子杂志“A List Apart”的第165期上。

A List Apart的网址是http://www,alistapart.com,Soren Madsen本人的网站网址是http://www.picment.com。

一、准备图像

① 首先在Phoioshop或者Fireworks中绘制一个大约800×600的圆角矩形。

注意:具体的样式和大小读者可以自己决定,最终完成的圆角框的大小不能超过这个大小,如果超过,就会出现裂缝。因此如果需要很大的圆角框,这个图就要做得再大一些。

② 在Photoshop或者Fireworks中进行切片,一共产生5个图像文件,如图1所示。


left-bottom


left-top


right


right-bottom


right-top

图1 最终产生的5个图像文件

二、搭建HTML结构

接下来搭建HTML整体结构,代码如下。代码中临时设置了一些实线边框,用来确认各个盒子的位置和大小,以便进行分析,后面会把这些边框的属性去掉。该文件位于网页学习网CSS教程资源“第11章\03\step-1.htm”。

折叠展开XML/HTML 代码复制内容到剪贴板

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <title>5背景图可变宽圆角框</title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  7. <style type="text/css">
  8. body {
  9. background: #FFFF99;
  10. font: 12px/1.5 Arial;
  11. }
  12. .rounded {
  13. width:90%;
  14. border: 1px solid red;
  15. }
  16. .rounded h3 {
  17. border: 1px solid blue;
  18. }
  19. .rounded .main {
  20. border: 1px solid black;
  21. }
  22. .rounded .footer {
  23. border: 1px solid blue;
  24. }
  25. .rounded .footer p {
  26. border: 1px solid magenta;
  27. }
  28. </style>
  29. </head>
  30. <body>
  31. <div class="rounded">
  32. <h3>Article header</h3>
  33. <div class="main">
  34. <p>
  35. 这是一行文本,这里作为样例,显示在圆角框。<br />
  36. 这是一行文本,这里作为样例,显示在圆角框。
  37. </p>
  38. <p>
  39. 这是一行文本,这里作为样例,显示在圆角框。<br />
  40. 这是一行文本,这里作为样例,显示在圆角框。
  41. </p>
  42. </div>
  43. <div class="footer">
  44. <p>
  45. 这是版权信息文字。
  46. </p>
  47. </div>
  48. </div>
  49. </body>
  50. </html>

在上述代码中,定义了一个div容器,里面有一个标题和两个div,这两个div中,前者为内容主体,后者为页脚。主体中有两段文本,页脚中有一段文本。整个div设置为浏览器宽度的90%,并且给每个元素设置边框,这是为了先看清楚整体的结构。

三、放置背景图像

现在的任务就是把前面制作的5个图片分别放置到5个元素的背景中。先不考虑更多细节,仅把它们放进去即可,相关代码如下。该文件位于网页学习网CSS教程资源中“第11章\03\step-2.htm”。

折叠展开CSS 代码复制内容到剪贴板

  1. .rounded {
  2. background:   url(images/left-top.gif) top left no-repeat;
  3. width:90%;
  4. }
  5. .rounded h3 {
  6. background: url(images/right-top.gif) top right no-repeat;
  7. }
  8. .rounded .main {
  9. background: url(images/right.gif) top right repeat-y;
  10. }
  11. .rounded .footer {
  12. background: url(images/left-bottom.gif) bottom left no-repeat;
  13. }
  14. .rounded .footer p {
  15. background: url(images/right-bottom.gif) bottom right no-repeat;
  16. }

这时效果基本圆角框已经构成了。但是还有两个问题,第一是文字没有放到圆角框内部,第二是右侧的边框有两个裂缝。下面就来分析并解决这个问题。

四、设置样式并修复缺口

修改文字的位置可以通过设置margin和padding来解决。这两个裂缝产生的原因是什么呢?

它是由p标记产生的。在默认情况下,每个由p标记产生的段落在第一行的上面和最后一行的下面都会有一个自动设置的margin,这个部分会盖住边框。解决办法有两个。

一种方法是重新设置放入到这个圊角框的中的p段落样式。实际上前面的例子中也是这样做的,但是从更高的要求来说,我们的目的是使圆角框的结构和它的CSS样式可以和内容完全分离开,而正文的p标记是输入内容范畴,不属于圆角框本身,也就是最好不需要对置人圆角框的p进行任何与圆角框相关的设置。从设计的角度来说,这样做更加优雅。因此,前面设置的5个背景图片都没有挂在正文的p标记上,也是出于同样豹原因。本章前面的所有例子都没有做到的一点。

另外一种方法是不需要对p进行设置。在这种情况下,又该怎么解决呢?其实方法也很简单,只需将margin设置为负值,即向上提高裂缝的高度,就可以盖住这个裂缝,理论上提高1行文字的行高就可以了,但是Soren Madsen经过多次尝试后,发现如果仅提高1个行高的高度,在CSS支持得较为完善的浏览器中显示是没有问鼯的,但是对于IE浏览器,再多提高一点更合适。例如在这个例子中,行高设定的是文字高度的1.5倍,把上margin设置为-2em,就可以得到完美的效果。

请参考下面的代码,特别注意粗体字的7行代码。该文件位于网页学习网CSS教程资源中“第11章\03\step-3.htm”。

折叠展开CSS 代码复制内容到剪贴板

  1. .rounded {
  2. background: url(images/left-top.gif) top left no-repeat;
  3. width:90%;
  4. }
  5. .rounded h3 {
  6. background: url(images/right-top.gif) top rightright no-repeat;
  7. padding:20px 20px 10px; 
  8. margin:0;
  9. }
  10. .rounded .main {
  11. background: url(images/right.gif) top right repeat-y;
  12.    padding:10px 20px;   
  13.    margin:-2em 0 0 0;
  14. }
  15. .rounded .footer {
  16. background: url(images/left-bottom.gif) bottom left no-repeat;
  17. }
  18. .rounded .footer p {
  19. background:url(images/right-bottom.gif) bottom right no-repeat;
  20.    display:block;   
  21.    padding:10px 20px 20px;   
  22.    margin:-2em 0 0 0; 
  23. }

这时显示效果如图2所示,圆角框的宽度是浏览器窗口宽度的90%,可以随浏览器窗口变化。


图2 设置完成以后的效果

注意:如果浏览器窗口变得过大,有可能会超过背景图像的范围,产生袭缝,因此在制作背景图片的时候,需要先考虑好需要多大的图像。

通过上面的介绍可以了解到,制作圆角框的技术是很相似的,都是通过使用若干个背景图片来实现的。各种方法的区别就在于如何分配各个图像所在的元素。读者在互联网上可以搜索到大量的不同方案。

编辑:网页学习网
本文地址:http://www.lodidance.com/css/jc/918.html

11.4 “5图形”二维滑动门经典圆角框

时间: 2024-08-18 12:39:49

11.4 “5图形”二维滑动门经典圆角框的相关文章

如何通过二维码门禁实现微信开门

如何通过二维码门禁实现微信开门是现下许多客户关心的问题,塞伯罗斯对此进行多番研究,如何让二维码门禁与微信二维码相互作用,微信小程序的诞生便是链接其中的奥秘了,二维码门禁中的二维码读头通过扫描微信小程序生成的微信二维码,来对二维码门禁发送指令,从而实现二维码门禁使用微信开门.或许会有人觉得,这样安全性能是否降低了?答案是:不会的.首先,微信小程序是需要通过手机注册后,方可进行使用,与二维码门禁的后台管理相配合,比起APP开门,节省了不少手机空间的同时还能实现快速开门: 其次,微信小程序生成的二维码

POJ 2155 二维线段树 经典的记录所有修改再统一遍历 单点查询

本来是想找一个二维线段树涉及懒惰标记的,一看这个题,区间修改,单点查询,以为是懒惰标记,敲到一半发现这二维线段树就不适合懒惰标记,你更新了某段的某列,但其实其他段的相应列也要打标记,但因为区间不一样,又不好打...也可能是我这是在套用一维线段树的思想,还有更好的二维线段树懒惰标记方法 反正到现在我还没搞定二维线段树的懒惰标记,因为这道题不用懒惰标记,因为是二进制序列,区间修改仅限于翻转操作,那就只要记录每次操作,最后查询的时候从上往下把所有修改都来上一遍,就可以了.就类似于树状数组的第二种用法,

Java打印M图形(二维数组)——(九)

对于平面图形输出集合图形与数字组合的,用二维数组.先在Excel表格中分析一下,找到简单的规律.二维数组的行数为行高,列数为最后一个数大小. 对于减小再增大再减小再增大的,可以用一个boolean标志其是增加还是减小状态,减到最小时将其标志设为相反的并改变这时的初值大小. 效果: Excel中分析 Java代码: 1 package Java_Test; 2 3 public class PrintM { 4 5 /* 6 7 3 7 8 2 4 6 8 9 1 5 9 10 平面图形(二维数组

[BZOJ 1047][HAOI 2007]理想的正方形(二维滑动窗口+单调队列)

题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1047 思路:裸的二维上的滑动窗口问题,可以借鉴一维滑动窗口的思路.首先预处理出每一列j的.以第i行元素为结尾.长度为n的区间的最大值maxv[i][j].最小值minv[i][j],然后再搞每一行,求出以每一行i结尾.行标上长度为n的区间.以第j列结尾.列标上长度为n的区间得到的二维区间最大值与最小值之差,遍历每一行得到这个差的最小值即为答案. #include <iostrea

POJ2155 Matrix二维线段树经典题

题目链接 二维树状数组 1 #include<iostream> 2 #include<math.h> 3 #include<algorithm> 4 #include<stdlib.h> 5 using namespace std; 6 #define ll long long 7 #define re(i,n) for(int i=0;i<n;i++) 8 const int maxn = 1007; 9 int c[maxn][maxn]; 10

css滑动门制作圆角按钮

之前做项目的时候,基本都是将圆角背景图切成三块,故而每次用的标签都超级多,a标签中总是包含三个span,然后里面还得放按钮,导航冗余标签极多. 事实上是之前理解的滑动门的精髓不够到位. 现在有两种方式. 效果展示:http://runjs.cn/detail/evk8nkc8 先上传要用的两张图片吧.              btnBg.png                                                      bg.png <!doctype html>

【二维单调队列】BZOJ1047-[HAOI2007]理想的正方形

[题目大意] 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. [思路] 裸的二维单调队列.二维单调队列的思路其实很简单: (1)对于每一行维护两个宽度为n的滑动窗口记录单行中的min和max,和POJ2823一个道理.此时相当于把n个格子浓缩到了一个格子当中. (2)维护n*n大小的二维滑动窗口中的min和max.由于有了第一步操作,只要考虑每一个n*n的矩形右上角到右下角的最值即可.相当于对于每一列,维护两个宽度为n的滑动窗口.

【转】 iOS使用AVFoundation实现二维码扫描

原文:http://strivingboy.github.io/blog/2014/11/08/scan-qrcode/ 关于二维码扫描有不少优秀第三方库如: ZBar SDK 里面有详细的文档,相应介绍也非常多,如:http://rdcworld-iphone.blogspot.in/2013/03/how-to-use-barcode-scanner-br-and-qr-in.html ZXing google推出的开源项目,相应介绍如:http://blog.devtang.com/blo

iOS开发-定制多样式二维码

iOS开发-定制多样式二维码 二维码/条形码是按照某种特定的几何图形按一定规律在平台(一维/二维方向上)分布的黑白相间的图形纪录符号信息.使用若干个与二进制对应的几何形体来表示文字数值信息. 最常见的二维码功能包括信息获取.网站跳转.电商交易.手机支付等等,其拥有密度小.信息容量大.容错能力强.成本低.制作难度低等优点.在移动开发中,二维码的地位也越来越重要,掌握二维码的基本操作是重要的本领之一. 在iOS7之后,苹果自身集成了二维码的生成和读取功能.生成二维码包括以下步骤 1.导入CoreIm