将固定div设置为父容器的100%宽度

时间:2013-07-23 09:50:32

标签: html css

我有一个带有一些填充的包装器,然后我有一个浮动的相对div,其百分比宽度(40%)。

在浮动相对div中,我有一个固定的div,我希望它的大小与其父级相同。我知道固定div从文档流中删除,因此忽略了包装器的填充。

HTML

<div id="wrapper">
  <div id="wrap">
    Some relative item placed item
    <div id="fixed"></div>
  </div>
</div>

CSS

body { 
  height: 20000px 
}  
#wrapper {
  padding: 10%;
}  
#wrap { 
  float: left;
  position: relative;
  width: 40%; 
  background: #ccc; 
} 
#fixed { 
  position: fixed;
  width: inherit;
  padding: 0px;
  height: 10px;
  background-color: #333;
}

这是必须的小提琴:http://jsfiddle.net/C93mk/489/

有谁知道如何实现这个目标?

我已经修改了小提琴,以显示我想要完成的更多细节,对于这种混淆感到抱歉: http://jsfiddle.net/EVYRE/4/

7 个答案:

答案 0 :(得分:40)

你可以使用.wrap容器的margin而不是.wrapper:

的填充
body{ height:20000px }
#wrapper { padding: 0%; }
#wrap{ 
    float: left;
    position: relative;
    margin: 10%;
    width: 40%; 
    background:#ccc; 
}
#fixed{ 
    position:fixed;
    width:inherit;
    padding:0px; 
    height:10px;
    background-color:#333;    
}

jsfiddle

答案 1 :(得分:2)

this怎么样?

$( document ).ready(function() {
    $('#fixed').width($('#wrap').width());
});

通过使用jquery,您可以设置任何类型的宽度:)

编辑:正如评论中的梦所说,使用JQuery只是为了这种效果是毫无意义的,甚至反效果。我为那些在其页面上使用JQuery用于其他内容的人制作了这个示例,并考虑将其用于此部分。对于我的回答造成的任何不便,我们深表歉意。

答案 2 :(得分:2)

尝试向父级添加转换(不必执行任何操作,可以是零转换)并将固定子级的宽度设置为100%

body{ height:20000px }
#wrapper {padding:10%;}
#wrap{ 
    float: left;
    position: relative;
    width: 40%; 
    background:#ccc; 
    transform: translate(0, 0);
}
#fixed{ 
    position:fixed;
    width:100%;
    padding:0px;
    height:10px;
    background-color:#333;
}
<div id="wrapper">
    <div id="wrap">
    Some relative item placed item
    <div id="fixed"></div>
    </div>
</div>

答案 3 :(得分:1)

您可以使用绝对定位将页脚固定到父div的基础。我还在包装中添加了10px padding-bottom(匹配页脚的高度)。绝对定位是相对于父div而不是流的外部,因为你已经给它了位置相对属性。

body{ height:20000px }
#wrapper {padding:10%;}
#wrap{ 
    float: left;
    padding-bottom: 10px;
    position: relative;
    width: 40%; 
    background:#ccc; 
}
#fixed{ 
    position:absolute;
    width:100%;
    left: 0;
    bottom: 0;
    padding:0px;
    height:10px;
    background-color:#333;

}

http://jsfiddle.net/C93mk/497/

答案 4 :(得分:1)

man你的容器是父元素宽度的40%

但是当你使用position:fixed时,宽度基于视口(文档)宽度...

考虑一下,我意识到你的父元素有10%的填充(左右),这意味着你的元素占总页面宽度的80%。所以你的固定元素必须有40%,基于总宽度的80%

因此您只需将#fixed类更改为

即可
#fixed{ 
    position:fixed;
    width: calc(80% * 0.4);
    height:10px;
    background-color:#333;
}

如果使用sass,postcss或其他css编译器,则可以使用变量来避免在更改父元素的填充值时破坏布局。

这里是更新的小提琴http://jsfiddle.net/C93mk/2343/

我希望它有所帮助,问候

答案 5 :(得分:0)

在你最新的jsfiddle之上,你错过了一件事:

#sidebar_wrap {
  width:40%;
  height:200px;
  background:green;
  float:right;
}
#sidebar {
  width:inherit;
  margin-top:10px;
  background-color:limegreen;
  position:fixed;
  max-width: 240px; /*This is you missed*/
}

但是,这将如何解决您的问题?简单,让我们先解释为什么比预期更大。

固定元素#sidebar将使用窗口宽度大小作为基础来获取自己的大小,就像每个其他固定元素一样,一旦定义此元素width:inherit#sidebar_wrap有40%为宽度值,然后计算window.width * 40%,然后当您的窗口宽度大于.container宽度时,#sidebar将大于#sidebar_wrap

这样,您必须在#sidebar_wrap中设置最大宽度,以防止大于#sidebar_wrap

选中显示有效代码的jsfiddle并更好地解释其工作原理。

答案 6 :(得分:-3)

删除Padding: 10%;或使用 px 代替百分比代替.wrap

查看示例: http://jsfiddle.net/C93mk/493/

HTML:

<div id="wrapper">
    <div id="wrap">
    Some relative item placed item
    <div id="fixed"></div>
    </div>
</div>

<强> CSS:

body{ height:20000px }
#wrapper {padding:10%;}
#wrap{ 
    float: left;
    position: relative;
    width: 200px; 
    background:#ccc; 
}
#fixed{ 
    position:fixed;
    width:inherit;
    padding:0px;
    height:10px;
    background-color:#333;

}