【问题标题】:Vertically centering a text within a dynamically created div issue在动态创建的 div 问题中垂直居中文本
【发布时间】:2014-03-03 16:57:01
【问题描述】:

正在创建一个用于动态添加学生和教师的简单应用。

点击时动态添加 div。

我已将“userListUnit”类添加到该 div。

这是JS

 SchoolAdmission.prototype.display = function(nameButton) {
        var print = document.createElement("div");
        print.className = "userListUnit";
        print.innerHTML = "Name: " + this.name + ", age:" + this.age + ", depart: " + this.department + "<br><br><br>";
        if (nameButton === "addStudent") {
            document.getElementById('studentList').appendChild(print);
        }
        else {
            document.getElementById('teacherList').appendChild(print);
        }
        clearFields();
    };

这是CSS

.userListUnit{
    vertical-align: middle;
    border: 1px solid;
    text-align: center;
    line-height: 10px;  
    box-shadow: 5px 5px 5px #888888;
    margin-bottom: 2em;
}

我的小提琴http://jsfiddle.net/LPu9x/7/

尝试添加一个学生或老师并检查文本在动态创建的div中的位置,然后你就会明白它的不是垂直居中强>。 Any1 有什么想法可以解决这个问题吗?

条件:

1) 无位置:绝对。

2) 创建的 Div 仍应一个接一个。

更新小提琴解决方案http://jsfiddle.net/LPu9x/8/

【问题讨论】:

  • display: table-cell;this怎么样?
  • 我试过了...这些块出现在右侧,而不是一个接一个地出现在下方。
  • 使用display: table;width: 100%包装块
  • 该块现在一个接一个地低于 1,但文本没有垂直居中对齐。
  • display: table-cell; 上使用vertical-align; 而不是在display: table;

标签: javascript html css


【解决方案1】:

试试这个:

.userListUnit 
{
    vertical-align: middle;
    border: 1px solid;
    text-align: center;
    line-height: 15px;
    box-shadow: 5px 5px 5px #888;
    margin-bottom: 2em;
    padding-top: 5px;
    height: 30px;
}

如果你想调整它,只需修改 line-height...

看看here

【讨论】:

  • 我犯了什么错误?
  • 好吧,你没有设置高度......所以行高是“混淆”:))
  • @NevinMadhukarK:没有错,这个答案是“半作弊”,将框设置为30px 的固定高度并添加5px 的顶部填充。这是“硬编码”,给人一种居中文本的错觉。这不是真正的垂直对齐,因为vertical-align 属性与此无关:) 这不是动态解决方案,对行高或高度的更改也需要在填充上进行调整。虽然,..what ever works +1 for get it to work in this set scenario :)
  • @FrançoisWahl 是的,是的。但是还有其他解决方案吗?像一个动态的..?
  • @NevinMadhukarK:如果你想使用vertical-align 属性来动态执行它,我认为(但不是100% 确定)你需要在div 元素中使用position 更改我认为这不是您想要的,有关详细信息,请参阅我在 cmets 中链接的有关该问题的文章。考虑到您的具体情况/条件,这个答案很可能是最好的。
【解决方案2】:

如果将块元素 div 更改为内联元素 p 不是问题,您可以这样做,vertical-align 将按预期工作。当然,还要删除任何嵌套的 br 标签,因为应该使用 CSS,即:填充/边距。

如果您可以将标签更改为p,您的脚本将如下所示:

SchoolAdmission.prototype.display = function(nameButton) {
    var print = document.createElement("p"); // p tag now
    print.className = "userListUnit";
    print.innerHTML = "Name: " + this.name + ", age:" + this.age + ", depart: " + this.department;
    if (nameButton === "addStudent") {
        document.getElementById('studentList').appendChild(print);
    }
    else {
        document.getElementById('teacherList').appendChild(print);
    }
    clearFields();
};

将 CSS 行高更改为更大的值,例如 30px(因为我们要删除上面的 br 标签:

.userListUnit{
    vertical-align: middle;
    border: 1px solid;
    text-align: center;
    line-height: 30px;  
    box-shadow: 5px 5px 5px #888888;
    margin-bottom: 2em;
}

就是这样。您现在只需更改 line-height 属性,文本将始终保持垂直对齐。


DEMO - 使用带有垂直对齐的内联标签


【讨论】:

  • @NevinMadhukarK:这或使用两者或position / table-cell 属性更改。这是因为div 是一个块元素,vertical-align 属性适用于in-line leveltable-cell 元素。根据W3C docsThe vertical-align property affects the vertical positioning inside a line box of the boxes generated by an inline-level element.
猜你喜欢
  • 2014-09-18
  • 2013-02-01
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多