【问题标题】:CSS - Align Text, Input and Image in DIVCSS - 在 DIV 中对齐文本、输入和图像
【发布时间】:2020-07-30 00:51:39
【问题描述】:

我正在尝试对齐一些文本、输入字段和大约 25x25 像素的图像

我得到的是 div 顶部的文本和图像,输入略低。

如何对齐它们,使它们彼此垂直水平。

这是我目前所拥有的:

div.block {overflow:hidden; border:1px solid #000 }
div.block label {width:150px; display:block; float:left; text-align:left; vertical-align:middle; }
div.block.input {margin-left:4px; float:left; vertical-align:middle; }

https://jsfiddle.net/a3cmfpzL/

谢谢

【问题讨论】:

    标签: html css image input alignment


    【解决方案1】:

    这是水平的

    .block{
      display:flex;
    }
    label{
      border:1px solid red;
    }
    
    img{
      height:25px;
      width:25px;
    }
    <div class='block'>
    <label>Test Label</label>
    <input type='text' value='1234567890'/>
    <img src='http://placekitten.com/301/301'/>
    </div>

    如果您正在寻找垂直方向,那么:

    *{
      border:0;
      padding:0;
    }
    .block{
      display:flex;
      flex-direction:column;
    }
    label{
      border:1px solid red;
     width:100px;
    }
    
    img{
      height:25px;
      width:25px;
    }
    <div class='block'>
    <label>Test Label</label>
    <input type='text' value='1234567890'/>
    <img src='http://placekitten.com/301/301'/>
    </div>

    【讨论】:

      【解决方案2】:

      尝试在 div.block 中添加 position:absolutedisplay:flex。 如果我正确理解您的问题,那应该可以解决问题。

      【讨论】:

        【解决方案3】:

        我强烈建议你使用 flexbox。

        一开始可能会有点混乱,但是一旦你掌握了它,你就会爱上它。 在这里你可以找到完美的使用指南。
        https://css-tricks.com/snippets/css/a-guide-to-flexbox/

        类似这样的东西(只是写在我的脑海里,所以未经测试) 请先尝试删除您的课程。

        你的 CSS

        .flex {
            display: flex; 
            flex-direction: column;
            justify-content: space-between; // only use this if you don't justify-self the elements
        }
        
        .border {
            border:1px solid #000;
        }
        
        img {
            width: 25px;
            height: 25px;
            justify-self: top; // if you don't use flex-direction on .flex
        }
        
        input {
            justify-self: top; // if you don't use flex-direction on .flex
        }
        

        你的 HTML

        <div style="flex border">
            <img src='image.png'/>
            <label>Test Label</label>
            <input type='text' value='1234567890'/>
        </div>
        

        【讨论】:

          【解决方案4】:

          几个问题

          1. 这个div.block.input 没有选择任何东西,所以所有这些样式都没有被使用
          2. 您将标签设置为块级元素,因此它不会响应 vertical-align 属性。

          &lt;input&gt;&lt;img&gt; 是内联元素,因此它们将共享它们所在的同一行框,它们的垂直对齐方式将由 vertical-align 属性设置。

          vertical-align 属性的默认值为基线:

          将框的基线与父框的基线对齐。如果框没有基线,则将底部边距边缘与父级的基线对齐。

          在这种情况下,我们有一个没有基线的&lt;img&gt;,因此它将根据它的底部边距对齐,在我们的例子中,img 没有边距,所以它基本上是底部边缘。

          &lt;input&gt; 不过有一个基线,所以它的基线会和它旁边的img的底边对齐。

          演示

          div.block {
            overflow: hidden;
            border: 1px solid #000
          }
          
          div.block label {
            width: 150px;
            display: block;
            float: left;
            text-align: left;
            vertical-align: middle;
          }
          
          div.block.input {
            margin-left: 4px;
            float: left;
            vertical-align: middle;
          }
          
          div {
            position: relative;
          }
          
          div:after {
            content: '';
            position: absolute;
            left: 0;
            width: 100%;
            height: 100%;
            background: linear-gradient(red, red) 0 24.5px/ 100% 1px no-repeat
          }
          <p>red line is the baseline</p>
          <div class='block'>
            <label>Test Label</label>
            <input type='text' value='1234567890' />
            <img src='https://i.picsum.photos/id/527/25/25.jpg' />
          </div>

          解决方案

          我稍微清理了代码并删除了不必要的样式。

          1. 浮点数不是必需的
          2. 如果您对标签应用宽度,请改用display:inline-block;

          1) 垂直对齐:中间;

          * {
            padding: 0;
            margin: 0;
          }
          
          div.block {
            overflow: hidden;
            border: 1px solid #000
          }
          
          label {
            width: 150px;
            display: inline-block;
            vertical-align: middle;
            background: brown;
          }
          
          input {
            vertical-align: middle;
            border: 0;
            background: red;
          }
          
          img {
            vertical-align: middle;
          }
          <div class='block'>
            <label>Test Label</label>
            <input type='text' value='1234567890' />
            <img src='https://i.picsum.photos/id/527/25/25.jpg' />
          </div>

          项目将相对于最高项目的中间对齐,即 img。

          2) 如果您希望元素共享相同的高度

          知道&lt;img&gt; 是最高的和它的高度,我们可以简单地将相同的高度应用到其他元素,我们仍然需要应用vertical-align:top 来根据元素的上边缘而不是基线对齐元素

          * {
              padding: 0;
              margin: 0;
              
              /* because we defined a height on the element, 
                 we need to ensure that any extra space should be   
                 calculated within that height */
              box-sizing: border-box;
          }
          
          div.block {
              overflow: hidden;
              border: 1px solid #000;
              font-size:0;
          }
          
          label {
              display: inline-block;
              width: 150px;
              height: 25px;
              font-size:16px;
              vertical-align: top;
              line-height:25px;
              background:brown;
          }
          
          input {
              height: 25px;
              vertical-align: top;
              border:0;
              background:red;
          }
          <div class='block'>
            <label>Test Label</label>
            <input type='text' value='1234567890' />
            <img src='https://i.picsum.photos/id/527/25/25.jpg' />
          </div>

          3) 弹性盒

          哪个是最简单的,我不会介绍,因为它已经在其他答案中介绍过。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-05-14
            • 1970-01-01
            • 2016-12-22
            • 2013-12-26
            • 1970-01-01
            • 2017-03-17
            • 2013-11-28
            相关资源
            最近更新 更多