【问题标题】:How to align an inline-block horizontally and vertically如何水平和垂直对齐内联块
【发布时间】:2014-08-25 15:49:11
【问题描述】:

使用CSS#dates div 与标题的右侧对齐,并在中间垂直对齐,什么是最好/最干净的。

我尝试了float: right,但这不允许vertical-align。我想避免使用浮点数,所以我使用inline-block,并使用相对定位。有没有更正确的做法?

我不喜欢我必须做一个 30px 的顶部,并使用反复试验直到它居中。

<div id="header">
    <a id="logo" href="~/" runat="server">
        <img src="Images/Interface/logo.png" alt="logo" />
    </a>
    <div id="dates">
        <div id="hijri-date">2 Ramadhaan, 1435 AH</div>
        <div id="gregorian-date">Sunday 29 June 2014</div>
    </div>
</div>

#header
{
    background-color: white;
    padding: 15px;
    position: relative;
}

#logo
{
    display: inline-block;
    vertical-align: middle;
}

    #logo img
    {
        vertical-align: bottom; /* to get rid of text descender space underneath image */
    }

#dates
{
    display: inline-block;
    position: absolute;
    right: 30px;
    top: 30px;
    font-size: 14px;
    font-family: 'Open Sans';
    color: #696969;
    background: url(Images/Interface/date-icon.png) no-repeat;
    background-position-y: center;
    padding-left: 32px;
}

【问题讨论】:

    标签: html alignment vertical-alignment css


    【解决方案1】:

    你可以使用 css display:table:

    #header {display:table; width:100%;}
    #logo,
    #dates {display:table-cell; vertical-align:middle}
    

    Example

    如果您希望#dates 向右对齐,您可能需要给它一个宽度

    【讨论】:

    • 单元格是否可以是其内容的宽度而不是 50%?
    • CSS 表格对这个应用程序有好处。在右侧表格单元格中的文本块周围放置一个子包装 div 可能会有所帮助,这样您就可以使用 text-align right,而无需担心表格单元格的确切宽度。
    【解决方案2】:

    使用内联块

    使用您发布的 HTML 元素,尝试以下 CSS:

    #header {
        background-color: yellow;
        padding: 15px;
        text-align: justify;
        line-height: 0;
    }
    #logo {
        display: inline-block;
        vertical-align: middle;
    }
    #logo img {
        vertical-align: bottom; 
            /* to get rid of text descender space underneath image */
    }
    #dates {
        display: inline-block;
        line-height: 1.5;
        font-size: 14px;
        font-family:'Open Sans';
        color: black;
        background-image: url(http://placehold.it/100x100);
        background-position: center;
        padding-left: 32px;
    }
    #header:after {
        content: '';
        display: inline-block;
        vertical-align: top;
        width: 100%;
    }
    

    由于#header 中有两个子元素,一个左徽标图像和一个右文本块,只需使用text-align: justify 将徽标强制在左侧,将文本强制在右侧。

    要使其正常工作,#header 中至少需要两行。

    要生成第二行,请使用伪元素:#header:after,它将在日期之后放置一个 100% 宽的空行内块。 width: 100% 强制它开始并填充第二行,vertical-align: top 删除基线下方的额外空白。

    为了处理高度中的空白,在#header中设置line-height: 0,这将允许伪元素的高度折叠为0。但是,您需要重置#dates中的line-height: 1.5获得清晰的文本。

    优点和缺点

    使用这种方法,随着页面宽度变小,元素最终会换成两行。

    如果您想将元素保持在一行,最好使用 CSS 表格。

    查看演示:http://jsfiddle.net/audetwebdesign/3U3w4/

    【讨论】:

      【解决方案3】:

      我认为,垂直对齐的最佳方式是使用 css:display-tablecss"display-table-cell 属性。如果您想与 id="dates" 中的正确内容对齐,则应在此块内使用 css:display-inline-table

      #header {
          background: #fff;
          padding: 15px;
          background: #ccc;
          display: table;
      }
      #logo {
          display: table-cell;
      }
      #dates {
          display: table-cell;
          text-align: right;
          font-size: 14px;
          font-family: 'Open Sans';
          color: #696969;
      }
      

      See Fiddle

      【讨论】:

        【解决方案4】:

        使用display: flex; 属性,您可以将项目设置为水平和垂直居中。

        Example

        【讨论】:

        • 在将一个项目设置为左对齐而另一侧的另一个项目设置为右对齐时遇到问题...您能举个例子吗?
        猜你喜欢
        • 2014-01-23
        • 2012-10-10
        • 2017-09-28
        • 2013-11-25
        • 2014-12-05
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        相关资源
        最近更新 更多