Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.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 位于底部的元件&;从底部切断_Javascript_Html_Css_Flexbox - Fatal编程技术网

Javascript 位于底部的元件&;从底部切断

Javascript 位于底部的元件&;从底部切断,javascript,html,css,flexbox,Javascript,Html,Css,Flexbox,我有三个块,我希望它们始终位于底部,而不管视口高度如何。当没有足够的高度显示所有块时,我希望它们从底部隐藏,而不是从顶部隐藏 我厌倦了flexbox解决方案: .. 它几乎可以工作,除了低分辨率,块从顶部隐藏,底部仍然可见 我还尝试了另一种解决方案: .. 这样可以使顶部始终可见,但只会完全隐藏底部,包括其他两个块 我甚至尝试了一个JS解决方案: var vh = Math.max(document.documentElement.clientHeight, window.innerHeight

我有三个块,我希望它们始终位于底部,而不管视口高度如何。当没有足够的高度显示所有块时,我希望它们从底部隐藏,而不是从顶部隐藏

我厌倦了flexbox解决方案: .. 它几乎可以工作,除了低分辨率,块从顶部隐藏,底部仍然可见

我还尝试了另一种解决方案: .. 这样可以使顶部始终可见,但只会完全隐藏底部,包括其他两个块

我甚至尝试了一个JS解决方案:

var vh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
var topHeight = document.getElementById('top').offsetHeight;
console.log('Viewport Height: ' + vh);
function getHeight(element) {
    console.log(document.getElementsByClassName(element));
    var offsetHeight = document.getElementsByClassName(element)[0].offsetHeight;
    console.log('offsetHeight: ' + offsetHeight);
    var marginTop = vh - (topHeight + offsetHeight);
    console.log('marginTop: ' + marginTop);
    document.getElementsByClassName(element)[0].style.marginTop = marginTop + "px";
}
getHeight("card-1");
getHeight("card-2");
getHeight("card-3");

。。。但它仍然从顶部隐藏块

尝试CSS媒体查询:

在CSS的末尾,只需添加

@media screen and (max-height: 120px) {
    div#top {
        display: none;
        height: 0px;
    }
    #main {
      height: 100vh;
    }
}
[编辑]显然这不是oyu想要的

所以。。。在第二个jsbin示例中,将其添加到.cards类中:

position: sticky;
bottom: 0;
以及您的#卡id:

overflow: hidden;

但在chrome 35+上不起作用:


我的最佳选择是为chrome使用jquery插件:

最终使用Javascript和CSS媒体查询来实现所需的结果:

var vh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
var topHeight = document.getElementById('top').offsetHeight;

function getHeight(element) {
    var elementHeight = document.getElementsByClassName(element)[0].offsetHeight;
    var offsetTop = vh - (topHeight + elementHeight);
    var cardsContainerHeight = document.getElementById('cards').offsetHeight;
    if (elementHeight < cardsContainerHeight) {
        document.getElementsByClassName(element)[0].style.top = offsetTop + "px";
    }
}
var resize = function(event) {
    getHeight("card");
}();
var vh=Math.max(document.documentElement.clientHeight,window.innerHeight | 0);
var topHeight=document.getElementById('top')。offsetHeight;
函数getHeight(元素){
var elementHeight=document.getElementsByClassName(element)[0].offsetHeight;
var offsetTop=vh-(顶部高度+元件高度);
var cardsContainerHeight=document.getElementById('cards')。offsetHeight;
if(元件高度
在第一个示例中,您是否尝试移除
#卡片{flex flow:row wrap;}
?@cari刚刚尝试过,仍然是一样的。我没有时间在睡觉前编写适当的解决方案,但我觉得CSS媒体选择器可能正是您所寻找的。看看你是如何做到这一点的。在您的情况下,只需将块设置为
display:none
I希望
top
可见。只是隐藏块从底部向上,而他们仍然在底部。SRY我不知道你的意思是“隐藏块从底部向上”在我的第一个JSB链接,你看到文本“顶端”在中间div?但你确实看到了文本“底部”,因为当高度受到限制时,这些块会从上方隐藏,而不是从下方隐藏。。希望这就是你想要的不,第二个链接已经显示了一个位于底部的块的示例,并且从下面切断,但是,由于最大块的高度,第一个和第三个块在视口中不可见。