【问题标题】:Vertically center inline-block div inside dynamic height div在动态高度 div 内垂直居中内联块 div
【发布时间】:2016-01-19 14:55:36
【问题描述】:

我一直在努力让 div 垂直居中。

div 本身包含一个 svg 图像,图像下方的一些文本,并向右浮动并显示为 inline-block。在图像的左侧,也在容器 div 中,是一些显示标题的文本。如果标题的文本呈现超过 1 行,则图像必须浮动在中间。

这意味着高度是动态的,我不会提前知道。

我已经尝试过这个问题的表格解决方案,但由于我想要垂直居中的 div 已经显示:inline-block 并且无法弄清楚如何让它工作显示:表格,所以无法让它工作。

.like-container {
  
}

.like-div {
	display: inline-block;
	float: right;
	font-size: 10px;
	margin-right: 100px;
}

.title {
	font-size: 40px;
	width: calc(100% - 100px);
}
<div class="like-container">
      <div class="like-div">
        <svg xmlns:x="http://ns.adobe.com/Extensibility/1.0/" xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" xmlns:graph="http://ns.adobe.com/Graphs/1.0/" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 283.46 283.46" enable-background="new 0 0 283.46 283.46" xml:space="preserve"><metadata><sfw xmlns="http://ns.adobe.com/SaveForWeb/1.0/"><slices/><sliceSourceBounds x="12.691" y="27.241" width="269.84" height="254.219" bottomLeftOrigin="true"/></sfw></metadata><path d="M12.691,251.967c0,2.349,1.904,4.252,4.252,4.252h38.293c2.348,0,4.252-1.903,4.252-4.252V131.653  c0-2.348-1.904-4.252-4.252-4.252H16.943c-2.348,0-4.252,1.904-4.252,4.252V251.967z"/><path d="M278.918,147.336c-8.606-14.737,11.983-21.831-5.778-35.607c-22.375-17.355-20.925-14.647-69.32-15.194  c-7.65-0.086-17.099,0.772-14.633-15.114c9.885-63.703-6.41-75.53-17.217-78.504c-22.753-6.26,4.787,19.854-23.702,68.758  c-2.513,4.313-10.086,9.271-15.194,17.567c-10.544,17.125-20.681,44.156-29.436,44.156c-6.252,0-22.42,0-36.091,0v108.504  c20.458-1.617,49.586-3.924,56.862-4.523c11.514-0.949,21.01,6.97,38.104,6.97c15.194,0,24.823,9.421,76.594,1.481  c7.314-1.121,20.896-15.174,18.194-26.576c-2.084-8.804,22.768-15.721,17.405-31.809  C268.403,168.538,290.992,168.011,278.918,147.336z"/></svg>
        <span>Like</span>
      </div>
      <div class="title">
        This is the Title!
      </div>
    </div>

我创建了一个 plnkr 来帮助您展示它的外观:http://plnkr.co/edit/qzqTjQ8W7jl72nRKd6Sj

亲爱的耶稣帮助我!

【问题讨论】:

    标签: html css


    【解决方案1】:

    这可能会对您有所帮助,这是最通用形式的居中 div

    div {
        width: 100px;
        height: 100px;
        border: 1px solid black;
        position: absolute;
        top:0;
        bottom: 0;
        left: 0;
        right: 0;
        margin: auto;
    }
    &lt;div&gt;my div here&lt;/div&gt;

    【讨论】:

    • 当尺寸不固定时不起作用,即当您想像问题一样使用 inline-block 进行尺寸调整时。
    【解决方案2】:

    您可以使用 Flexbox 实现垂直居中。这是代码

    小提琴:https://jsfiddle.net/qbyxkf71/

    HTML

    <div class="like-container">
            <div class="title">This is the Title!</div>
        <div class="like-div">
            <svg xmlns:x="http://ns.adobe.com/Extensibility/1.0/" xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" xmlns:graph="http://ns.adobe.com/Graphs/1.0/" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 283.46 283.46" enable-background="new 0 0 283.46 283.46" xml:space="preserve">
                <path d="M12.691,251.967c0,2.349,1.904,4.252,4.252,4.252h38.293c2.348,0,4.252-1.903,4.252-4.252V131.653  c0-2.348-1.904-4.252-4.252-4.252H16.943c-2.348,0-4.252,1.904-4.252,4.252V251.967z" />
                <path d="M278.918,147.336c-8.606-14.737,11.983-21.831-5.778-35.607c-22.375-17.355-20.925-14.647-69.32-15.194  c-7.65-0.086-17.099,0.772-14.633-15.114c9.885-63.703-6.41-75.53-17.217-78.504c-22.753-6.26,4.787,19.854-23.702,68.758  c-2.513,4.313-10.086,9.271-15.194,17.567c-10.544,17.125-20.681,44.156-29.436,44.156c-6.252,0-22.42,0-36.091,0v108.504  c20.458-1.617,49.586-3.924,56.862-4.523c11.514-0.949,21.01,6.97,38.104,6.97c15.194,0,24.823,9.421,76.594,1.481  c7.314-1.121,20.896-15.174,18.194-26.576c-2.084-8.804,22.768-15.721,17.405-31.809  C268.403,168.538,290.992,168.011,278.918,147.336z" />
            </svg> <span>Like</span>
    
        </div>
    
    </div>
    

    CSS

    .like-container {
        border:1px solid;
        display:flex;
        align-items:center;
    }
    .like-div {
        display: inline-block;
        float: right;
        font-size: 10px;
        margin-right: 100px;
    }
    .title {
        font-size: 40px;
        width: calc(100% - 100px);
    }
    

    【讨论】:

    • 该解决方案的支持情况如何?它的覆盖率是多少?
    【解决方案3】:

    我建议使用flexbox + align-items 居中 + order 用于控制位置、宽度现有标记,请参阅support details 和相关前缀。

    jsfiddle

    .like-container {
        display: flex;
        align-items: center;
    }
    .like-div {
        font-size: 10px;
        margin-right: 100px;
        order: 1;
    }
    .title {
        font-size: 40px;
        flex: 1;
    }
    

    如果你需要支持 IE9,你可以使用这个 CSS 表格布局,但是你需要调整标记,将 &lt;div class="title"&gt; 放在 &lt;div class="like-div"&gt; 之前。

    jsfiddle

    .like-container {
        display: table;
        width: 100%;
    }
    .title, .like-div {
        display: table-cell;
        vertical-align: middle;
    }
    .title {
        font-size: 40px;
        width: 100%;
    }
    .like-div {
        font-size: 10px;
        padding-right: 100px;
    }
    

    【讨论】:

      【解决方案4】:

      您可以使用 direction 并删除 float :(对于旧浏览器)

      .like-container {
        direction: rtl;
      }
      .like-div {
        display: inline-block;
        font-size: 10px;
        vertical-align: middle;
        width: 2em;
        direction: ltr;
      }
      .title {
        font-size: 40px;
        width: calc(100% - 0.65em);
        display: inline-block;
        vertical-align: middle;
        direction: ltr;
      }
      <div class="like-container">
            <div class="like-div">
              <svg xmlns:x="http://ns.adobe.com/Extensibility/1.0/" xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" xmlns:graph="http://ns.adobe.com/Graphs/1.0/" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 283.46 283.46" enable-background="new 0 0 283.46 283.46" xml:space="preserve"><metadata><sfw xmlns="http://ns.adobe.com/SaveForWeb/1.0/"><slices/><sliceSourceBounds x="12.691" y="27.241" width="269.84" height="254.219" bottomLeftOrigin="true"/></sfw></metadata><path d="M12.691,251.967c0,2.349,1.904,4.252,4.252,4.252h38.293c2.348,0,4.252-1.903,4.252-4.252V131.653  c0-2.348-1.904-4.252-4.252-4.252H16.943c-2.348,0-4.252,1.904-4.252,4.252V251.967z"/><path d="M278.918,147.336c-8.606-14.737,11.983-21.831-5.778-35.607c-22.375-17.355-20.925-14.647-69.32-15.194  c-7.65-0.086-17.099,0.772-14.633-15.114c9.885-63.703-6.41-75.53-17.217-78.504c-22.753-6.26,4.787,19.854-23.702,68.758  c-2.513,4.313-10.086,9.271-15.194,17.567c-10.544,17.125-20.681,44.156-29.436,44.156c-6.252,0-22.42,0-36.091,0v108.504  c20.458-1.617,49.586-3.924,56.862-4.523c11.514-0.949,21.01,6.97,38.104,6.97c15.194,0,24.823,9.421,76.594,1.481  c7.314-1.121,20.896-15.174,18.194-26.576c-2.084-8.804,22.768-15.721,17.405-31.809  C268.403,168.538,290.992,168.011,278.918,147.336z"/></svg>
              <span>Like</span>
            </div>
            <div class="title">
              This is<br/> the Title!
            </div>
          </div>

      或者为年轻的浏览器使用display:flex;(最有效的恕我直言)

      .like-container {
        display: flex;
        flex-direction: row-reverse
      }
      .like-div {
        font-size: 10px;
        margin: auto;
      }
      .title {
        font-size: 40px;
        flex: 1
      }
      <div class="like-container">
            <div class="like-div">
              <svg xmlns:x="http://ns.adobe.com/Extensibility/1.0/" xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" xmlns:graph="http://ns.adobe.com/Graphs/1.0/" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 283.46 283.46" enable-background="new 0 0 283.46 283.46" xml:space="preserve"><metadata><sfw xmlns="http://ns.adobe.com/SaveForWeb/1.0/"><slices/><sliceSourceBounds x="12.691" y="27.241" width="269.84" height="254.219" bottomLeftOrigin="true"/></sfw></metadata><path d="M12.691,251.967c0,2.349,1.904,4.252,4.252,4.252h38.293c2.348,0,4.252-1.903,4.252-4.252V131.653  c0-2.348-1.904-4.252-4.252-4.252H16.943c-2.348,0-4.252,1.904-4.252,4.252V251.967z"/><path d="M278.918,147.336c-8.606-14.737,11.983-21.831-5.778-35.607c-22.375-17.355-20.925-14.647-69.32-15.194  c-7.65-0.086-17.099,0.772-14.633-15.114c9.885-63.703-6.41-75.53-17.217-78.504c-22.753-6.26,4.787,19.854-23.702,68.758  c-2.513,4.313-10.086,9.271-15.194,17.567c-10.544,17.125-20.681,44.156-29.436,44.156c-6.252,0-22.42,0-36.091,0v108.504  c20.458-1.617,49.586-3.924,56.862-4.523c11.514-0.949,21.01,6.97,38.104,6.97c15.194,0,24.823,9.421,76.594,1.481  c7.314-1.121,20.896-15.174,18.194-26.576c-2.084-8.804,22.768-15.721,17.405-31.809  C268.403,168.538,290.992,168.011,278.918,147.336z"/></svg>
              <span>Like</span>
            </div>
            <div class="title">
              This is<br/> the Title!
            </div>
          </div>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-26
        • 2018-01-20
        • 2017-07-29
        • 2013-06-24
        • 1970-01-01
        • 2015-08-05
        • 2012-12-16
        相关资源
        最近更新 更多