css 为什么我的绝对定位元素会影响页面大小?

r1zhe5dt  于 2023-06-07  发布在  其他
关注(0)|答案(3)|浏览(250)

我正在尝试创建一个设计元素,我想让它浮在屏幕右下角的边缘,
我只想展示其中的一半,而另一半我想放在屏幕之外。
我尝试使用position absolute来实现这一点,但由于某种原因,它会放大屏幕,而不是将元素放置在边缘之外。
我错过了什么

<div class="app-wrapper" style="position: relative;">
    <div class="half-hidden-element" style="
        position: absolute;
        width: 41.875vw;
        height: 41.875vw;
        left: 100%;
        background-color: black">
    </div>
 </div>
4ktjp1zp

4ktjp1zp1#

它不会影响页面大小你溢出的宽度div包含的元素
你将不得不通过使用溢出CSS属性来管理它

.app-wrapper {
  border: solid red;
  height: 25px;
}

body {
  overflow: hidden;
}
<div class="app-wrapper" style="position: relative;">
    <div class="half-hidden-element" style="
        position: absolute;
        width: 41.875vw;
        height: 41.875vw;
        left: 100%;
        background-color: black">
    </div>
 </div>
5uzkadbs

5uzkadbs2#

要做到这一点,需要body { overflow: hidden }和适当的计算,将一半的元素移动到视口右侧之外。
属性left,right,top,bottom描述的是相对于父元素大小的位置,而不是position: absolute元素本身。如果你想要50%的元素.half-hidden-element { width: 41.875vw }在父元素之外,你需要用41.875 / 2 = 20.9375替换它

  • left: calc(100% - 20.9375vw)
  • right: -20.9375vw

该代码片段在此解决方案旁边显示了使用CSS * 自定义属性 * 的解决方案。我添加了一些边界元素(需要body { overflow: auto })来检查最终的计算结果。

/* Makes borders part of total element size */
* { box-sizing: border-box }

body { margin: 0; overflow: hidden /**/ }

.app-wrapper {
    position: relative;
}

.half-hidden-element {
    position: absolute;

/* Solution with hardcoded values */
/* Assign either left or right, not both */
/*
    width: 41.875vw;
    height: 41.875vw;

    left: calc(100% - 20.9375vw);
    right: -20.9375vw;
*/

/* solution using custom properties */
    --size: 41.875;

    width : calc(var(--size) * 1vw); /* 1vw = 1% of current viewport width */
    height: calc(var(--size) * 1vw);

    /* Half size, moved right with negative value */
/*  left : calc(100% - var(--size) / 2 * 1vw); /* either */
    right: calc(var(--size) / 2 * -1vw);       /* or     */

    background-color: black;
}

/* Just to check correct positioning (needs body to overflow) */
.half-hidden-element { display: flex }
.lft { width: 50%; height: 100%; border: 1px solid red }
.rgt { width: 50%; height: 100%; border: 1px solid green }
<div class="app-wrapper">
    <div class="half-hidden-element">
        <div class="lft">L</div>
        <div class="rgt">R</div>
    </div>
</div>
zpqajqem

zpqajqem3#

<div class="app-wrapper" style="position: absolute;">
<div class="half-hidden-element" style="
    position: fixed;    width: 41.875vw;    
    height: 41.875vw;    
    left: 75%; 
    background-color: black">
</div>

相关问题