【问题标题】:How to align div to bottom right without using absolute position?如何在不使用绝对位置的情况下将 div 对齐到右下角?
【发布时间】:2017-09-01 21:04:31
【问题描述】:

有很多关于如何对齐到右下角的帖子,但它们都使用绝对值,我不能这样做,因为我不希望我的 2 个元素重叠,如果一个恰好对于窗口大小来说太大了。

我试过浮动,它可以右对齐,但不能对齐底部

<div style="border-bottom: 1px solid; padding-bottom:10px;">

    <h1 style="display:inline;">
      This is my big title - Bla bla bla   
    </h1>

    <div style="
            font-size: small;
            float: right;
            padding: 5px 0px 0px 20px;
            font-style: italic;
            display: inline;">
        Published on Friday 11th August 2017 at 12:46   
    </div>

    <div style="clear:both"></div>

</div>

您可以在https://jsfiddle.net/j66q82gy/7/查看结果

窗口窄的时候不对齐底部没关系,但是窗口宽的时候h1和中间的div都在同一条线上,就明显不对齐底部了,我需要它底部对齐。

我还需要将它们保持在同一行,因此内联应该保持在 h1 和中间 div 上。

编辑:Flex 将事物置于一种尴尬的半内联半块中,如下所示:i.imgur dot com/YA6TdBt.png

我需要类似 i.imgur dot com/Awj9Bht.png 的东西(上图是我的代码,下图经过 Photoshop 处理,看起来像我需要的那样。)

【问题讨论】:

标签: css flexbox


【解决方案1】:

使用 Flexbox,您可以在底部对齐并保持内部 div 右对齐。

display: flex; align-items: flex-end添加到外部div,重置h1上的边距(或者您可以将一个添加到另一个内部div),然后将margin-left: auto;设置为内部div

align-items: flex-end 将保持内部div 底部与h1 对齐,margin-left: auto; 将内部div 推到右侧。

注意,由于字体大小不同,它们的内部指标会在h1 下方创建一个更大的空白区域。这里我只是简单的在内部div上加了一个4px的底部内边距,不过你也可以用整体line-height来玩


根据评论更新

如果要让文本保持展开直到达到父级宽度,请将flex-wrap: wrap; 添加到外部div

<div style="border-bottom: 1px solid; padding-bottom:10px; display: flex; flex-wrap: wrap; align-items: flex-end;">

    <h1 style="margin: 0;">
      This is my title
    </h1>
    
    <div style="
            margin-left: auto;
            font-size: small;
            padding: 0 0 4px 20px;
            font-style: italic;">
    	Published on Friday 11th August 2017 at 12:46 	
    </div>
		
</div>

<br>
<div style="border-bottom: 1px solid; padding-bottom:10px; display: flex; flex-wrap: wrap; align-items: flex-end;">

    <h1 style="margin: 0;">
      This is my big title - Bla bla bla   
    </h1>
    
    <div style="
            margin-left: auto;
            font-size: small;
            padding: 0 0 4px 20px;
            font-style: italic;">
    	Published on Friday 11th August 2017 at 12:46 	
    </div>
		
</div>

<br>
<div style="border-bottom: 1px solid; padding-bottom:10px; display: flex; flex-wrap: wrap; align-items: flex-end;">

    <h1 style="margin: 0;">
      This is my big title - Bla bla bla bla bla bla bla bla bla
    </h1>
    
    <div style="
            margin-left: auto;
            font-size: small;
            padding: 0 0 4px 20px;
            font-style: italic;">
    	Published on Friday 11th August 2017 at 12:46 	
    </div>
		
</div>

【讨论】:

    【解决方案2】:

    您可以使用flexbox 属性代替float...

    完全更新的答案

    fiddle

    .flex {
      display: flex;
      align-items: baseline;
      flex-wrap: wrap;
    }
    
    .flex div {
      margin-left: auto;
    }
    <div style="border-bottom: 1px solid; padding-bottom:10px;" class="flex">
      <h1>
        This is my big title - Bla bla bla
      </h1>
      <div style="
                font-size: small;
                padding: 5px 0px 0px 20px;
                font-style: italic;">
        Published on Friday 11th August 2017 at 12:46
    
      </div>
    </div>

    【讨论】:

    • 这个解决方案都居中对齐,我需要一个对齐的顶部,一个对齐的底部。
    • flex end 不起作用,它没有给出内联结果,它给出了一个半内联,半块的尴尬结果,就像这样i.imgur.com/YA6TdBt.png
    • 我需要的结果是这个i.imgur.com/Awj9Bht.png(底部是photoshopped)
    • @user8488187 好的,我想我现在明白了。您可以将flex-direction 属性添加到容器中。这将允许(我认为)你想要的重叠。检查我更新的答案。
    • @user8488187 抱歉,我想我误读了你的问题大约 1000 次......我已经更新了我的答案,希望是最后一次 :)
    【解决方案3】:

    希望这会有所帮助

    <div style="border-bottom: 1px solid; padding-bottom:10px;display: table;">
    
        <h1 style="display:inline;">
          This is my big title - Bla bla bla   
        </h1>
        
        <div style="
                font-size: small;
                padding: 5px 0px 0px 20px;
                font-style: italic;
               display: table-cell;
               vertical-align:bottom;">
        	Published on Friday 11th August 2017 at 12:46 	
        </div>
    		
        <div style="clear:both"></div>
    
    </div>

    方法二:

    您可以通过flexbox 的链接,因为它非常易于使用且具有高度的响应性。

    【讨论】:

      【解决方案4】:

      这是你想象的吗?

      <div style="border-bottom: 1px solid; padding-bottom:10px; display:flex; flex-wrap: wrap;">
      
          <h1 style="display:inline;">
            This is my big title - Bla bla bla   
          </h1>
      
          <div style="
                  font-size: small;
                  float: right;
                  padding: 5px 0px 0px 20px;
                  font-style: italic;
                  align-self: flex-end;
                  margin-left: auto;">
              Published on Friday 11th August 2017 at 12:46   
          </div>
      
          <div style="clear:both"></div>
      
      </div>
      

      https://jsfiddle.net/eq6jLnct/5/

      将高度更改为您需要的任何值。或者只使用最小高度。

      请注意,并非所有浏览器都支持 flexbox:http://caniuse.com/#search=flex-box

      【讨论】:

      • 没有。不应该有高度设置。这是标题和元描述,而不是整个页面。当您删除高度并使用窄窗口时,您的解决方案会给出看起来不太好的结果。 i.imgur.com/YA6TdBt.png 该解决方案在窄窗口中看起来应该与我的原始代码相同,但在宽窗口中看起来会有所不同。而且使用媒体也行不通,因为标题是动态的,有些很长,你无法用媒体预测它的大小。
      • 所以完全删除高度。我想演示底部位置。
      • 我还没有写完,我只是点击回车换行,它发表了我的评论。请查看我对之前评论的更新。
      • 我看到问题已回答。我稍微更新了代码。需要“flex-wrap> wrap”以避免错误的包装。
      【解决方案5】:

      检查我添加的this codePen,这是 CSS:

      float: right;
      transform: translateY(0px);
      

      【讨论】:

      • 您的解决方案不是内联的,它是 2 行。我需要 1 行。
      • 好的,你可以删除 display: inline-block;然后添加宽度:100%;
      • 那仍然不是内联的。这是你的结果i.imgur.com/1zVsbM5r.png 2 行
      猜你喜欢
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 2012-10-13
      • 2021-11-08
      • 2022-12-16
      • 1970-01-01
      • 2017-07-30
      相关资源
      最近更新 更多