【问题标题】:Align image and text within same cell vertically?垂直对齐同一单元格内的图像和文本?
【发布时间】:2013-09-19 17:22:51
【问题描述】:

我有一个小的 2x2 HTML 表格。每个单元格包含一张图片和一段文字。

示例图片:

如您所见,文本垂直低于图像的垂直中间水平。如何使文本相对于左侧图像垂直居中?

我尝试了几个不同的 display 值,但我无法解决这个问题。

JSFiddle:http://jsfiddle.net/ahmadka/rbJNQ/

【问题讨论】:

    标签: html css html-table vertical-alignment


    【解决方案1】:

    所有 div 的行为都像 table:它是一个矩形块,参与块格式化上下文

    .main-container 是 TABLE .container 是 ROWS .inner-container 是 CELLS

    现在所有 div 都像表格一样,我只是垂直对齐中间图像,所以所有内容都在中间对齐

    .main-container{
      display:table;
      background:#bcbbbb;
      width:100%;
      height:100vh;
    }
    .container{
      display:table-row;
    
    }
    .inner-container {
        vertical-align: middle;
        display: table-cell;
        text-align: center;   
    }
    .inner-container figure{
        background-color:#807c7c;
        vertical-align: middle;
            display: inline-block;
        margin: 0;
        
    }
    .inner-container p {
        display: inline-block;
    }
    <div class="main-container">
      
    <div class="container">
      <div class="inner-container">
        <figure>
          <img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.svg?v=6e4af45f4d66" alt="stack" width="100" height="100">
      </figure>
      <p>Example</p>
     </div>
      <div class="inner-container">
        <figure>
          <img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.svg?v=6e4af45f4d66" alt="stack" width="100" height="100">
      </figure>
      <p>Example</p>
     </div>
    </div>
    <div class="container">
      <div class="inner-container">
        <figure>
          <img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.svg?v=6e4af45f4d66" alt="stack" width="100" height="100">
      </figure>
      <p>Example</p>
     </div>
      <div class="inner-container">
        <figure>
          <img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.svg?v=6e4af45f4d66" alt="stack" width="100" height="100">
      </figure>
      <p>Example</p>
     </div>
    </div>
    </div>

    【讨论】:

    • 对您粘贴的代码的解释将大大改善您的答案,并帮助其他人了解他们自己的工作需要什么。
    【解决方案2】:

    您可以使用表格进行设计。将图标保留在一个单元格中,将文本保留在另一个单元格中。使它们垂直对齐为中间。所以无论图标的高度是多少,文本都会垂直居中对齐。或者,如果您只针对新浏览器,那么您可以使用弹性盒模型进行设计。

    【讨论】:

      【解决方案3】:

      我意识到这个问题已有 4 年历史了,但是,嘿,为什么不回答它 - 也许它对其他人有帮助,因为 OP 可能同时以一种或另一种方式解决了它。

      在 2017 年,艾哈迈德,您的问题在 flexbox 的帮助下相当容易解决(只需谷歌一下,您一定会喜欢它 - 如果您还没有听说过,那就是)设置为表的td-s 的直接“孩子”。您需要做的是将以下内容添加到小提琴中的 CSS 中:

      #nst_block #social_body table td > *
        {
        display: flex;
        justify-content: flex-start;
        align-items: center;
        }
      

      主轴定位由justify-content 完成,交叉轴定位(在您的情况下为垂直轴)由align-items 完成。

      就是这样。

      【讨论】:

        【解决方案4】:

        使用这个 CSS //CSS

        #nst_block #social_body table {
        background: none repeat scroll 0 center transparent;
        border: 1px dashed black;
        height: 75px;
        margin: 0 auto;
        width: 280px;
        }
        
        #nst_block #social_body table a {
        border: 0 none;
        font-family: inherit;
        font-size: 16px;
        font-style: inherit;
        font-weight: inherit;
        line-height: 24px;
        margin: 0;
        outline: 0 none;
        padding: 0;
        vertical-align: baseline;
        }
        

        更新链接:http://jsfiddle.net/rbJNQ/16/

        【讨论】:

        • 如果你想要之前的表格高度,那么只需添加 height: 75px;在#nst_block #social_body 表中{高度:75px;.......}
        • 有没有办法避免设置一个固定的 margin-top ?在不同的设备/分辨率/字体大小等上查看时会导致问题..
        • 你可以试试 img{ height: 30px; } 和 #text{ line-height: 30px;垂直对齐:中间; } 行高应该和你的图片高度一样。
        • 或者你可以用你以前的 CSS #nst_block #social_body table { background: none 重复滚动 0 center transparent 替换这个 CSS;边框:1px黑色虚线;高度:75px;边距:0 自动;宽度:280 像素; } #nst_block #social_body 表 a { 边框:0 无;字体家族:继承;字体大小:16px;字体样式:继承;字体粗细:继承;行高:24px;边距:0;大纲:0 无;填充:0;垂直对齐:基线; } 查看此链接:jsfiddle.net/rbJNQ/16
        【解决方案5】:

        您的代码看起来很复杂。它也不是真正的表格数据,所以你不应该使用&lt;table&gt;-元素。

        您可以像这样简单地解决它。我在这个答案中只包含了重要的 CSS 规则。

        HTML

        <div class="social_body">
            <a class="facebook">Facebook</a>
            <a class="twitter">Twitter</a>
            <a class="google">Google+</a>
            <a class="share">Share This</a>
        </div>
        

        CSS

        .social_body {
            width: 280px;
            overflow: hidden;
            margin: 0 auto;
            border: 1px dashed black;
        }
        
        .social_body a {
            float: left;
            width: 50%;
            font-size: 16px;
            line-height: 24px;
        }
        
        .social_body a:before {
            content: '';
            float: left;
            width: 24px;
            height: 24px;
            margin: 0 10px 0 0;
            background: transparent 0 0 no-repeat;
        }
        
        .social_body a.facebook:before {
            background-image: url(http://i.imgur.com/QglLT5Q.png);
        }
        
        .social_body a.twitter:before {
                background-image: url(http://i.imgur.com/QglLT5Q.png);
        }
        
        /* […] You see where this is going. */
        

        演示

        Try before buy

        【讨论】:

          【解决方案6】:

          嗯。试试这个:

          <td>
          <a id="social_twitter" onclick="window.open(this.href,'external'); return false;" href="http://twitter.com/JenierTeas">
              <span>icon</span>
          </a>
              <span style="vertical-align: middle;">Twitter</span>
          </td>
          

          【讨论】:

          • 我不想将样式直接放在 HTML 中。不能放在关联的 CSS 中吗?
          • 当然可以,只需给 span 提供 ID 并添加额外的 CSS,如下所示:&lt;span id="social-name"&gt;Twitter&lt;/span&gt; CSS:#social-name { vertical-align: middle; }
          • 那行不通.. 已经试过了。我只说了我之前的评论,因为有时样式在 HTML 而不是 CSS 中起作用。所以我想也许你让它按照你编写解决方案的方式工作。
          猜你喜欢
          • 2017-05-30
          • 1970-01-01
          • 2011-11-16
          • 2019-05-03
          • 2023-04-04
          • 2020-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多