左右两列布局
这种布局,我以前想了很久,总是没有办法,采用这种布局的网站,典型就是:博客园、各种邮箱。但是,这种布局的实现方法很多,我看了163邮箱、QQ邮箱的DOM结构,发现,都是用table布局的,用一个table作为两列的容器,然后,使这个table的样式中设置:width:100%。这是关键,这样table就会占居整个水平方向,而后一列一个td,让一个td固定宽,则另一个td自动占满剩余宽度。这个办法我很久前就想到了。但是,我一直在想有没有用纯div+css的方式来完成这种布局。
今天心血来潮,用FireDebug查看了博客园的DOM结构。恍然大悟。实在太简单了。所以做了个实验,如上图,它对应的代码如下:
<!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><title> </title> <style type="text/css"> html,body { margin:0; padding:0; } .top { background-color:red; border:solid 1px black; margin:0 0 5px 0; height:50px; } .sidebar { position:absolute; left:0; top:57px; width:205px; background-color:yellow; border:solid 1px black; border-left-width:0; height:50px; } .main { margin-left:210px; background-color:white; border:solid 1px black; height:50px; } </style> </head> <body> <form method="post" action="Default.aspx" id="form1"> <div class="aspNetHidden"> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZITNqJgs+RNs/eWQN1lAbSvpYZlMxqK029mQ2FXE73uH" /> </div> <div class="top">A(固定高度,宽度自适应)</div> <div class="sidebar">B(高度任意,宽度为固定)</div> <div class="main">C(高度任意,宽度为除开B之外的所有空间,自适应)</div> </form> </body> </html>
原理超简单,关键就是上面红色加粗部分,真是巧妙啊。以前怎么没想到这个办法呢?呵呵。
现在看来,适当地用一用absolute,还是可以起到意想不到的效果啊。
上面的代码事实上有改进的余地,如果要求B、C两列上端是平齐的,那么,可以在B、C外面再加一个div,这样,就不用计算B的top了。只填个0就是了。当然,这个容器div的position必须为:relative。另外,可能有的读者认为。为什么不用浮动的方式来实现,只需把B/C放入一个div,让它们两个都向左浮动,然后B定宽,则C因为是块盒子,自然会填充剩余的空间。很遗憾,这个想法太理想化了,事实上并非如此,因为浮动的原因,实际上C的宽度将会是0。另外,浮动在不同的浏览器上的效果不同。不大方便啊。
老实说,网上众多站点采用这种布局的不多,这种布局往往给人一种朴素大方的感觉。时代不同了,以前那种总是占居中间一部分的布局未必能适合所有情况了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!