Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 浮动div-可变高度和可变列-无间隙_Javascript_Css_Dynamic_Css Float_Orientation - Fatal编程技术网

Javascript 浮动div-可变高度和可变列-无间隙

Javascript 浮动div-可变高度和可变列-无间隙,javascript,css,dynamic,css-float,orientation,Javascript,Css,Dynamic,Css Float,Orientation,我已使用小提琴进行了更新,请参见底部 我正在开发一个wordpress主题,用于iphone、iPad和其他webkit设备 我正在使用媒体查询根据设备的大小和方向更改div的宽度 但是,这些div向左浮动,以填充设备屏幕 我的问题是浮动div的高度是可变的。而高于一些的div导致了浮动元素的差距问题 我需要一个可能的修复建议,这样就永远不会有任何间隙,元素总是浮动的,即使它的路径中有一个更高的div 是否有一种可能的方法将div高度均衡到最高div,唯一的问题是它需要在iPad上改变方向。在i

我已使用小提琴进行了更新,请参见底部

我正在开发一个wordpress主题,用于iphone、iPad和其他webkit设备

我正在使用媒体查询根据设备的大小和方向更改div的宽度

但是,这些div向左浮动,以填充设备屏幕

我的问题是浮动div的高度是可变的。而高于一些的div导致了浮动元素的差距问题

我需要一个可能的修复建议,这样就永远不会有任何间隙,元素总是浮动的,即使它的路径中有一个更高的div

是否有一种可能的方法将div高度均衡到最高div,唯一的问题是它需要在iPad上改变方向。在iPhone上也没那么糟糕,因为只有一列。但在iPad上,肖像有2列,风景有3列

请参见下面的图表解释我的问题。





当前CSS

/* GLOBAL STYLE ( which iPhone uses first - 1 column ) ----------- */

.module {
    display: block;
    overflow: hidden;
    width: 100%;
    float: left;
}

/* IPADS (PORTRAIT - 2 column ) ----------- */
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : portrait) {

    .module {
        width: 50%;
    }

}

/* IPADS (LANDSCAPE - 3 Column ) ----------- */
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : landscape) {

    .module {
        width: 33.33%;
    }

}
基本标记

<div>

    <div class="module"></div>
    <div class="module"></div>
    <div class="module"></div>
    <div class="module"></div>
    <div class="module"></div>
    <div class="module"></div>
    <div class="module"></div>
    <div class="module"></div>
    <div class="module"></div>
    <div class="module"></div>

</div>


下面的小提琴模拟iPad(纵向)两列

请参见样式
.module
-
宽度:50%
,它模拟了此@media查询的外观

@media only screen
and (min-device-width : 320px)
and (max-device-width : 480px)
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : portrait) {
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : landscape) {


下面的提琴模拟iPad(横向)-三列

请参见样式
.module
-
宽度:33.33%
,它模拟了此@media查询的外观

@media only screen
and (min-device-width : 320px)
and (max-device-width : 480px)
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : portrait) {
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : landscape) {



这不能简单地通过浮动来解决-唯一的选择是使所有这些模块的大小相同(或为较小的模块添加一些余量)

您可以使用JavaScript将所有模块的高度设置为相等

这是缩小的jQuery插件:

(function(a){a.fn.equalHeight=function(){var b=0;this.each(function(){var c=a(this).height();c>b&&(b=c)});this.each(function(){a(this).height(b)})}})($);
您可以这样使用:

$('#modules').children().equalHeight();

另一个好的解决方案是CSS显示表。看看这篇文章:

就像我在评论中说的那样,你需要用javascript计算,并使用绝对定位。以下是一个例子:

//为每个模块生成随机高度,通常不需要这样做,因为
//在一个真正的应用程序中,它们有各种各样的内容。
$(“.module”)。每个(函数(i){
变量高度=(150+(Math.random()*100 | 0));
this.style.height=高度+px;
});
$(窗口)。绑定(“方向更改大小”,函数(e){
变量模块=$(“.module”),
columnWidth=模块[0]。偏移网络宽度,
保证金=10,
parentWidth=$(“.modules”).width(),
拟合=数学地板(parentWidth/(columnWidth+边距*2)),
columnHeights={},
我
对于(i=0;i
您需要绝对定位它们,并使用javascript手动计算位置。请看,它使用javascript来适应所有框(如果快速滚动,很容易看到,那么新框将不会立即出现)-它填充列,而不是我在DOM中假设的行,它们使用position:absolute是的,我看到了,但可能@Esailija方法也在做类似的事情,但是当我将position absolute添加到.module div中时,我的containing div callapses to nothing(如果您将任何内容定位为绝对值,它会这样做)Esalija和Eliseu方法都使用脚本来适应它——这是唯一的替代解决方案。但最稳定的解决方案是简单地使所有高度相同,这样它就会浮动。Position absolute会导致以百分比为单位的宽度出现一些滞后。另一种解决方案是使用javascript(使用removeChild/appendChild)创建列并填充它们。尝试过这种方法后,效果不错,但在方向上出现了问题。猜测,因为这与dom有关。无论如何谢谢你什么意思?方向改变事件?试试这个(jQ 1.7+,对其他人使用.bind):$(document).on('orientationchange',function(){$('#modules').children().equalHeight();})@媒体方向-好的,我将开始。$(窗口)。绑定(“方向更改调整大小”,函数(e){$('#模块')。子对象()。相等高度();})。触发器(“调整大小”);我已经试过了,但是在方向改变时,它没有更新,它使用了页面加载的原始高度。感谢您花时间做了一个JSFIDLE。虽然一旦我将position absolute添加到.module中,我的contain div就会崩溃。如果我真的成功了,你认为它会在@media-orientation(从横向到纵向)上起作用吗?我的包含div的宽度是100%,768px可能导致它无法工作。@user801773要做到这一点,您需要对javascript中的方向动态做出反应(
“onorientationchange”
“onresize”
),并重新计算和重新定位javascript中的所有内容(以及模块容器)。具有
100%
宽度的父项不是问题,您只需要在每次发生更改时动态检索父项宽度。在本例中,它被设置为static
768
,但我也可以设置
parentDiv.offsetWidth
。使用position
absolute
,所有位置计算都留给您,css不会为您做任何事情。这对我来说很棘手,我会尝试并坚持下去。奇怪的是,这么简单的东西怎么用CSS解决不了。我正在努力改变javascript的方向,当然javascript的方向改变必须重新加载页面才能进行必要的DOM改变,不是吗?CSS@media-orientations对我来说要简单得多,而且是webkit的充分证明:/@user801773不,它们不需要pagerelo