【问题标题】:Vertically align floating div to an unknown sized div将浮动 div 垂直对齐到未知大小的 div
【发布时间】:2015-06-12 15:24:04
【问题描述】:

我有一个大小未知的div 和另一个div(带有CSS 旋转文本)在彼此下方浮动。 我现在正试图将文本移动到垂直中间,但我没有让它工作。

<div id="wrapper">
    <div id="unknownSizeDiv"> ... </div>
    <div id="rotatedTextDiv"> ... </div>
</div>
<div id="wrapper">
    <div id="unknownSizeDiv"> ... </div>
    <div id="rotatedTextDiv"> ... </div>
</div>

或大: http://jsfiddle.net/229mvsdb/

它应该看起来像这样:

我尝试使用此处给出的解决方案:Vertically & horizontally align text after CSS rotation
但它仅适用于已知大小的divs。

还有这个:How to vertically middle-align floating elements of unknown heights?
应该解决我认为的问题,但正如您在 jsfiddle 中看到的那样,它不是

【问题讨论】:

  • js 适合你吗?还是纯css?
  • 它必须是纯 css。 (但不兼容旧浏览器)
  • 那样你就不走运了=(。我想问你浮动是否是必需的。浮动不遵守垂直对齐规则。要么你使用已知的 div 高度,要么你有切换到显示:inline-block
  • 第二条评论 - 如果您可以选择在线屏蔽,我很乐意提供帮助 =)
  • 感谢您的大力参与,Alexey! :) 我知道这不是一个好的答复:但我对整个 CSS 事物还是陌生的,所以我不知道 display: inline-block; 是否也可以。如果我现在可以对float 做同样的事情,是的:为什么不呢?

标签: css vertical-alignment


【解决方案1】:

It is achievalbe 使用纯 CSS。下面是您要对 CSS 执行的操作。

     .paragraphWrapper{ position: relative; } /*so that its absolutely positioned children calculate their offset wrt this element*/
     .paragraphWrapper:after{ content: ''; display: table; clear: both; }
     .paragraphWrapper > div{
        display: inline-block;
        vertical-align: middle;
     }
     .paragraph{
        border: 1px dashed #ccc;
        float: left;
        clear: both;
        margin: 5px;
        margin-bottom: 50px;
        width: 415px;
     }
     .paragraphMetaInfo{
        position: absolute;
        top: 50%;
        left: 405px;
        /*move them 50% of text's width towards top to get properly centered*/
        -moz-transform: rotate(90deg) translate(-50%, 0);
        -o-transform: rotate(90deg) translate(-50%, 0);
        -webkit-transform: rotate(90deg) translate(-50%, 0);
        transform: rotate(90deg) translate(-50%, 0) /*as pointed out by Shikkediel*/
     }

【讨论】:

  • 所以您的解决方案不需要整个.paragraphWrapper &gt; div 部分,对吧? jsfiddle.net/uxqc5p42
  • 不,省略该规则不会对输出产生任何影响。
【解决方案2】:

您的以下规则没有任何效果:

.paragraphWrapper > div {
    display:inline-block;
    vertical-align:middle;
}

因为&lt;div&gt; 子元素是floated。因此the computed value of display would be block.

9.7 Relationships between 'display', 'position', and 'float'

影响盒子生成和布局的三个属性—— displaypositionfloat — 交互如下:

  1. [...] 否则,如果 'float' 的值为 'none' 以外的值,则框是浮动的,并且根据下表设置 'display'。 [...]
+---------------------------------------------------------------+--------------------+
|                        Specified value                        |   Computed value   |
+---------------------------------------------------------------+--------------------+
|   inline, table-row-group, table-column, table-column-group,  |                    |
|   table-header-group, table-footer-group, table-row,          |       block        |
|   table-cell, table-caption, inline-block                     |                    |
+---------------------------------------------------------------+--------------------+

实际上,没有真正的方法可以垂直对齐浮动元素。但如果使用inline-blocks 是一个选项,以下可能是一个很好的起点:

.paragraphWrapper {
    margin-bottom: 50px;
}

.paragraph {
    border: 1px dashed #ccc;
    margin: 5px;
    width: 415px;
}

.paragraphWrapper > div {
    display: inline-block;
    vertical-align: middle;
}

.paragraphMetaInfo {
    -webkit-transform: rotate(90deg) translateY(50%);
    -moz-transform: rotate(90deg) translateY(50%);
    -ms-transform: rotate(90deg) translateY(50%);
    -o-transform: rotate(90deg) translateY(50%);
    transform: rotate(90deg) translateY(50%);
    writing-mode: tb-rl;
}
<div class="paragraphWrapper">
    <div class="paragraph">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,</div>
    <div class="paragraphMetaInfo" id="paragraphMetaInfo_0">1. Paragraph
        <br/>64 Words</div>
</div>
<div class="paragraphWrapper">
    <div class="paragraph">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</div>
    <div class="paragraphMetaInfo" id="paragraphMetaInfo_1">2. Paragraph
        <br/>184 Words</div></div>
    <div class="paragraphWrapper">
        <div class="paragraph">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</div>
        <div class="paragraphMetaInfo" id="paragrapheMetaInfo_2">3. Paragraph
            <br/>214 Words</div></div>

【讨论】:

    猜你喜欢
    • 2010-11-04
    • 2011-05-31
    • 2012-06-13
    • 1970-01-01
    • 2011-09-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    相关资源
    最近更新 更多