css 无绝对位置的叠加Div

jutyujz0  于 2022-12-05  发布在  其他
关注(0)|答案(7)|浏览(198)

下面是一个很长的解释,但这是有效沟通我试图解决的问题的唯一方法...
我(有点绝望,但完全不成功)试图不使用绝对定位来覆盖div。这种需要源于我通过Javascript在网站上放置的一个paypal购物车。购物车的自然位置是硬靠在网页的顶部空白处(而不是它包含的div,即**#wpPayPal**,或者这个div的 Package 器,#main)。
脚本的作者强烈建议不要自定义购物车的样式表,但是我发现他写的一个教程可以将购物车插入到占位符div中,并提供了有效的容器定位说明-我可以将购物车定位在站点顶部横幅部分的下方。
购物车的HTML表单和每个表单中的ul元素在购物车的样式表中都有高度要求,这会将页面的主要内容(由容器div**#imageWrapper** Package )推到页面的底部太远而无法接受。
我试过将#imageWrapper放在#main之上,但没有成功。我试过将#imageWrapper绝对定位,但这会让页脚自由浮动。#imageWrapper的高度是可变的,因此我不想用高度来固定页脚,因为防止重叠的最小高度会将页脚向下推得太远,以至于网站的大部分内容都无法看到页脚。
我也试过从cart表单的CSS中提取position:relative,但是cart会立即浮回到网页的顶部。
然后我读取了一个article on,使用position:relative和z-index来覆盖div。在#main(包裹贝宝购物车的div)上加了-1,但是购物车消失了,也不确定它去了哪里,因为站点的breadcrumb nav(也是用#main包裹的)仍然在那里。
然后,我将main的z索引设置为0,并应用position:relative to #imageWrapper,z索引为100。购物车再次出现,但仍然按住#imageWrapper。
欢迎提出建议。我不是一个界面设计师,只是一个知道如何使用Google的人,所以提前感谢你清楚地阐明了你的解决方案:)另外,仅供参考,目前我将cart表单的最小高度要求设置为0,并将其中的UL元素设置为height:auto。由于cart中只有一个项目,这允许#imageWrapper在页面上移动到足够高的位置,以达到可接受的程度,但这不是一个可行的长期解决方案。
这是一个example page--要查看购物车,请使用主图片下方的下拉菜单添加一个项目。在它的展开状态下,您将看到#imageWrapper是如何与它相对的。
我已经包括了下面的部分违规HTML/CSS:

<div id="main">
    <div id="wpPayPal">
    </div><!--end wpPayPal-->
    <div id="breadcrumbs">
        <span class="B_crumbBox"><span class="B_firstCrumb"><a class="B_homeCrumb" href="/">home</a></span> &raquo;</span></span>
    </div> <!--end breadcrumbs -->
</div><!-- end Main -->

<div id="imageWrapper">
    <div id="imageInnerWrapper">
        <div id="featureImage">
            <div class="filename"><h1>~&nbsp;Bryce Canyon Sunrise | Bryce Canyon | Utah&nbsp;~</h1>
            </div><!--end filename-->

等等。

#main {
    display: inline;
    position: relative;
    z-index: 0;
}

#imageWrapper {
    clear: both;
    width: 840px;
    margin: 0 auto;
    padding: 0;
    position: relative;
    z-index: 100;
}

#imageInnerWrapper {
    width: 840px;
    margin: 0 auto;
    padding: 0;
    position: relative;
    z-index: 100;
}

#featureImage {
    width: 840px;
    margin: 0 auto;
    padding: 0;  
}

#wpPayPal {
    overflow: hidden;
    float: right;
    margin-right: 100px;
    min-width: 365px;
    min-height: 20px;
}

/* Override the default Mini Cart styles */

#wpBody #PPMiniCart form {
    position: relative;
    right: auto;
    width: auto;
    min-height: 0;
}

#wpBody #PPMiniCart form ul {
    height: auto;
}
uxhixvfz

uxhixvfz1#

你现在也可以用网格来做到这一点。
第一个

osh3o9ms

osh3o9ms2#

具有动态高度的块的Div背景可以使用没有绝对定位的flexbox实现:
第一个
大约99%的浏览器支持该解决方案。

mum43rcc

mum43rcc3#

简易小提琴:仅CSS
一些家伙张贴了另一个,但它有一堆额外的不必要的代码和一些JS另一个职位有答案,但缺少一些东西
第一个
http://jsfiddle.net/3WDf7/

kpbpu008

kpbpu0084#

找到了!!:D
纯CSS解决方案非常简单。放置以下内容。

#main {
float: right;
overflow: visible;
position: relative;
z-index: 1000;
height: 177px;
width: 100%;
}

css #main中的内容替换为在上面所做的**。

因此,删除以下内容:

display: inline;
position: relative;
z-index: 0;

说明:此处的主要思想是浮动主元素,使其具有一定的高度,这样它就不会将所有内容向下推。但要使其溢出可见。内容溢出不会影响主元素同级

57hvy0tb

57hvy0tb5#

None of the previous answers actually help with your requirement, which is to allow PPMiniCart to expand and contract without pushing imageWrapper down.
The trick here is to give wpPayPal a fixed height large enough to hold the contracted version of PPMiniCart (40px will do - this will give the shopping cart enough room, without pushing imageWrappertoo far down).

#wpPayPal {
    height:40px;
}

Then give main (the container that holds wpPayPal ) a z-index greater than that of imageWrapper so that it overflows over it.

#main {
    z-index: 1;
}
#imageWrapper {
    z-index: 0;
}

Setting imageWrapper z-index to 100 kind of overdoes it, I would recommend 0 like I did above.
You also need some JavasScript to set overflow: visible on wpPayPal after PPMiniCart expands and remove it before it contracts. Fortunately Mini Cart JS exposes a nice event-driven API that allows custom callbacks. Since you are using jQuery in your webpage let's take advantage of that:

PAYPAL.apps.MiniCart.render({
    parent: 'wpPayPal',
    events: {
        afterShow: function () {
            $("#wpPayPal").css("overflow", "visible");
        },
        onHide: function () {
            $("#wpPayPal").css("overflow", "");
        }
    }
});

Please note the careful choice of afterShow and onHide callbacks, if you try to do it any different (setting overflow: visible before PPMiniCart expands or removing it before PPMiniCart contracts) PPMiniCart will "float up" during the transition.
Finally, a working fiddle is worth a thousand words.

zy1mlcev

zy1mlcev6#

为您的问题找到了一个优雅的解决方案,没有绝对定位或浮动使用flexbox -主要优势是两个div高度都考虑当计算父高度。非常有用的覆盖文本在图像上:
第一个

7dl7o3gd

7dl7o3gd7#

也可以使用flexbox来制作一个没有绝对位置的标签容器:
第一个

相关问题