下面是一个很长的解释,但这是有效沟通我试图解决的问题的唯一方法...
我(有点绝望,但完全不成功)试图不使用绝对定位来覆盖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> »</span></span>
</div> <!--end breadcrumbs -->
</div><!-- end Main -->
<div id="imageWrapper">
<div id="imageInnerWrapper">
<div id="featureImage">
<div class="filename"><h1>~ Bryce Canyon Sunrise | Bryce Canyon | Utah ~</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;
}
7条答案
按热度按时间uxhixvfz1#
你现在也可以用网格来做到这一点。
第一个
osh3o9ms2#
具有动态高度的块的Div背景可以使用没有绝对定位的flexbox实现:
第一个
大约99%的浏览器支持该解决方案。
mum43rcc3#
简易小提琴:仅CSS
一些家伙张贴了另一个,但它有一堆额外的不必要的代码和一些JS另一个职位有答案,但缺少一些东西
第一个
http://jsfiddle.net/3WDf7/
kpbpu0084#
找到了!!:D
纯CSS解决方案非常简单。放置以下内容。
将css
#main
中的内容替换为我在上面所做的**。因此,删除以下内容:
说明:此处的主要思想是浮动主元素,使其具有一定的高度,这样它就不会将所有内容向下推。但要使其溢出可见。内容溢出不会影响主元素的同级。
57hvy0tb5#
None of the previous answers actually help with your requirement, which is to allow
PPMiniCart
to expand and contract without pushingimageWrapper
down.The trick here is to give
wpPayPal
a fixed height large enough to hold the contracted version ofPPMiniCart
(40px will do - this will give the shopping cart enough room, without pushingimageWrapper
too far down).Then give
main
(the container that holdswpPayPal
) az-index
greater than that ofimageWrapper
so that it overflows over it.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
onwpPayPal
afterPPMiniCart
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:Please note the careful choice of
afterShow
andonHide
callbacks, if you try to do it any different (settingoverflow: visible
beforePPMiniCart
expands or removing it beforePPMiniCart
contracts)PPMiniCart
will "float up" during the transition.Finally, a working fiddle is worth a thousand words.
zy1mlcev6#
为您的问题找到了一个优雅的解决方案,没有绝对定位或浮动使用flexbox -主要优势是两个div高度都考虑当计算父高度。非常有用的覆盖文本在图像上:
第一个
7dl7o3gd7#
也可以使用flexbox来制作一个没有绝对位置的标签容器:
第一个