css - 固定元素行为不如预期
问题描述
我有一个固定元素“定位”的情况 - 在某种程度上 - 相对于父容器而不是浏览器窗口......
.container {
position: relative;
width: 640px;
margin: 0 auto;
}
.options {
position: fixed;
bottom: 0;
width: 100%;
}
.options button {
float: left;
box-sizing: border-box;
width: 25%;
}
<div class="container">
<div class="options">
<button>1</button>
<button>2</button>
<button>3</button>
<button>4</button>
</div>
</div>
包含按钮的 div 是固定的,底部偏移设置为 0。但是 div 偏移了一定距离,并且从与父容器相同的水平距离开始。现在,一旦我将左偏移值设置为“0”,元素就会按预期定位自身,从视口的边缘开始。所以我知道这实际上并不是相对于父容器定位的。但为什么最初会有一个偏移量?我猜默认的“自动”设置会将左值计算为零以外的值。但是这个值是如何计算的呢?
此外,当值是 100% 与继承时,如何计算宽度值会产生另一个混淆点。我抬头发现两者之间的区别在于,虽然 'width: 100%' 将宽度设置为父元素计算值的 100%,但 'width:inherit' 从字面上占用了父元素的 CSS 值并且将其应用于元素。因此,在我上面分享的示例中,虽然前者会将包含按钮的 div 的宽度设置为其自身父级计算宽度的 100%,但后者会将宽度设置为“640px”,这是父级的CSS 值。我遇到的问题是,在第一种情况下,宽度以百分比设置,元素比预期的要宽。计算的宽度似乎是根据视口宽度计算的,即视口的 100%,
如果'width:inherit'从父元素获取640px的宽度,那么为什么宽度设置为100%时继承自视口的宽度,而不是父元素的计算值。为什么在一种情况下,前面的容器被认为是继承值的父级,而在另一种情况下,视口是计算值的父级?
解决方案
body
默认情况下有一个填充。您可以添加padding: 0
以使您的固定元素尽可能向左移动,或添加left: 0
到您的固定.options
元素。您不应该使用固定宽度(640 像素),因为您应该在编码时考虑到响应性。
你不应该在布局中使用浮动,因为它会弄乱对象的盒子大小。如果您希望文本在图像周围“浮动”,请仅在图像上使用它。
html, body { /* ADDED */
margin: 0;
padding: 0;
}
.container {
position: relative;
width: 100%; /* CHANGED */
margin: 0 auto;
/* ADDED */
min-width: 640px;
}
.options {
position: fixed;
bottom: 0;
width: 100%;
/*left: 0; if you don't want to change the padding for the body */
/* ADDED */
display: flex;
}
.options button {
/*float: left;*/
box-sizing: border-box;
/* width: 25%; */
/* ADDED */
flex: 1 1 auto; /* grow / shrink / auto-adjust in width */
}
<div class="container">
<div class="options">
<button>1</button>
<button>2</button>
<button>3</button>
<button>4</button>
</div>
</div>
推荐阅读
- microsoft-graph-api - Microsoft Graph API 创建包含自定义元数据列的文件夹
- javascript - 新反应无法启动服务器收到错误消息知道吗?
- vue.js - 如何在 vuejs 中重新挂载子组件
- xamarin.ios - 如何在 xamarin.forms iOS 中配置 WkWebView?
- python - Python randint 生成具有相同位数的数字
- vba - 变体和 if 语句 - VBA
- java - 提交从数据库中提供数据的搜索表单后如何解析 Html
- flutter - Dart 中的日期格式,包括 GMT
- javascript - 如何使用 d3.js 在画布中移动元素时减少延迟
- java - 如何以最优雅的方式找到具有最大价值的对象?