Bootstrap 3 中的垂直对齐字形

2024-02-14

我有一个这样的字形:

<div class="col-xs-4 col-sm-2">
    <span class="glyphicon glyphicon-circle-arrow-up glyphicon-large"></span>
</div>
.glyphicon-large {
    min-height: 260px;
    font-size: 35px;
    width: 1em;
    display: block;
    top: 50%;
    margin: -0.5em auto 0px;
}

字形图标不会与中心垂直对齐。当我打开 Firefox、检查元素并关闭/打开top 50%规则,它突然起作用了。怎么会?


浏览器错误说明

根据MDN on top https://developer.mozilla.org/en-US/docs/Web/CSS/top:

For 相对定位的元素(那些有position: relative), it 指定元素移动到其正常位置以下的量.
Note:百分比应用为元素包含块的高度的百分比

根据W3 on top http://www.w3.org/TR/CSS2/visuren.html#propdef-top:

For 相对定位盒子,偏移量是相对于盒子本身的顶部边缘的(即,盒子在正常流中被赋予一个位置,然后根据这些属性从该位置偏移)。Note:百分比指的是包含块的高度

这是我的猜测:

我认为正在发生的事情是当浏览器首先渲染视觉树 http://taligarsiel.com/Projects/howbrowserswork1.htm,并看到top:50%;,它会要求父级设置高度。由于没有专门应用高度,并且没有加载任何子内容,因此该 div(以及所有 div)的高度有效从零开始除非另有说明。然后它将字形下推零的 50%。

当您稍后切换属性时,浏览器已经渲染了所有内容,因此父容器的计算高度由其子容器的高度提供。

最小、完整且可验证的示例

Note:这与 Bootstrap 或 Glyphicons 没有任何关系。为了避免对引导程序的依赖,我们将添加top: 1px这将由.glyphicon班级。即使它被覆盖50%,至今仍发挥着重要作用。

这是一组简单的父/子元素:

<div id="container">
    <div id="child">Child</div>
</div>

为了以更可重复的方式模拟切换属性,我们只需等待两秒钟,然后在 JavaScript 中应用样式,如下所示:

window.setTimeout(function() {
    document.getElementById("child").style.top = '50%';
},2000);

示例1(jsFiddle http://jsfiddle.net/KyleMit/tu9mpyeg/)

作为起点,让我们重新创建您的问题。

#container {
    position: relative;
    
    /* For Visual Effects */
    border: 1px solid grey;
}
#child {
    position: relative;
    height: 50px;
    top: 1px;
    
    /* For Visual Effects */
    border: 1px solid orange;
    width: 50px;
    margin: 0px auto;
    
}

请注意,一旦您调整窗口大小,浏览器就会重新绘制屏幕并将元素移回顶部。

示例2(jsFiddle http://jsfiddle.net/KyleMit/tu9mpyeg/11/)

如果你添加top: 50%对于子元素,当 javascript 添加属性时不会发生任何事情,因为它没有任何内容可以覆盖。

示例3(jsFiddle http://jsfiddle.net/KyleMit/tu9mpyeg/12/)

如果你添加top: 49%到子元素,那么 DOM 确实有一些东西需要更新,所以我们会再次遇到奇怪的故障。

实施例4(jsFiddle http://jsfiddle.net/KyleMit/tu9mpyeg/14/)

如果你添加height: 50px;到容器而不是孩子,然后top属性从一开始就需要定位,并且您不需要在 JavaScript 中使用切换。


如何垂直对齐

如果您只是想知道如何使某些内容一致地垂直居中,那么您可以执行以下操作:

垂直居中文本的技巧是设置line-height https://developer.mozilla.org/en-US/docs/Web/CSS/line-height等于容器高度。如果一行占用 100 个像素,而在线文本行占用 10 个像素,那么浏览器将尝试将文本在剩余的 90 个像素内居中,顶部和底部各 45 个像素。

.glyphicon-large {
    min-height:  260px;
    line-height: 260px;
}

jsFiddle中的解决方案 http://jsfiddle.net/KyleMit/Z9ZFr/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bootstrap 3 中的垂直对齐字形 的相关文章

  • CSS使背景图像使用字体字符

    我想使用字体字符 例如来自 font awesome 作为输入元素的背景图像
  • 如何将 div 与其父级的顶部对齐,但保持其内联块行为?

    See http jsfiddle net b2BpB 1 http jsfiddle net b2BpB 1 问 如何让box1和box3对齐到父div的顶部boxContainer boxContainerContainer backg
  • 为什么网格项目不居中?

    由于某种原因 两个输入范围使网格中的前两项偏离中心 我假设这是因为它们的影子 DOM 样式 事实真的是这样吗 有谁知道为什么范围使项目 A 和 B 偏离中心 这是一个代码笔 https codepen io tOkyO1 pen QOeKL
  • 在流体设计中将元素的宽度调整为其高度的百分比,反之亦然? [复制]

    这个问题在这里已经有答案了 我正在制作响应式设计 无论屏幕尺寸是什么 它都必须保持其元素的比例 高度与宽度 所以我不知道任何元素的像素大小 并且我只能以 工作 我可以将宽度或高度设置为浏览器大小的百分比 但我不知道如何设置其他属性值 仅使用
  • 宽度:适合内容;在 Chrome 上工作,但在资源管理器上不工作

    我构建了一个应用程序 所有内容都在 Chrome 中完美显示 但如果我在 Windows 资源管理器中打开该应用程序 容器会比应有的小 我在用着width fit content 这是只适用于 Chrome 的东西吗 我怎样才能使其适用于所
  • GWT 主题/模板 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 GWT 开发一个应用程序 尽管 GWT 是基于 JAVA 的媒介 但外观和感觉只能通过 CS
  • Twitter bootstrap 3表单水平和单行多个输入列

    我需要将多列输入放在单行中 如下所示 我通过将多个输入分组为一个来做到这一点form group 但是这样我不能使用has error class div class form group div
  • 在 Bootstrap 中使用 CakePHP 时如何修改包装器 div 错误类

    我在用着Bootstrap 3 0RC1 with CakePHP 2 3 6 尝试利用那些漂亮的课程 例如has error and has warning for 验证状态 http getbootstrap com css forms
  • 水平对齐输入字段

    我正在尝试获取一个输入字段 并且它与同一水平线上的关联提交按钮相关 但事实证明这是一个挑战 这是我的代码
  • 固定宽度可变高度网格CSS

    我们如何在网格布局中实现固定宽度和可变高度 就像www pinterest com http www pinterest com主页布局 我认为他们正在使用 Javascript 只是想知道是否还有其他方法 只需使用float left不管
  • 我的 CSS 未在 Internet Explorer 11 和 Firefox 中加载!仅适用于 Chrome

    我正在创建一个简单的网页 我的 CSS 只能在 Chrome 中使用 它在 Firefox 和 IE11 中都不起作用 这是我的 HTML h1 b u Adding a new Visitor u b h1 br div class wr
  • 设置浏览器窗口最小化的最小尺寸限制?

    有没有办法在所有浏览器中手动设置浏览器窗口的最小尺寸 你可以试试 body min width 600px 一旦视口小于 600 像素 您将得到一个水平滚动条 这仅适用于支持 min width CSS 属性的现代浏览器 我认为不可能限制用
  • 使用 CSS 自定义字体?

    我见过一些在其网站上使用自定义字体的新网站 除了常规的 Arial Tahoma 等 他们支持大量的浏览器 如何做到这一点 同时 如果可能的话 还会阻止人们免费下载该字体 一般来说 您可以使用自定义字体 font face在你的 CSS 中
  • CSS设置默认滚动位置

    有没有办法将滚动位置设置为默认值 我知道如何在 javascript 中做到这一点 例如使用 jquery div divWithScroll attr scrollTop 200 但我只想用CSS来做 我不知道是否可行 不 CSS 中没有
  • Textmate“注释”命令对于 css 代码无法正常工作

    当我在 TextMate 中切换 CSS 源代码的注释时遇到一些问题 Using the shortcut CMD I activate the Comment Line Selection command from the source
  • 如何并排放置两个

    我有两个 div 我想要并排放置的元素 如下所示 navigation content 我想要导航 div 根据需要尽可能大 但不能更大 收缩以适应行为 内容 div 然后应该填充剩余的空间 如何在不指定百分比 例如 20 80 的情况下使
  • Twitter 嵌入时间轴小部件

    我继续下载http platform twitter com widgets js http platform twitter com widgets js And the http platform twitter com embed t
  • 为什么“tbody”不设置表格的背景颜色?

    我在用 tbody 作为 CSS 选择器来设置background color在一个表中 我这样做是因为我有多个 tbody 表内的部分 它们具有不同的背景颜色 我的问题是 当使用border radius在细胞上 细胞不尊重backgro
  • 悬停时为 SVG 制作动画

    我正在尝试在悬停时为 SVG 文件设置动画 默认情况下 它可以使用 svg 函数实现出色的动画效果 例如
  • 带显示块的SPAN

    和默认有什么区别 div 元素和默认值 span 元素与display block HTML 元素的有效性和语义存在差异 否则它们是相同的 div and span两者都被定义为通用容器 在 HTML 方面没有更深层次的含义 一个默认为块显

随机推荐