我试图给div(位置:固定)宽度100%(与它的父div相关)。但是我遇到了一些问题...
编辑: 第一个问题是通过使用继承来解决的,但它仍然不起作用。我认为问题在于我使用了多个占用100%/继承宽度的div。 您可以在jsfiddle更新中找到第二个问题:http://jsfiddle.net/4bGqF/7/
Fox示例
#container {
width: 800px;
}
#fixed {
position: fixed;
width: 100%;
}
和html
<div id="container">
<div id="fixed">Sitename</div>
<p>
blaat
</p>
</div>
或者你可以尝试一下:http://jsfiddle.net/4bGqF/
问题似乎是固定元素总是占用窗口/文档的宽度。有谁知道如何解决这个问题?
我不能给我的固定元素一个固定的,因为我正在使用jScrollPane插件。这取决于内容是否有滚动条。
非常感谢!
PS:2个div的文本在彼此之上。这只是一个例子,所以这并不重要。
答案 0 :(得分:106)
我不确定第二个问题是什么(基于您的修改),但如果您将width:inherit
应用于所有内部div,则可行:http://jsfiddle.net/4bGqF/9/
您可能希望针对需要支持且不支持width:inherit
答案 1 :(得分:18)
许多人评论说,响应式设计通常会将宽度设置为%
width:inherit
将继承 CSS宽度而非计算宽度 - 这意味着子容器会继承width:100%
但是,我认为,几乎同样频繁的响应式设计也设置max-width
,因此:
#container {
width:100%;
max-width:800px;
}
#contained {
position:fixed;
width:inherit;
max-width:inherit;
}
这非常令人满意地解决了我的问题,即粘性菜单被限制在原始父级宽度时会出现问题&#34;卡住&#34;
如果视口小于最大宽度,则父级和子级都将遵循width:100%
。同样,当视口较宽时,两者都将遵循max-width:800px
。
它与我已经响应的主题一起工作,我可以改变父容器,而不必改变固定的子元素 - 优雅和灵活
ps:我个人认为IE6 / 7不使用inherit
答案 2 :(得分:12)
使用此CSS:
#container {
width: 400px;
border: 1px solid red;
}
#fixed {
position: fixed;
width: inherit;
border: 1px solid green;
}
#fixed元素将继承它的父宽度,因此它将是100%。
答案 3 :(得分:10)
您也可以通过jQuery解决它:
var new_width = $('#container').width();
$('#fixed').width(new_width);
这对我很有帮助,因为我的布局很敏感,inherit
解决方案没有和我合作!
答案 4 :(得分:6)
固定定位应该定义与视口相关的所有内容,因此position:fixed
始终会这样做。请尝试在子div上使用position:relative
。
(我意识到你可能出于其他原因需要固定定位,但如果是这样的话 - 你不能真正使宽度与没有inherit
的JS的父级相匹配
答案 5 :(得分:2)
在修复大型应用上的重绘问题时,我们遇到了一些小问题。
在父级上使用-webkit-transform: translateZ(0);
。当然这是针对Chrome的。
http://jsfiddle.net/senica/bCQEa/
-webkit-transform: translateZ(0);
答案 6 :(得分:1)
这是我使用的技巧。
E.g。我有这个HTML:
<div class="head">
<div id="fx">123</div>
</div>
并将#fx
修复为.head,因此解决方法是添加一个额外的div作为#fx
的容器,其位置为:absolute,如下所示:
<div class="head">
<div class="area_for_fix">
<div id="fx">123</div>
</div>
</div>
这是CSS:
.head {
min-width:960px;
width:960px;
nax-width:1400px;
height:300px;
border: 1px solid #000;
position:relative;
margin:0 auto;
margin-top:50px;
padding:20px;
text-align:right;
height:1500px;
}
.area_for_fix {
position:absolute;
right:0;
width:150px;
height:200px;
background-color:red;
}
#fx {
width:150px;
height:75px;
background-color:#ccc;
position:fixed;
}
重要:要为top
设置left
和#fx
,请在.area_for_fix
上设置这些属性。
答案 7 :(得分:0)
有一个简单的解决方案。
我使用父div的固定位置和内容的max-width。
您不需要过多考虑其他容器,因为仅相对于浏览器窗口固定位置。
.fixed{
width:100%;
position:fixed;
height:100px;
background: red;
}
.fixed .content{
max-width: 500px;
background:blue;
margin: 0 auto;
text-align: center;
padding: 20px 0;
}
&#13;
<div class="fixed">
<div class="content">
This is my content
</div>
</div>
&#13;
答案 8 :(得分:0)
此解决方案符合以下条件
据我所知,不幸的是,没有Java语言就无法满足此条件。
此解决方案使用jQuery,但也可以轻松转换为原始JS:
function fixedHeader(){
$(this).width($("#wrapper").width());
$("#header-filler").height($("#header-fixed").outerHeight());
}
$(window).resize(function() {
fixedHeader();
});
fixedHeader();
#header-fixed{
position: fixed;
background-color: white;
top: 0;
}
#header-filler{
width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="wrapper">
<div id="header-fixed">
This is a nifty header! works even when resizing the window causing a line break
</div>
<div id="header-filler"></div>
[start fluff]<br>
a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>
a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>
a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>
[end fluff]
</div>
答案 9 :(得分:0)
固定位置有点棘手(实际上是不可能的),但是位置:粘性可以很好地完成技巧:
<div class='container'>
<header>This is the header</header>
<section>
... long lorem ipsum
</section>
</div>
body {
text-align: center;
}
.container {
text-align: left;
max-width: 30%;
margin: 0 auto;
}
header {
line-height: 2rem;
outline: 1px solid red;
background: #fff;
padding: 1rem;
position: sticky;
top: 0;
}
答案 10 :(得分:0)
您需要提供与fixed元素及其父元素相同的样式。其中一个示例使用最大宽度创建,而另一个示例使用填充。
<form>
<input ... name="something" [(ngModel)]="model.something"`>
</form>
* {
box-sizing: border-box
}
body {
margin: 0;
}
.container {
max-width: 500px;
height: 100px;
width: 100%;
margin-left: auto;
margin-right: auto;
background-color: lightgray;
}
.content {
max-width: 500px;
width: 100%;
position: fixed;
}
h2 {
border: 1px dotted black;
padding: 10px;
}
.container-2 {
height: 100px;
padding-left: 32px;
padding-right: 32px;
margin-top: 10px;
background-color: lightgray;
}
.content-2 {
width: 100%;
position: fixed;
left: 0;
padding-left: 32px;
padding-right: 32px;
}
答案 11 :(得分:0)
对于带有 jquery 的粘性标题,我仍然是 jquery 的学习者,这些 css 设置有效。
header.sticky{
position: fixed;
border-radius: 0px;
max-height: 70px;
z-index: 1000;
width: 100%;
max-width: inherit;
}
header 位于最大宽度为 1024 的包装 div 内。