- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 header 中观察到 CSS position : absolute
的一个奇怪的事情是,除非下面的菜单中有一个 float:left
,否则菜单的文本不会居中垂直并保持在顶部。您可以通过全宽运行本页中给出的代码片段来查看这一点。我已经为 float:none in lower screen width
设置了一个媒体查询,它取消了在较高屏幕宽度中的 float:left
。
现在,为什么会出现这种行为?为什么 float:left 在 position:absolute 应用于 header 时保持菜单文本垂直居中,反之亦然?我在搜索时没有找到任何关于此的内容。
编辑-
一些答案说这是由于边距“崩溃”而发生的。但他们没有解释为什么 h1 of header
没有“崩溃”并且以这种方式表现?为什么只有 h1 of menu
是“折叠”的?它似乎更像是一些元素的选择重叠而不是折叠。
编辑2-
请回答者,如果他们为了解释方便而想分解片段,除了片段的部分之外,他们还应该在他们的答案中提供完整的片段或其修改。因为 div 不是孤立的。答案应该有带有 position: absolute 的标题,它的 h1 和 margin-top 应用于标题下方 div 的 h1。
请看这个片段-
div.header {
position: absolute;
left: 0%;
top: 0%;
width: 100%;
height: auto;
text-align: center;
color: #EE82EE;
background-color: #000000;
}
.submenu {
text-align: center;
width:100%;
margin:0;
margin-top: 72px;
color:black;
height: 100px;
background-color: red;
float: left;
padding:0px;
}
@media screen and (max-width: 766px){
.submenu {
float:none;
}
}
<div class="header">
<h1>HEADER </h1>
</div>
<div class="submenu">
<h1>MENU</h1>
</div>
最佳答案
编辑:
正如我在评论中解释的那样,标题中的 h1
不会折叠,因为它使用了 position:absolute
- 正如您在下面看到的那样,它是一个防止边距崩溃的修复程序。重叠只是因为您的标题是绝对定位的,所以它会出现在页面中其他所有内容的顶部。
概括地说,折叠边距发生在垂直边距接触 block 元素时没有分隔它们(例如边框或填充)未 float 、未绝对定位、未固定并且溢出:可见
(默认值)。还有一些其他情况,但这涵盖了绝大多数原因,包括您的原因。
回答
您看到的是收缩边距的效果。
CSS 规范规定,当两个元素的垂直边距接触时,两个边距将合并为一个边距。
当第一个(或最后一个)子元素与父元素之间没有分隔时,父/子元素也会发生这种情况 - 在这种情况下,折叠的边距最终位于父元素之外。
在您的情况下,您的h1
具有浏览器样式表的默认边距。这是折叠到其父级的边距中,即默认情况下 submenu
元素,因为它是 block 元素。
防止 margin 折叠:
有很多方法可以防止 child 的 margin 折叠,包括:
溢出:自动
当您将 float
添加到您的 child 时,这是防止边距折叠的方法之一,因此您的 h1 顶部的边距仍然有空间,其中包含“菜单”这个词。
查看一些示例:
.submenu {
text-align: center;
width:100%;
margin:0;
margin-top: 0px;
color:black;
height: 100px;
background-color: red;
float: none;
padding:0px;
}
.container { border:2px solid #ff0;}
.container:after {
content: "";
display: table;
clear: both;
}
h1{ margin:30px 0;}
.submenu.hasfloat {float: left;}
.submenu.hasoverflow {overflow: auto;}
<p>The top margin of this h1 is collapsed into the parent's margin. </p><p>The parent's top margin is 10px, and the h1 has a top margin of 30px, so when collapsed the parent now takes on the child's margin because it is larger - you can see the margin surrounded with the yellow border:</p>
<div class="container">
<div class="submenu">
<h1>Collapsed</h1>
</div>
</div>
<p>The top margin of this h1 isn't collapsing because the parent is <b>floated</b>:</p>
<div class="container">
<div class="submenu hasfloat">
<h1>Not collapsed</h1>
</div>
</div>
<p>The top margin of this h1 isn't collapsing because the parent has <b>overflow:auto</b> (i.e. any value other than visible):</p>
<div class="container">
<div class="submenu hasoverflow">
<h1>Not collapsed</h1>
</div>
</div>
示例:显示即使标题未绝对定位,问题仍然存在。
div.header {
position: relative;
left: 0%;
top: 0%;
width: 100%;
height: auto;
text-align: center;
color: #EE82EE;
background-color: #000000;
}
.submenu {
text-align: center;
width:100%;
margin:0;
margin-top: 72px;
color:black;
height: 100px;
background-color: red;
float: left;
padding:0px;
}
@media screen and (max-width: 766px){
.submenu {
float:none;
}
}
<div class="header">
<h1>HEADER <small>- position:relative</small></h1>
</div>
<div class="submenu">
<h1>MENU <small>- top margin is still collapsing</small></h1>
</div>
引用资料:从以下位置阅读有关折叠边距的更多信息:
关于css - 为什么 float :left required in navigation to keep text center when position:absolute applied to header?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46891224/
这个问题在这里已经有了答案: Flexbox: Align between bottom and center? [duplicate] (2 个答案) 关闭 6 年前。 我正在尝试使用 flexb
用于居中元素的标签是 或 ? 我知道 或 标签不再使用,但哪一个是正确的? 我很迷惑。 Visual Studio 代码说 错了,但只有适用于 Microsoft Edge。 编辑:Microsof
我使用的是标准匹配用户界面和两台 iPad iOS6。问题是当我在第一台设备中创建新的匹配项时,第二台设备应该在我查看匹配用户界面时看到现有的匹配项,但事实并非如此。我确定我的代码是正确的。这是方法:
在我的项目的两个不同的类(都扩展 JFrame)中,我尝试这样做: header = new JLabel("Header"); header.setHorizontalAlignme
我已经在我的网站中实现了以下 jQuery 视差效果(取自 http://www.brandaiddesignco.com/insights/parallax-scrolling-made-easy/
每当我在我的 css 中居中文本时,它也会使图像居中。这是为什么?文本位于一个 div(“左”)内,图像位于第二个 div(“右”)内。这是 HTML - BANKS 还有
我现在有这段代码: 1 enE jk 5.6 mtE hp 6.4 hpE eb HML reE pm 514 hpE e
我只是制作一个页面或类似的东西。我想让我的按钮居中,但它不起作用。 我尝试用不同的方法将它居中,但它不起作用。看看代码。它有但它并没有将它置于整个页面的中心但只是喜欢......我不知道。照片:htt
我想知道如何将此页面中的字形居中,它们是使用@font-face 的图标字体,但即使在我将 text-align:center 应用于包含每个字形的 anchor 之后,它们也不是居中。 它们显示为左
考虑以下 HTML 片段, Hyperlink 如上所示,由于“...”标签,所有内容都将居中对齐。但是,我不希望带有“id=three”的 HTML 元素的中心对齐
我有以下 html: Site Map Privacy Policy Terms & Condi
我在将我正在处理的布局中的按钮上的文本居中时遇到问题。请查看下面的屏幕截图(在 eclipse 的“图形布局”选项卡中截取): 我不确定是什么原因造成的。我试着玩弄按钮的各个布局属性,但这没有任何效果
我正在尝试使用 Bootstrap 组装页脚。由于某些原因,尽管确保应用了 text-align: center;,但页脚链接看起来略微偏离中心。有没有办法确保所有文本元素确实正确对齐? HTML
我在使用 flexbox 工具 align-items:center; 时遇到了问题,它在中间并不完美,但文本、图标等的像素太高了……有人知道如何解决这个问题? screenshot how it l
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and t
GameKit 是否允许您以编程方式邀请特定的 Game Center friend 参加比赛,即不提供 GC ViewController?以下 handleInviteFromGameCenter
我有一个布局问题。 假设我有一个 RelativeLayout 出现在我的屏幕底部。在此,我想添加 2 个 TextView ,一个在中心,一个在顶部中心,一个在底部中心。 |------------
我有一个启动画面的 Activity layout.xml,它基本上显示了我想要的内容。但是如果我在更大或更小的屏幕设备上打开应用程序,它就不再居中了。 有没有办法在元素周围放置一个包装器并将其在屏幕
尝试了几十种方法后,我自己也想不出解决方案 #banner .slide { position: static; top: 0px; left: 0px; z-inde
您将如何修复以下传递过多参数的错误代码? void helper1(int p1, int p3, int p5, int p7, int p9, int p10) { // ... } void
我是一名优秀的程序员,十分优秀!