将div置于黄金比例:替代绝对位置?

乔恩·雪诺

我在下面的示例中建立了一个页面。您也可以在codepen上玩它

想法是,将深灰色的英雄框放置在视口的底部。到目前为止很容易。但是,如果屏幕的高度太小(例如,用于小型笔记本电脑),以致文本将填充大部分(或什至全部)视口,则很难实现背景图像。在这种情况下,英雄框应放置在黄金比例中,而不是视口的底部。

我已经在示例中构建了该解决方案。只需降低浏览器窗口的高度即可。

我只是觉得自己总体上做错了。目前,我将英雄,内容和页脚放置在绝对定位的div中。只要#content div中只有静态内容,就可以正常工作。但是,如果有例如手风琴或其他折叠/动态的东西,则必须重新计算页脚的位置。

我可以在调用比率函数时轻松地做到这一点。但是与此同时,整个解决方案的确对我来说似乎是错误的或过于复杂。

是否存在另一种更简单的解决方案,将具有相对位置的内容div放置在hero容器之后?

// call function after everything has been loaded
$(window).load(function() { 
    checkRatio();
});

window.dispatchEvent(new Event('resize'));

$(window).resize(function() {
    checkRatio();
});


function checkRatio() {   

    var ratio = 0;
    var contentTopPos = 0;
    var footerTopPos = 0;

    var windowHeight = $(window).height();
    var headerHeight = $("#hero").height();
    var contentHeight = $("#content").height();

    ratio = (windowHeight / headerHeight);
    contentTopPos = (windowHeight / 1.618);


    if(ratio < 1.618) {
        // Window too small or Content too long
        $("#hero").css('bottom', 'initial');            
        $("#hero").css('top', contentTopPos);            
    } else {
        // Default Position: bottom 0
        $("#hero").css('top', 'initial');
        $("#hero").css('bottom', 0);        
    }


    var sumHeight  = $("#hero").offset().top + $("#hero").height();
    $("#content").css('top', sumHeight + "px");   

    footerTopPos = (sumHeight + contentHeight);
    $("#footer").css('top', footerTopPos + "px");
}
body {
     padding: 0;
     margin: 0;
     font-family:Verdana, Geneva, Tahoma, sans-serif;
}
#header_img { 
     position: fixed;
     top: 0;
     height: 100vh;
     width: 100%;
     background-size: cover;
     z-index: 1;
 }

 #hero_container {
     position: relative;
     height: 100vh;
     width: 100%;
 }
 #hero {
     position: absolute;
     margin: 0 5%;
     bottom: 0;
     width: 90%;
     height: auto;
     background-color: #333;
     box-shadow: 0 -2px 6px rgba(0, 0, 0, 0.46);
     z-index: 2;
 }

 #hero_text {
     padding: 20px;
     color: #fff;
 }

 #content {
     position: absolute;
     width: 100%;
     background-color: transparent;
     z-index: 3;
 }

 section {
     background-color: #dedede;
     padding: 20px;
     border-bottom: solid 1px #333;
 }

 #footer {
     position: absolute;      
     width: 100%;      
     z-index: 3;
     background-color: #999;
     color: #555;
 }
 #footer_text {
     padding: 10px 20px;
 }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<div id="header_img" style="background: #ffffff url('https://cdn4.vectorstock.com/i/1000x1000/80/28/free-sample-rubber-stamp-vector-13448028.jpg') no-repeat center top; background-size: cover;"></div>


<div id="hero_container">
    <div id="hero">
        <div id="hero_text">
            <h1>Lorem ipsum dolor sit</h1>
            <h4>Cras felis leo, pellentesque non dui ut, molestie mollis lorem.</h4>
            <p>Fusce venenatis metus id est venenatis ornare. Aliquam id ante et nulla rutrum malesuada vel sit amet felis. Maecenas maximus, quam vitae cursus ultrices, est augue consequat magna, vitae bibendum ex urna eget lacus. Donec quis sagittis diam.</p>
        </div>
    </div>
</div>


<div id="content">
    <section>
        <h2>Vivamus molestie</h2>
        <p>Sem sit amet posuere elementum, ligula dolor laoreet eros, sed ultrices mi lacus quis est. Sed ut venenatis metus, id consectetur mauris.</p>
    </section>

    <section>
        <h2>Mauris sollicitudin ante est</h2>
        <p>Ut ultrices neque volutpat quis. Aenean bibendum dui sed pulvinar vestibulum. Vestibulum finibus ornare dui at lobortis.</p>
    </section>

    <section>
        <h2>Sed consequat euismod sem</h2>
        <p>In venenatis lacus luctus in. Nam elementum dolor a magna eleifend consectetur. Curabitur efficitur magna erat, et eleifend enim placerat sit amet. Fusce cursus, sem vel porta tempor, diam dolor auctor lorem, eu venenatis velit lorem ac lectus.</p>
    </section>
</div>


<div id="footer">
    <div id="footer_text">&copy; 2020 SchweizerSchoggi</div>        
</div>

koder613

.hero-container {
    height: 100vh;
    display: flex;
    
}
.hero-content {
    width: 100%;
    background: grey;
    align-self: flex-end;
}

@media only screen and (max-height: 300px) {
  .hero-container{
    padding-top: 25vh;
  }
  .hero-content{
    align-self: flex-start;
  }
}
<div class="hero-container">
    <div class="hero-content">
         <h1>Lorem ipsum dolor sit</h1>
            <h4>Cras felis leo, pellentesque non dui ut, molestie mollis lorem.</h4>
            <p>Fusce venenatis metus id est venenatis ornare. Aliquam id ante et nulla rutrum malesuada vel sit amet felis. Maecenas maximus, quam vitae cursus ultrices, est augue consequat magna, vitae bibendum ex urna eget lacus. Donec quis sagittis diam.</p>
        
    </div>
</div>

<div id="content">
    <section>
        <h2>Vivamus molestie</h2>
        <p>Sem sit amet posuere elementum, ligula dolor laoreet eros, sed ultrices mi lacus quis est. Sed ut venenatis metus, id consectetur mauris.</p>
    </section>

    <section>
        <h2>Mauris sollicitudin ante est</h2>
        <p>Ut ultrices neque volutpat quis. Aenean bibendum dui sed pulvinar vestibulum. Vestibulum finibus ornare dui at lobortis.</p>
    </section>

    <section>
        <h2>Sed consequat euismod sem</h2>
        <p>In venenatis lacus luctus in. Nam elementum dolor a magna eleifend consectetur. Curabitur efficitur magna erat, et eleifend enim placerat sit amet. Fusce cursus, sem vel porta tempor, diam dolor auctor lorem, eu venenatis velit lorem ac lectus.</p>
    </section>
    
</div>

<div id="footer">
    <div id="footer_text">&copy; 2020 SchweizerSchoggi</div>        
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在绝对位置的div中滚动div

来自分类Dev

绝对位置:负值

来自分类Dev

HTML:了解居中的Div的绝对位置

来自分类Dev

将WPF控件的绝对位置置于所有其他元素之上

来自分类Dev

将Div与绝对位置垂直对齐

来自分类Dev

在绝对位置的div中截断文本

来自分类Dev

将Div置于绝对位置的中心的更好方法是?

来自分类Dev

JavaScript获取div的绝对位置

来自分类Dev

将绝对位置div标签的子项居中

来自分类Dev

如果我将内部div设置为绝对位置,则类容器不起作用

来自分类Dev

居中div绝对位置?

来自分类Dev

将绝对位置div的高度扩展为内部内容的大小

来自分类Dev

CSS将div置于绝对div下

来自分类Dev

CSS将绝对位置div限制为父级大小

来自分类Dev

您可以将没有绝对位置的子div大于父div

来自分类Dev

需要居中div绝对位置

来自分类Dev

将div居中于左,右和绝对位置

来自分类Dev

HTML:了解居中的Div的绝对位置

来自分类Dev

浮动元素被绝对位置div裁剪

来自分类Dev

如何在位置相对的div内将绝对位置的div对齐到中心?

来自分类Dev

绝对位置的div与相对位置的div不重叠

来自分类Dev

将div定位到已经居中的内容而没有绝对位置

来自分类Dev

CSS:相对位置在相对位置div中的绝对位置

来自分类Dev

将div底部的元素与动态边框对齐(绝对位置+边距)

来自分类Dev

具有绝对位置的Div位置不相等

来自分类Dev

将绝对位置div的高度扩展为内部内容的大小

来自分类Dev

位置底部紧挨着 2 div 的绝对位置

来自分类Dev

单击旁边的绝对位置弹出 div

来自分类Dev

将绝对圆角 div 居中在另一个绝对位置 div 之上