如何在同一页面上设置 73px 的 div 和 100% 的 iframe?
这应该很容易,但我花了一段时间试图解决这个问题......我有一个高度为 73px 的 div。我还有一个 Iframe,它应该延伸到页面的其余部分,但它溢出了,并且我有两个滚动条(Iframe 和页面)。如何让 div 位于 Iframe 上方并让 Iframe 处于 100% 高度?我也尝试过负边距和填充,但没有起到任何作用。
尝试在使用 100% 和 top: 73 时摆脱页面滚动条,但您可以自己查看代码。
This should be easy, but I've spent a while trying to figure this out... I have a div that is 73px in height. I also have an Iframe that is suppose to stretch to the rest of the page but it overflows and I have two scroll bars (Iframe, and page). How can I have the div above the Iframe and have the Iframe in 100% height? I've also tried a negative margin and padding and that hasn't done anything.
Trying to get rid of the page scroll bar when using 100% and top: 73, but you can see the code for yourself.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
我发现这是一个有趣的问题,因此我花了一些时间调试您页面上的设计。
现在对我来说,文本区域总是精确地拉伸到页面底部,而不是更远,并且页面滚动条不会出现。
以下是修改(我希望您在调试时没有对代码或样式表进行太多更改):
1.) - “容器”div:
将
bottom: 0
与position 一起使用:absolute
确保 div 拉伸到页面末尾。使用height: 100%
会导致 div 溢出!使用overflow:hidden
不允许页面滚动条显示。2.) - 左窗格(“span-12” div):
3.) - 右窗格(“span-12 last” div):
您可以使用与“容器”相同的技巧
div:绝对定位以及使用top、right、bottom css属性。
4.) - iframe:
编辑 - 为了使其居中对齐,我添加了“left: 50%; left-margin: -475px;”以“容器”div 的风格。这个技巧属于@clairesuzy,我自己没有找到。
I find this an interesting problem, so I've spent some time debugging the design on your page.
Now for me, the textarea always stretch exactly to the bottom of the page, not farther, and the page scrollbar does not appear.
Here are the modifications (I hope you did not change your code or stylesheets too much while I was debugging):
1.) - The "container" div:
Using
bottom: 0
together withposition: absolute
ensures that the div stretch to the end of the page. Usingheight: 100%
would cause the div to overflow! Usingoverflow: hidden
does not allow the page scrollbar to show up.2.) - The left pane ("span-12" div):
3.) - The right pane ("span-12 last" div):
You can use the same trick as with the "container"
div: absolute positioning and use of the top, right and bottom css properties.
4.) - And the iframe:
EDIT - To make it center-aligned, I added "left: 50%; left-margin: -475px;" in the style of the "container" div. This tricks belongs to @clairesuzy, I didn't find it myself.
http://jsfiddle.net/HZTTp/:
http://jsfiddle.net/HZTTp/:
您可以在
iframe
上使用包装器div
来指定您希望其侧面的位置(top:73px; left:0; right:0; Bottom: 0;
)在position:absolute
的帮助下。HTML:
CSS:
演示: jsfiddle.net/fErZY
You can use a wrapper
div
on theiframe
to specify where you want it's sides to be (top:73px; left:0; right:0; bottom:0;
) with the help ofposition:absolute
.HTML:
CSS:
Demo: jsfiddle.net/fErZY
有点棘手..大多数解决方案对于主要部分都可以正常工作,但 IE7 不喜欢将
iframe
设置为 100% 高而其父级没有明确的高度(以像素为单位,而不是百分比) - 所以我的解决方案是绝对定位容器
,这样你就可以获得所需的73px顶部和0底部坐标 - 那么它应该像设置#friend_pane
一样简单分区到 100% 高度,然后将iframe
变为 100%.. 但这是 IE7 不喜欢的.. 所以添加position:absolute; right: 0;
也适用于friend_pane
div,以及 100% 高度 - 然后使 IE7 也将 100% 高度应用到 iframe。存在泄漏(小?),如果这就是您在评论中提到的内容,那与 iframes 自然框模型有关,但我发现在上设置负底部边距
-4px
iframe 抵消了你的代码;从
.container
#friend_pane
和 iframe#friendpane_area
中删除所有内联样式并添加这些样式:
以下是使用页面代码的演示:
JSBin HERE
注意:
overflow:hidden;
在#friend_pane div
上而不是iframe
上的负4px边距也可以解决“泄漏”问题,并在答案..
您可以看到一个简化的演示:
JSBin Here
A bit tricky.. and most solutions work OK for the main part but IE7 doesn't like when a
iframe
is set to 100% tall without it's parent having an explicit height (in px, not percent) - so my solution is to absolutely position thecontainer
so you get the 73px top and 0 bottom co-ordinate you need - then it should be as simple as setting the#friend_pane
div to 100% height, and then subsequently theiframe
to 100%.. but that's the bit IE7 doesn't like.. so addingposition: absolute; right: 0;
also to thefriend_pane
div, along with the 100% height - then makes IE7 apply the 100% height to the iframe too.There is leakage (small?), if that's what you've been referring to in your comments, that is to do with the iframes natural box model, but I found setting a negative bottom margin
-4px
on the iframe counteracts thatSo with your code; remove all inline styles from
.container
#friend_pane
and the iframe#friendpane_area
and add these styles:
Here's a demo of this with your page code:
JSBin HERE
Note:
overflow:hidden;
on the#friend_pane div
instead of the negative 4px margin on theiframe
will also cure the "leakage"and to keep some general code in the answer.. a simplified demo
which you can see:
JSBin Here
您可以将
iframe
包装在div
中,并使用top:73px
设置 div 的position:fixed
,然后使用>right
、bottom
和left
设置为 0,以便 div 填充 73px 标题下方的剩余空间。设置包装器后,您可以将 iframe 的高度和宽度指定为 100%。示例: http://jsfiddle.net/pxfunc/KTwxb/
HTML:
CSS:
You can wrap your
iframe
in adiv
and set the div'sposition:fixed
withtop:73px
thenright
,bottom
, andleft
set to 0 so the div fills remaining space below your 73px header. Once your wrapper is set you can specify height and width to 100% for your iframe.example: http://jsfiddle.net/pxfunc/KTwxb/
HTML:
CSS:
这是一个例子。我能够隐藏滚动条的唯一方法是将 iframe 的 html 溢出属性设置为隐藏。
http://jsfiddle.net/nERqu/
HTML:
CSS:
Here is an example. Only way I was able to hide the scroll bar was to set the iframe's html overflow property to hidden.
http://jsfiddle.net/nERqu/
HTML:
CSS:
看起来 iframe 被视为绝对定位元素,无论您是否实际在 css 中指定它。如果它的容器是绝对定位的,它应该能够使用 width:100% 和 height:100% 填充容器。
换句话说,如果我的理论是正确的,则 iframe 不会“正确”调整大小,因为它正在搜索定位(即相对、绝对、只是非静态)父元素。它需要弄清楚如何调整其大小,并且最接近的abs pos元素是浏览器查看区域本身。屏幕的 100% 高度通常会填满屏幕高度,但 iframe 向下定位 73 像素,从而使其溢出 73 像素。
稍微尝试一下,这应该是朝着正确方向迈出的一步:
It seems like iframe is being treated as an absolutely positioned element whether or not you actually specify that in the css. If its container is absolutely positioned, it should be able to fill the container using width:100% and height:100%.
In other words, if my theory is correct, the iframe isn't sizing "correctly" because it is searching for a positioned (i.e. relative, absolute, just not static) parent element. It needs to figure out how to adjust its size and the closest abs pos element is the browser viewing area itself. 100% height of the screen would normally fill the screen height, but the iframe is positioned down 73px, thus making it overflow by 73px.
Play with this a bit, it should be a nice step in the right direction: