【问题标题】:Float right and position absolute doesn't work together浮动权利和绝对位置不能一起工作
【发布时间】:2012-07-05 05:24:50
【问题描述】:

我希望 div 始终位于其父 div 的右侧,因此我使用 float:right。它有效。

但我也希望它在插入时不影响其他内容,所以我使用position:absolute

现在float:right 不起作用,我的 div 始终位于其父 div 的左侧。我怎样才能把它移到右边?

【问题讨论】:

    标签: css css-float position


    【解决方案1】:

    使用

    position:absolute; right: 0;

    绝对定位不需要float:right

    另外,确保父元素设置为position:relative;

    【讨论】:

    • 如果想在父元素的中心放置一个 div,我该怎么做?
    • 感谢您的帮助。我使用 left:50%margin-left:-??px (?? 取决于你的 div 宽度)
    • 有了@eivers88 的回答,我仍然需要删除'overflow-y: auto;'从父元素使其工作。
    • 如果div的宽度是动态的会怎样
    • 好的,我知道了 float: right 不是绝对定位所必需的,但是......当你在同一个 (position:relative) 父级中有两个绝对元素并且你希望它们与对,一个在另一个旁边?它们的宽度是动态的......
    【解决方案2】:

    一般来说,float 是一个相对定位语句,因为它指定了元素相对于其父容器的位置(向右或向左浮动)。这意味着它与position:absolute 属性不兼容,因为position:absolute 是绝对定位语句。您可以浮动一个元素并允许浏览器相对于其父容器定位它,或者您可以指定一个绝对位置并强制该元素出现在某个位置。具体来说,带有position:absolute 的元素将被放置在您指定的任何偏移量处(带有​​leftrighttoptopbottom)与其最近的祖先(包含元素)的位置(带有@987654329) @ 属性,不管它是否有float 属性。如果它没有任何具有position 属性的祖先,它将被放置在您指定的距屏幕边缘的偏移处。

    如果您希望绝对定位的元素出现在其父 div 的右侧,则可以使用 position: absolute; right: 0; -- 只要父 div 具有诸如 position:relative 之类的位置属性。但是,如果父 div 没有位置属性,这将不起作用,您需要坚持使用 float:right

    【讨论】:

    • 如果父 divposition: relative,则此 div 将位于该父的右侧,而不是屏幕。
    • 声明你可以指定一个绝对位置并强制元素出现在某个位置而不考虑它的父元素是不正确和误导的。 绝对定位基于最近的非静态定位祖先,因此它可能是父。因此说不管父母是不正确的。
    • 你是对的,CodingYoshi,我更新了我的答案以反映绝对定位的工作原理。自从我 9 年前最初写这个答案以来,我对 CSS 的理解有所提高。
    【解决方案3】:

    如果您的绝对元素是“display: inline-block”,您可以使用“translateX(-100%)”和“text-align: right

    <div class="box">
    <div class="absolute-right"></div>
    </div>
    
    <style type="text/css">
    .box{
        text-align: right;
    }
    .absolute-right{
        display: inline-block;
        position: absolute;
    }
    
    /*The magic:*/
    .absolute-right{
    -moz-transform: translateX(-100%);
    -ms-transform: translateX(-100%);
    -webkit-transform: translateX(-100%);
    -o-transform: translateX(-100%);
    transform: translateX(-100%);
    }
    </style>
    

    您将获得与右侧对齐的绝对元素相对于其父项

    【讨论】:

      【解决方案4】:

      也许你应该像这样使用浮点数来划分你的内容:

      <div style="overflow: auto;">
          <div style="float: left; width: 600px;">
              Here is my content!
          </div>
          <div style="float: right; width: 300px;">
              Here is my sidebar!
          </div>
      </div>
      

      注意overflow: auto;,这是为了确保您的容器有一定的高度。浮动的东西将它们从 DOM 中取出,以确保您下面的元素不会与您的浮动浮动重叠,将容器 div 设置为具有 overflow: auto(或 overflow: hidden)以确保在绘制时考虑浮动你的身高。查看更多关于浮点数以及如何使用它们的信息here

      【讨论】:

        【解决方案5】:

        我能够用一层嵌套和一个棘手的边距绝对定位一个右浮动元素:

        function test() {
          document.getElementById("box").classList.toggle("hide");
        }
        .right {
          float:right;
        }
        #box {
          position:absolute; background:#feb;
          width:20em; margin-left:-20em; padding:1ex;
        }
        #box.hide {
          display:none;
        }
        <div>
          <div class="right">
            <button onclick="test()">box</button>
            <div id="box">Lorem ipsum dolor sit amet, consectetur adipiscing elit,
              sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
              Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
              nisi ut aliquip ex ea commodo consequat.
            </div>
          </div>
          <p>
            Lorem ipsum dolor sit amet, consectetur adipiscing elit,
            sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
            Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
            nisi ut aliquip ex ea commodo consequat.
          </p>
        </div>

        我决定将此设置为可切换的,这样您就可以看到它如何不影响周围文本的流动(运行它并按下按钮以显示/隐藏浮动的绝对框)。

        【讨论】:

        • 这是一个很棒的解决方案。但是你知道为什么#box 有一个绝对位置,但它的包裹元素.right 是静态定位的——仍然,#box 文本区域放在按钮下方?
        • @ArtixZ – .right 元素是父元素,因此它不是绝对的。当它的子 #box 被设置为绝对时,它会从文档流的其余部分中删除,但由于我没有告诉它在其他任何地方,它会保留在最初放置的位置。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-06
        • 1970-01-01
        • 2011-04-19
        相关资源
        最近更新 更多