我有一个具有以下结构的网站:
<div id="header"></div>
<div id="main">
<div id="navigation"></div>
<div id="content"></div>
</div>
<div id="footer"></div>
navigation
在左侧, content
div
在右侧 . content
div
的信息是通过PHP引入的,所以每次都不一样 .
如何垂直缩放 navigation
,使其高度与内容 div
的高度相同,无论加载哪个页面?
24 回答
NOTE :此答案适用于不支持Flexbox标准的旧版浏览器 . 有关现代方法,请参阅:https://stackoverflow.com/a/23300532/1155721
我建议你看一下Equal Height Columns with Cross-Browser CSS and No Hacks .
基本上,使用CSS以浏览器兼容的方式执行此操作并非易事(但对于表格而言微不足道),因此请找到适合您的预打包解决方案 .
此外,答案取决于您是想要100%高度还是相同高度 . 通常它的高度相等 . 如果它是100%高度,答案会略有不同 .
对于父母:
你应该添加一些前缀,http://css-tricks.com/using-flexbox/ .
编辑:正如@Adam Garner所说,align-items:stretch;不需要 . 它的用途也适用于父母,而不是孩子 . 如果要定义子项拉伸,请使用align-self .
这是一个令人沮丧的问题,一直与设计师打交道 . 诀窍是你需要在CSS中的BODY和HTML上设置高度为100% .
这个看似毫无意义的代码是为浏览器定义100%的含义 . 令人沮丧,是的,但这是最简单的方法 .
我发现将两列设置为
display: table-cell;
而不是float: left;
效果很好 .如果您不介意在意外短的内容div中剪辑导航div,那么至少有一种简单的方法:
另外还有faux-columns技术 .
使用jQuery:
尝试将底部边距设为100% .
看this example .
height : <percent>
仅在您拥有指定百分比高度的所有父节点且顶层具有固定高度(以像素,ems等为单位)时才有效 . 这样,高度将级联到您的元素 .您可以指定100%的html和body元素,如前面所述的@Travis,以使页面高度级联到您的节点 .
经过长时间的搜索和尝试,没有解决我的问题,除了
关于儿童div
并为父母申请
另外,我正在使用bootstrap,这并没有破坏对我的响应 .
基于此article中描述的方法,我创建了.Less动态解决方案:
Html:
Less:
我知道问题已经过了很长时间,但是我发现了一个简单的解决方案,并且认为有人可以使用它(抱歉英语很差) . 在这里:
CSS
HTML
简单的例子 . 请注意,您可以转变为响应能力 .
在RWD项目中,最好的方法是使用jQuery . 对于小屏幕,您可能希望保持高度自动,因为col1,col2和col3彼此堆叠 .
但是,在媒体查询断点之后,您希望cols彼此相邻,并且所有列的高度相等 .
1125 px只是窗口宽度断点的一个示例,之后您希望将所有列设置为相同的高度 .
当然,如果需要,您可以设置更多断点 .
问题的 Headers 和内容有点矛盾 . Headers 说的是父div,但这个问题听起来好像你想要两个兄弟div(导航和内容)的高度相同 .
您是否希望导航和内容都是主要高度的100%,或者(b)希望导航和内容高度相同?
我假设(b)......如果是这样的话,我不认为你能够在你当前的页面结构(至少不是纯CSS和没有脚本)的情况下做到这一点 . 您可能需要执行以下操作:
并将内容div设置为具有导航窗格宽度的左边距 . 这样,内容的内容位于导航的右侧,您可以将导航div设置为内容高度的100% .
编辑:我完全在脑子里这样做,但你可能还需要将导航div的左边距设置为负值或将其绝对左边设置为0把它推回最左边 . 问题是,有很多方法可以解决这个问题,但并非所有方法都能与所有浏览器兼容 .
[在另一个答案中提到Dmity的Less代码]我猜这是某种“伪代码”?
从我的理解尝试使用应该做的技巧的人造柱技术 .
http://www.alistapart.com/articles/fauxcolumns/
希望这可以帮助 :)
给我的孩子工作
position: absolute;
我的解决方案
你用CSS Flexbox
如前所示,flexbox是最简单的 . 例如 .
这会将所有子元素与父元素中的中心对齐 .
从:
http://getbootstrap.com.vn/examples/equal-height-columns/equal-height-columns.css
说明bootstrap,但你不需要bootstrap来使用它 . 回答这个老问题,因为这对我有用,而且看起来很容易实现 .
这是我为此提供的相同答案Question
将
display: grid
添加到父级最简单的方法是伪造它 . List Apart已经多年来广泛涵盖了这一点,like in this article from Dan Cederholm from 2004 .
这是我通常这样做的方式:
通过将#container包装在另一个div中,将头部div嵌入为#container的兄弟,并将边距和宽度样式移动到父容器,可以轻松地在此设计中添加 Headers . 此外,应该将CSS移动到单独的文件中,而不是保持内联等 . 最后,可以在positioniseverything上找到clearfix类 .