回答读者提问(11)——CSS滑动门技术的简单应用
大家好:
今天收到袁马飞读者的一个问题,我觉得比较有价值,可能不少学习CSS的读者都会遇到相似的问题。因此这里详细讲解一下。
他的问题是:
“ 我是一个热爱CSS的读者,你们写的书我都看完,也跟着做完了!可是我有一个问题,就是你们书本上没有介绍到的。我画了一个TOP图片,可是左边有一个花纹,右边也有一个花纹,中间还有一张底图图片, 还有文字标题,我不知道怎样用CSS定义的啊! 所以就要请教一下你们了! ”
我理解他的问题是希望在标题文字的下面有背景图像,比如这样:
前沿视频教室
对于这样的标题,如果标题宽度是固定的,那么就很简单,可以制作一个固定的背景图像,作为h1标记的background-image就可以了。
而如果标题宽度不固定,需要变化宽度,而同时保证花纹在左右两端,就麻烦一些,需要使用一种称为“滑动门”(Slide Door)的技术。例如下面的这个标题和上面的例子,宽度变化了,但是左右两端的花纹依然保持正确的效果。
前沿视频教室
这就是通过滑动门技术来实现的。所谓“滑动门”,就是两个嵌套的元素,各自使用一个背景图像,二者中间部分重叠,两端不重叠,这样,左右两端的花纹就可以都被显示出来,中间部分的宽度可以自动适应,因此宽度变化时,依然可以保证左右两端的图案不变。“滑动门”这个名称很形象地描述了这种方法的本质,两个图像就像两扇门,二者可以滑动,当宽度小的时候,就多重叠一些,宽度大的时候,就少重叠一些。
具体操作如下:
首先,为了“挂上”两个背景图像,需要两个HTML元素,因此在h3标记中间在嵌套一层span:
1 | <h3><span>标题文字</span></h3> |
然后,分别对h3和span的CSS样式进行设置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | h3{ font-size:13px; line-height:21px; text-align:center; width:200px; /*修改这个值即可改变宽度,且保持两端的花纹*/ background-image:url(bg.gif); background-repeat:no-repeat; padding-left:40px; } span{ display:block; padding-right:40px; background-image:url(bg.gif); background-repeat:no-repeat; background-position:right; } |
可以看到,实际上二者是用的是同一个背景图像,这个背景图像如下所示。

关键的要点是,由于span元素在h3元素里面,因此span的背景图像在h3的背景图像的上面。h3通过设置左侧的padding露出左端的花纹。
而span通过background-position属性,从右边开始显示背景图像,这样就可以露出背景图像的右端了。
大家如果还不十分清楚,可以点击这里查看滑动门效果,然后把文件下载到您的计算机上,修改一下宽度,试验一下效果。
如果对CSS比较熟悉的话,上面的CSS代码可以简写如下:
1 2 3 4 5 6 7 8 9 10 11 12 | h3{ font:13px/21px; text-align:center; width:200px; /*修改这个值即可改变宽度,且保持两端的花纹*/ background:url(bg.gif) no-repeat; padding-left:40px; } span{ display:block; padding-right:40px; background:url(bg.gif) no-repeat right; } |
“滑动门”是一个非常有用的技术,可以用在很多很多地方,我们最近编写的《CSS设计彻底研究》书中,多次用到了滑动门技术来解决各种问题,核心就是解决需要适应宽度的问题。在制作导航菜单、为图像制作阴影、为页面布局设置背景色等很多地方,都有“滑动门”的用武之地。如果大家有兴趣,等书出版以后,可以参考一下。
8,409


哇哦,老师发表留言的效果做的不错哦~~顶~~
老师,可否说说 span标签里为何要添加一个 display 属性呐?
呵呵 支持啦 www.dhszz.com
为什么span有个padding-right:40px
白龙马 ,
这个就是滑动门的关键,为了空出一段距离,好露出图案。
即使在span中不写这个padding-right:40px,也能有图案露出来。我感觉是为了不让文字离右边太近,以防遮住图案。不知道我想的对不对。讨教一下。。谢谢
lee ,
你说的对,h3里面的padding-left是为了露出左侧的花纹,span里的padding-right是为了对称,使得里面的文字居中,如果没有它,蚊子就会偏有一点点了。
上次的回答我看错读者的问题了。
谢谢!欢迎常来这里交流!
看到老师给的回复,好激动啊.老师能一个个亲自回答我们的问题,这种精神让我折服.给了我更强大的学习动力.向老师敬礼.谢谢老师.
您好!我想知道,dreamweaver中的模板到底要怎么用,上网找了好多,都没有详细的代码解释!
模板现在基本上没有什么用了,它只是为了使代码重用,将网页不需要改动的部分作为一个模板,如果你懂代码,也可以把那些不需要改动的代码拷贝过去一样的
呵呵,终于找到书了,看到里面的网址,故上来看下http://www.chinanet5.com
你好,看了你们网站的css技术方面的视频教程,受益匪浅,自己试着在下拉菜单效果的基础上修改成自己想要的效果, 想把菜单项dd中的内容加宽显示,但是定义dd的宽度,或者在dd中加入div定义宽度,出现的问题是,鼠标经过dt,dt>宽度也会变的和定义的dd一样宽,效果走样。不知道这样的问题该如何解决呢?多谢!
我的问题真好。哈哈!以后提多一点。
你好,
好久不见了,生意好啊?
可以嵌套吗
书终于到了,好好看看,希望有所提高!!
csser,
希望我们的书对您有所帮助,有问题可以到这里或者我们的论坛发帖讨论!
我真的非常感谢你们!你们能够抽一点时间回答我的问题我感到很高兴。你把这个问题用到这么简单的方法去解决,我受益不少的啊!呵呵!
在我写信给你们之后,我自己也研究出一种方法。可是我用到的方法实在太复杂了!我定义四个DIV。把中间色值的图片作为第一个DIV的背色,第二个DIV用左边的花纹,第三个DIV作为文字标题,第四个DIV作为右边花纹。重要在于第四个DIV,(float:right;clear:both)。
我在于这里再次感谢你们,我期待你们的新书。新书一出,记得第一时间通知我。
袁马飞读者,您好!
您太谦虚了,我们这里介绍的方法实际上也是前人研究出来的方法。我们为了准备写《CSS设计彻底研究》这本书,看了很多很多国外设计师的文章和资料,基本上2003-2004年是CSS的各种技术发展和成熟最快的一段时间,现在基本上已经定型了。我们在新书里对于这些方法都给出了出处和发明他们的设计师是谁,读者有兴趣,还可以做更深入的研究。
这里介绍的这种方法是一个非常通用的方法,所以它才会有一个固定的名字叫“滑动门”,这种方法在很多地方都非常有用,只要是希望能够适应宽度,都应该试试这种方法。
你用的4个div也可以,不过提醒您注意的是,从您的解决方案可以看出,你使用表格布局已经很熟练,头脑中表格布局的思想已经很深,实际上,使用CSS布局,一定要改变思想方法,用CSS的思想去解决问题,往往能够找到很有趣的解决方案。
制作网业能给我几个。NET的事例吗 谢谢
东方星,你好!
目前我们手没有非常好的.net实例,不过如果你希望学习.net的话,参考书和资料应该还是不少的。到网上搜一搜,应该可以找到不少,如果希望系统学习,找一本带有比较适当的案例的书,按部就班地研究一遍,效果应该不错!
WEB好难学啊
张衡,
你好,地动仪都能造出来, Web不难学!加油!
老师,你太幽默了
哈哈,,,不错的CSS技巧