2

我在这里是因为其他类似的问题对我的特定问题没有帮助。

#right div 高度如何达到 100% ?只有css解决方案需要。谢谢。

http://jsfiddle.net/elturko/86nX9/

HTML

<div id="wrap">
 <div id="header"></div>
 <div id="left"></div>
 <div id="right"></div>
 <div id="footer"></div>
</div>

CSS

* {
    margin: 0;
}
html, body {
    height: 100%;
}
#wrap{
    min-height: 100%;
    height: auto !important;
    height: 100%;
    position: relative;
    background:#ddd
}
#header{
    height:104px;
    background:#d5a1b3;
}
#left{
    float:left;
    width:219px;
    background:#a2d025;
}
#right{
    min-height: 100%;
    height: auto !important;
    height: 100%;
    position: relative;
    overflow:hidden;
    background:#FFF;
    margin:0 15px;
    -webkit-border-radius: 7px;
    -moz-border-radius: 7px;
    border-radius: 7px;
    padding:14px;
}
#footer{ 
    clear:both;
    height:15px;
    background:#ed653a;
}

在此处输入图像描述

4

5 回答 5

6

这是 2 个纯 CSS 解决方案

不固定任何高度(页眉/页脚)或宽度(左栏)。

我实际上更喜欢第二种解决方案。(即使他的浏览器支持较少)

1 - 使用 CSS 技巧

这是一个完全响应式设计,适用于所有浏览器(IE10、FF、Chrome、Safari、Opera、移动浏览器)

工作小提琴

HTML:

<div class="Container">
    <div class="Header">
    </div>
    <div class="HeightTaker">
        <div class="Wrapper Container Inverse">
            <div>
                <div class="Footer">
                </div>
            </div>
            <div class="HeightTaker">
                <div class="Wrapper">
                    <div class="LeftMenu">
                    </div>
                    <div class="Content">
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

CSS:

*
{
    margin: 0;
    padding: 0;
}
html, body, .Container
{
    height: 100%;
}
    .Container:before
    {
        content: '';
        height: 100%;
        float: left;
    }
.HeightTaker
{
    position: relative;
    z-index: 1;
}
    .HeightTaker:after
    {
        content: '';
        clear: both;
        display: block;
    }
.Wrapper
{
    position: absolute;
    width: 100%;
    height: 100%;
}
.Inverse, .Inverse > *
{
    -moz-transform: rotateX(180deg);
    -ms-transform: rotateX(180deg);
    -o-transform: rotate(180deg);
    -webkit-transform: rotateX(180deg);
    transform: rotateX(180deg);
}
.LeftMenu
{
    height: 100%;
    float: left;
}
.Content
{
    overflow: auto;
    height: 100%;
}

/*For demonstration only*/
p
{    
    font-size: 1.3em;
}

.Important
{
    font-weight: bolder;
    color: white;
}

body > .Container
{
    text-align: center;
}

.Header
{
    background-color: #bf5b5b;
}
.LeftMenu
{
    background-color:  #bdbe4c;
}

.Content
{
    background-color: #90adc1;
}
.Footer
{
    background-color: #b5a8b7;
}

2 - 使用弹性

这种布局也可以使用 flex 来实现,但是目前浏览器的支持是纯的。这是一个只有FF、Chrome、IE10的工作小提琴。

HTML:(更简单)

<header>
</header>
<section class="Middle">
    <div class="LeftMenu">
    </div>
    <div class="Content">
    </div>
</section>
<footer>
</footer>

CSS:

*
{
    margin: 0;
    padding: 0;
}
html, body
{
    height: 100%;
    text-align: center;
}

body
{
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;

    -webkit-flex-direction: column;
    -ms-flex-direction: column;
    flex-direction: column;
}

.Middle
{    
    -webkit-flex: 1 1 auto;
    -ms-flex: 1 1 auto;
    flex: 1 1 0;

    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;

    overflow: hidden;
}

.Content
{   
    -webkit-flex: 1 1 auto;
    -ms-flex: 1 1 auto;
    flex: 1 0 0;

    overflow: auto;
}

/*For demonstration only*/
p
{    
    font-size: 1.3em;
}

.Important
{
    font-weight: bolder;
    color: white;
}

header
{
    background-color: #bf5b5b;
}
.LeftMenu
{
    background-color:  #bdbe4c;
}

.Content
{
    background-color: #90adc1;
}
footer
{
    background-color: #b5a8b7;
}
于 2013-10-16T21:55:53.967 回答
1

把这个从css中取出来#right{}

margin:0 15px;

这将使其宽 100%。我对 100% 的高度有点困惑。你的意思是宽吗?

于 2013-10-16T20:01:23.257 回答
0

Important 将覆盖其他 CSS 属性,而 auto 将使 div 尽可能大以适应内容。

height: auto !important; 
height: 100%;
于 2013-10-16T20:03:11.277 回答
0

尝试这个:

#right{
    min-height: 100%;
    height: auto !important;
    height: 100%;
    position: relative;
    overflow:hidden;
    background:#FFF;
    margin:0 15px;
    -webkit-border-radius: 7px;
    -moz-border-radius: 7px;
    border-radius: 7px;
    padding:14px;

    top: 0px;
    bottom: 0px;
}

添加top: 0px; bottom: 0px;到您的#rightCSS

于 2013-10-16T20:05:07.980 回答
0

我对您的 html 进行了一些重组。这是你想要的结果吗?

jsfiddle

<div id="container">
<div id="wrap">
    <div id="header">
        header
    </div>

    <div id="body">
        <div id="left">
            left
        </div>

        <div id="right">
            right<br>
            right<br>
            right<br>
            right<br>
            right<br>
        </div>
    </div>

</div>
</div>

<div id="footer">
    <p>footer</p>
</div>

css

html, body {
    height: 100%;
    padding: 0px;
    margin: 0px;
}

#container {
    height: 100%;
    height: auto !important;
    min-height: 100%;
}

#wrap {
    overflow: auto;
    padding-bottom: 16px;
}

#header {
    height: 104px;
    background:#d5a1b3;
    border-bottom: 1px solid #000;
}

#body {
    overflow: hidden;
    height: 100%;
}

#right {
    margin: 0px 0px 0px 220px;
    background:#FFF;
}

#left {
    width: 219px;
    float: left;
    background:#a2d025;
}

#footer {
    background:#ed653a;
    border-top: 1px solid #000;
    position: relative;
    height: 20px;
    margin-top: -21px;
    clear: both;
}
#footer p {
    margin: 0px;
}
于 2013-10-16T21:13:48.293 回答