在css中可以实现类似1-2-1固定宽度布局的横向多列布局方法有哪些

完整的 CSS如下:为了使布局保持在小宽度我在每个内容列增加了overflow:hidden;这将切去超出列宽的东东,并阻止其干扰其他布局。重申一下,这只是 IE 的问题,其他所有浏览器会保持正确的布局,不管列内是虾米。如果你真想这样做,可以用 IE 条件注释只对 IE 写规则。#container3 { float:left; width...
在css中可以实现类似1-2-1固定宽度布局的横向多列布局方法有哪些
解决等高问题的第一步是把能分离的破开。方法是每列用两个 div 替代原来的一个。第一个 div 用来放内容,另一个用来作背景色。分离使我们可以单独控制这些额外的元素,之后用更有效的方法把它们放在一起。

浮动的容器的高度始终取决于其浮动的内容(高度)。这是本文多列等高方法的核心。使一个 div 的高度等于最高列高度的唯一方法是这个 div 包含所有的列。换句话说,通过把所有的列放在一个容器中,容器的高度就是最高列的高度。这是个非常有用的结构。

3列 HTML div 结构如下:Column 1 Column 2 Column 3

3 列 CSS如下:#container1 { float:left; width:100%; } #col1 { float:left; width:30%; background:red; } #col2 { float:left; width:40%; background:yellow; } #col3 { float:left; width:30%; background:green; }

为了让这一结构在所有浏览器中正确工作,容器 div 必须浮动(左或右),同时每一个内容列的 div 也要浮动,哪种方式并不重要。浮动内容 div 的进程使它们在页面中排列在一条水平线上。浮动容器使其自适应到最高列的高度。如果不浮动容器,内容 div 将会从容器底部溢出,容器不会拥有正确的高度。事实上在此例中,容器不浮动的话其最终高度为0。

增加额外嵌套的容器。我们需要容器的数量等于列的数量:3。这 3 个容器用作各列的背景。请注意,我们去除了原始列的背景色,并将其加至容器上。3列 HTML div 结构如下:两个额外的容器加至下面的 HTML 中。Column 1 Column 2 Column 3

3 列 CSS如下:所有元素左浮动,容器宽度设为100%,使他们占满页面的宽度。背景色从内容 div 移除并加至容器上。#container3 { float:left; width:100%; background:green; } #container2 { float:left; width:100%; background:yellow; } #container1 { float:left; width:100%; background:red; } #col1 { float:left; width:30%; } #col2 { float:left; width:40%; } #col3 { float:left; width:30%; }

用相对定位移动容器。现在用相对定位把容器移至新的位置。移动后 div 如下图所示。即等高列背景容器的层叠和位置。为了显示右侧的绿色列 container2 向左移了30%,为了显示中间的黄色列 container1 向左移动了40%,与此同时红色部分依然可见作为左侧列。

相对定位的 CSS如下:#container3 { float:left; width:100%; background:green; } #container2 { float:left; width:100%; background:yellow; position:relative; right:30%; } #container1 { float:left; width:100%; background:red; position:relative; right:40%; } #col1 { float:left; width:30%; } #col2 { float:left; width:40%; } #col3 { float:left; width:30%; }

将每列的内容移回。下一步是把每列的内容移回到页面上,使之排列在下面的背景色上。再次使用简单的相对定位来完成它。

最后在最外面的容器 container3 上添加overflow:hidden,砍去超出容器的部分。

相对定位的 CSS如下:请注意 container3 上额外的position:relative;这是为了解决一个 IE bug,阻止overflow:hidden;工作。#container3 { float:left; width:100%; background:green; overflow:hidden; position:relative; } #container2 { float:left; width:100%; background:yellow; position:relative; right:30%; } #container1 { float:left; width:100%; background:red; position:relative; right:40%; } #col1 { float:left; width:30%; position:relative; left:70%; } #col2 { float:left; width:40%; position:relative; left:70%; } #col3 { float:left; width:30%; position:relative; left:70%; }

对列增加 padding。最后还需对列增加 padding,这样每列边缘的文字不至于显得拥挤。如果我们增加 padding,一些浏览器中可能正常显示,但不是所有。IE 错误的盒模型,导致其估算拥有 padding 的元素宽度异常。一个 200px 宽 20px padding 的 box 在 IE 中被视为 200px 宽,在其他浏览器中则为正确的 240px。padding 应该加在元素的宽度上。凸微软!不过不用担心...我们可以用完全不依赖于 padding 的方法来解决这个问题。相反,我们把列弄窄一点(列宽减去两侧的 padding),之后用相对定位把它们移至正确的位置。在我们的例子中我们用了 2% 的 padding,则 30% 的列将减至 26%,40% 的列减至 36%。用相对定位移回列时需谨记,现在列变窄了,所以当它们一起像最初那样左浮动时,每一个需要比上一个移动更远的距离。

完整的 CSS如下:为了使布局保持在小宽度我在每个内容列增加了overflow:hidden;这将切去超出列宽的东东,并阻止其干扰其他布局。重申一下,这只是 IE 的问题,其他所有浏览器会保持正确的布局,不管列内是虾米。如果你真想这样做,可以用 IE 条件注释只对 IE 写规则。#container3 { float:left; width:100%; background:green; overflow:hidden; position:relative; } #container2 { float:left; width:100%; background:yellow; position:relative; right:30%; } #container1 { float:left; width:100%; background:red; position:relative; right:40%; } #col1 { float:left; width:26%; position:relative; left:72%; overflow:hidden; } #col2 { float:left; width:36%; position:relative; left:76%; overflow:hidden; } #col3 { float:left; width:26%; position:relative; left:80%; overflow:hidden; }

好了,就是这样。我希望这篇文章对你有用。可以自己弄一下 CSS 看一下它是如何工作的。你可以搞很多列,只要容器和内容列的数目相等。不要忘记看看我的 demo:2 列,3 列,4 列,以及 5 列。2024-12-16
mengvlog 阅读 8 次 更新于 2025-06-19 20:51:22 我来答关注问题0
  • 相对定位的 CSS如下:#container3 { float:left; width:100%; background:green; } #container2 { float:left; width:100%; background:yellow; position:relative; right:30%; } #container1 { float:left; width:100%; background:red; position:relative; right:40%; } #col1 { float:l...

  •  宠友记 css中,怎样让一个class继承另一个class的属性?

    1、新建一个html文件,命名为test.html。2、在test.html文件内,使用table标签创建一个表格,并使用border设置表格边框为1px。3、在test.html文件内,在table标签内,使用tr、td标签设置为两行两列表格。4、在css标签内,设置类名为t1的样式,使用width属性设置宽度为250px,使用height属性设置高度为200...

  •  百度网友e2676a8a7 这样类似的二级菜单用CSS和html怎么实现?

    ("#menu_2").hover(function() { (".sub_menu_2").show();},function() { /*这里就是out事件*/ (".sub_menu_2").hide();});剩下的就是样式的问题了

  •  丝蓉德拉库比 如何让一个div在另一个div的上面,求高手指点

    这个用绝对定位就可以搞定了。position:absolute;举个例子:1.css代码 .div1{height:30px; width:100%; background:#fff; position:relative; z-index:1;}.div2{height:30px; width:100%; background:#f00; position:absolute; top:0px; left:0; z-index:2;} 2.html代码 这样子div2就...

  •  g0063606 如何简化这两个CSS样式,两个很类似,如何使用改写?

    也就是像“#main4 .b4_1_1, .b4_1_2”之类的。然后在分别为每个 类 / ID 书写其他的属性。这样很繁琐,而且以后修改起来也不方便,你修改了一个,其他的都变了。单独写也未尝不可啊,一个CSS文件最多也就几十KB吧,现在网速都很快了,下载完后就让浏览器去执行,用不着考虑它的效率问题。

檬味博客在线解答立即免费咨询

CSS相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部