【问题标题】:Responsive text input beside image with fixed size in HTML and CSS在 HTML 和 CSS 中固定大小的图像旁边的响应式文本输入
【发布时间】:2017-03-30 10:33:18
【问题描述】:

我正在开发一个网站。现在我正在美化我的网站。现在我在设计我的网站时遇到了问题。

这是我想要达到的目标

正如您在高亮区域中看到的,在 div 中有一个图像和文本区域。我想让它响应。我的意思是,它将具有最大宽度,当用户降低屏幕尺寸时,它会变小,但它具有最小宽度。我的意思是父 div 的大小不是固定的。它会改变。

但我总是希望他们并肩而行。但是图像将始终具有固定大小。无论屏幕尺寸如何变化,它都不会改变。但只有文本输入字段会根据父级做出响应。这是我的代码:

这是我的 HTML

  <div>
    <div class="comment-form">
         <img class="comment-avatar" src="/Images/user_avatar.png" />
         <textarea placeholder='Please log in first' class="comment-textarea"></textarea>
    </div>
  </div>

这是我的 CSS

.comment-form{
    padding:5px;
    border:1px solid #CFD8DC;
    width:100%;
    min-width:280px;
    max-width:490px;
}

.comment-avatar{
    width:60px;
    height:54px;
    object-fit:cover;
    border:1px solid #CFD8DC;
}

.comment-textarea{
    width:86%;
    display:inline-block;
    border-radius:0px;
    height:54px;
}

正如您在 css 中看到的那样,我正在使用最小宽度和最大宽度将评论表单响应设置宽度设置为 100%。头像图像将具有固定大小。问题是设置文本区域的宽度。我总是希望图像和文本区域并排。我希望 textarea 占据表单区域的其余部分。所以我用百分比设置它的宽度。如您所见,现在宽度为 86%。如果我将其设置为 100%,表格将变为如下所示。

但是使用当前代码,我得到了第一张图片。但是当我调整屏幕大小时,它变成了这样。

他们不再并排。所以我当前的代码没有响应。我想要做的是我希望图像始终固定在一边,并且无论屏幕尺寸更改为什么,都希望 textarea 占据表单容器的其余区域或剩余区域。

【问题讨论】:

    标签: html css responsive-design


    【解决方案1】:

    工作Fiddle

    我已经删除了不相关的 css 部分。 魔法发生在外部容器中的border-boxpadding

    .comment-form{
      position: relative;
      width:100%;
      padding-left: 62px;
      min-width:280px;
      max-width:490px;    
      box-sizing: border-box;
    }
    
    .comment-avatar{
      position: absolute;
      width:60px;
      height:54px;
      left: 0;
    }
    
    .comment-textarea{
      width:100%;
      height:54px;
    }
    

    通过position: absolute 将头像从正常流程中取出,您可以将 textarea 宽度设置为 100%,并通过外部表单元素上的填充来模拟偏移。

    【讨论】:

    • @Leothelion 它是如何获得滚动条的?它对我有用。现在。请问我能知道你是如何得到滚动条的吗?
    • @Leothelion 你看过以前的小提琴版本了吗?我不小心先链接了错误的版本。
    • @KilianStinson 仍然如果我会减小我看到的滚动条的大小,但操作很高兴,那么好的 :)
    • 但 Codeninja93 的答案更好。但我赞成你的答案,我将使用 codeninja93 答案。非常感谢,
    • @Leothelion 我很好奇你为什么看到滚动条。您减小的大小是否超过了为.comment-form 指定的min-width OP?
    【解决方案2】:

    也许,这有帮助...我刚刚添加了box-sizing 并使用calc 来计算文本区域的宽度

    .comment-form{
        padding:5px;
        border:1px solid #CFD8DC;
        width:100%;
        min-width:280px;
        max-width:490px;
        box-sizing: border-box
    }
    
    .comment-avatar{
        width:60px;
        height:54px;
        display: inline-block;
        border:1px solid #CFD8DC;
        box-sizing: border-box;
    
    }
    
    .comment-textarea{
    
        width: calc( 100% - 70px);
        display:inline-block;
        border-radius:0px;
        height:54px;
        display: inline-block;
        box-sizing: border-box;
    
    }
    <div>
        <div class="comment-form">
             <img class="comment-avatar" src="https://upload.wikimedia.org/wikipedia/en/7/71/SmallTownSouthernMan.jpg" />
             <textarea placeholder='Please log in first' class="comment-textarea"></textarea>
        </div>
      </div>

    【讨论】:

      【解决方案3】:

      我猜display: flex 应该可以很好地完成这项工作!

      顺便说一句。 flexbox 是一个很好的研究对象:https://css-tricks.com/snippets/css/a-guide-to-flexbox/

      .comment-form{
          padding:5px;
          border:1px solid #CFD8DC;
          width:100%;
          min-width:280px;
          max-width:490px;
          display: flex;  /* <-- right here :) */
      }
      
      .comment-avatar{
          width:60px;
          height:54px;
          object-fit:cover;
          border:1px solid #CFD8DC;
      }
      
      .comment-textarea{
          width:86%;
          display:inline-block;
          border-radius:0px;
          height:54px;
      }
      <div>
        <div class="comment-form">
          <img class="comment-avatar" src="/Images/user_avatar.png" />
          <textarea placeholder='Please log in first' class="comment-textarea"></textarea>
        </div>
      </div>

      【讨论】:

        【解决方案4】:

        这对我有用,试试:

        <div>
            <div class="comment-form">
                 <div class="comment-avatar">
                   <img src="/Images/user_avatar.png" />
                 </div>
                 <div class="textareawrap">
                  <textarea placeholder='Please log in first' class="comment-textarea"></textarea>
                 </div>
        
            </div>
          </div>
        

        在你的 CSS 中:

        .comment-form{
            padding:5px;
            border:1px solid #CFD8DC;
            width:100%;
            min-width:280px;
        
        }
        
        .comment-avatar{
            width:60px;
            height:54px;
            object-fit:cover;
            border:1px solid #CFD8DC;
            position: absolute;
        }
        
        .comment-textarea{
            width:86%;
            display:inline-block;
            border-radius:0px;
            height:54px;
            margin-left: 80px;
        }
        

        【讨论】:

        • 看看textarea..从盒子里出来。
        【解决方案5】:

        也尝试像这样添加到 comment-from 显示属性:

        .comment-form{
            padding:5px;
            border:1px solid #CFD8DC;
            width:100%;
            min-width:280px;
            max-width:490px;
            display:inline-flex
        }
        

        但请注意,值“flex”和“inline-flex”需要前缀才能在 Safari 中工作。 “flex”使用“display: -webkit-flex”,“inline-flex”使用“display: -webkit-inline-flex;”。

        【讨论】:

          【解决方案6】:

          三个步骤:

          1. display:flex 应用到父容器
          2. img 一个固定宽度
          3. 使用calc()textarea 一个灵活的宽度

          参见:

          .comment-form {
          display: flex;
          width: 60vw;
          height: 84px;
          border: 1px solid rgb(191,191,191);
          }
          
          .comment-avatar {
          width: 60px;
          height: 60px;
          margin: 12px;
          background-color: rgb(127,127,127);
          }
          
          .comment-textarea {
          width: calc(100% - 96px);
          margin: 12px 12px 12px 0;
          border: 1px solid rgb(63,63,63);
          }
            <div>
              <div class="comment-form">
                   <img class="comment-avatar" src="/Images/user_avatar.png" />
                   <textarea placeholder='Please log in first' class="comment-textarea"></textarea>
              </div>
            </div>

          【讨论】:

            猜你喜欢
            • 2019-06-29
            • 2017-03-04
            • 2013-12-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多