html - CSS – 标题显示 : table element – positioning issue

标签 html css

在创建 HTML 布局时,我注意到一些我无法解决的奇怪定位问题。

采用以下 HTML:

<div class="outer-wrap">
<div class="header">
    I am a Header
</div>
<div class="element">
    Hello world
</div>

并结合这段 CSS 代码:

@import "https://cdnjs.cloudflare.com/ajax/libs/normalize/3.0.2/normalize.css";

html, body { height: 100%; }

.outer-wrap {
    width: 100%;
    height: 100%;
    display: table;
    background: grey;
}

.element {
    display: table-cell;
    vertical-align: middle;
    background: blue;
}

.header {
    position: absolute;
    background: red;
}

Fiddle

如您所见,我已将包装器设置为 display: table,这使我能够通过设置 display: table-cellvertical-align: middle.

现在,当我尝试添加标题时,奇怪的事情开始发生。

首先,我必须在标题上声明position: absolute,否则标题会水平推开.element。我不知道为什么会发生这种情况,但我理解为什么此修复有效:因为 position: absolute 使事情“脱离流程”。

但是如果我看一下 Fiddle,您会注意到左侧有一个小间隙,它暴露了 .outer-wrap 上定义的灰色背景颜色:

enter image description here

造成这种差距的原因是什么?如何解决?
为什么我必须在 header 上使用绝对定位才能使其扩展到整个容器宽度?

最佳答案

造成这种情况的关键原因是您没有定义表格单元格 div 并且不会是 100% 宽并且您看到它向右移动看到灰色边框颜色,这是外包装 div 的背景。所以,在使用display:table-cell;时需要定义width:100%;才能正确显示。

更改的 CSS:

.outer-wrap {
    width: 100%;
    height: 100%;
    display: table;
    background: grey;
}

.element {
    display: table-cell;
    vertical-align: middle;
    background: blue;
    width: 100%;/*explicitly define width to be 100%*/
}

.header {
    position: absolute;
    background: red;
    z-index: 1;/*to make it display in front*/
}

Fixed fiddle

关于html - CSS – 标题显示 : table element – positioning issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28074600/

相关文章:

html - 100 % 高度 - 带标题的相对 div

javascript - 是否可以从 JavaScript 生成 html?

javascript - Jquery 表单与选择器中的自适应表

PHP/MySQL "Quiz"游戏 - 表单输入值

javascript - 不在 HTML 标签上滚动,但在内容上滚动 Y

JavaScript 到 .csv 下载失败 : "Failed. No File"

html - 多级下拉菜单不会向右移动

javascript - 确定规则 : relate integer value to color #RGB

javascript - 悬停在按钮上后圈出跟随光标

jquery - 可点击链接中的整行未在新选项卡中打开