将div固定在另一个div上方的底部

时间:2013-01-11 19:10:47

标签: html css

我一直在开发一个带水平滚动的移动布局。

但现在我遇到了一个问题:

有一个NAV元素粘在页面的底部,没有问题,但我希望在顶部和底部实现带有“框架”的“软木板”效果。再一次,最重要的一个根本没有问题,但是我在试图让底部停留在底部并且高于NAV栏时遇到了很多麻烦。

这是这样的: enter image description here

基本上,红色方块是当前视图/屏幕,导航栏固定在底部,如果我滚动到另一个部分,它会按预期保持在屏幕底部,顶部蓝色条(顶部框架)也是如此)。

如何让底部的蓝色条保持在预期/示例位置?

HTML:

    <!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="format-detection" content="telephone=no" />
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />
    <title>Ptfolio</title>
    <link rel="stylesheet" href="css/style.css">
    <script src="js/less.js" type="text/javascript"></script>
    <link href='http://fonts.googleapis.com/css?family=Faster+One' rel='stylesheet' type='text/css'>
</head>
<body>
    <nav>
        <ul>
            <li><a href="#splash">Home</a></li>
            <li><a href="#next">About</a></li>
            <li><a href="#circuit">Circuit</a></li>
        </ul>
    </nav>
        <div id="wrapper">
            <section id="splash">
                <header>About Me</header>
                <div>
                    Lorem ipsum just testing things
                </div>
                </section>
            <section id="next">
                <div id="frame-top">
                    <header>Portfolio</header>

                    <div id="content">&nbsp</div>
                </div>
                <div id="frame-bottom">&nbsp</div>
            </section>
            <section id="circuit">
                <header>Contact</header>
                <div class="main">
                </div>
            </section>
        </div> <!-- wrapper -->
        <script type="text/javascript" src="cordova-2.3.0.js"></script>
        <script type="text/javascript" src="js/index.js"></script>
        <script type="text/javascript">
            app.initialize();
        </script>
</body>
</html>

和CSS:

        /* --Meyerweb */
/* http://meyerweb.com/eric/tools/css/reset/ 
   v2.0 | 20110126
   License: none (public domain)
*/

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section {
    display: block;
}
body {
    line-height: 1;
}
ol, ul {
    list-style: none;
}
blockquote, q {
    quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
    content: '';
    content: none;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}
/* --Meyerweb */

html, body { 
    height: 100%;
    overflow-x: auto;
}

#wrapper { 
    display: table; 
    width: 350%; 
    height: 100%;
    -webkit-box-sizing: border-box;
    padding-bottom: 3em;
    position: relative;
}

#wrapper > section { 
    display: table-cell; 
    height: 100%; 
    width: 25%;
}

header {
    min-height: 2em;
    font-size: 2em;
}


section#splash {
    background: url("../img/bg_grey.png") repeat;
}

section#splash > header {
    font-family: 'Faster One', cursive;
}

section#next {
    background: url("../img/cork.jpg") repeat;
    z-index: 1;
    padding-bottom: 3.938em;
}

#frame-top {
    background: url("../img/frame.png") repeat-x;
    background-position: top;
    z-index: 3;
    width: 100%;
    padding-top: 1em;
}

#frame-bottom {
    background: url("../img/frame.png") repeat-x;
    height: 16px;
    background-position: top;
    z-index: 4;
}

#content {
    height: 100%;
    z-index: 2;
}

section#circuit {
    background: url("../img/circuit-tile-02.png") repeat;
}

.st-scroll {
    top: 0;
    left: 0;
    transition: all 0.6s ease-in-out;

    /* Let's enforce some hardware acceleration */
    -webkit-transform: translate3d(0, 0, 0);
    -webkit-backface-visibility: hidden;
}

nav {
    bottom: 0;
    position: absolute;
    background: -webkit-gradient(
        linear,
        left bottom,
        left top,
        color-stop(0.3, #303030),
        color-stop(0.5, #212121),
        color-stop(0.7, #575657)
    );
    height: 3em;
    width: 100%;
    z-index: 99;
}

nav ul {
    width:  50%;
    height: 100%;
    color: #FFF;
    margin-right: auto;
    margin-left: auto;
}

nav ul li{
    width: 25%;
    height: 100%;
    display: inline-block;
}

我尝试了从边距,填充,高度和最小高度的一切,但无法达到预期的效果。 任何人都可以指出我做错了吗?

编辑:此时页面的屏幕截图: Chrome - enter image description here

Safari - enter image description here

3 个答案:

答案 0 :(得分:2)

如果我正确阅读,问题是背景是悬挂在元素的顶部而不是底部?

background-position: bottom;添加到该元素的样式中。

<小时/> 编辑以添加我的解决方案css:

  • HTML与原始帖子相同
  • “Meyerweb”CSS保持不变
  • 更改了CSS:
html, body { 
    height: 100%;
    overflow: hidden;
}
body {
    overflow-x: auto;
    /* allows that horizontal scrolling */
}

#wrapper {  
    width: 350%; 
    position: absolute;
    top: 0px;
    bottom: 0px;
    /* ^-- these three lines replace height:100%
     * and correct some layout quirks */
}
#wrapper > section { 
    display: inline-block; 
    height: 100%;
    margin-left: -4px;
    margin-bottom: -4px;
}

#wrapper > section:first-child  {
    margin-left: 0px;
    /* combined with -4px margin above, eliminates gaps between sections */
}

#wrapper > section, section > header, section > div {
    width: 25%;
    /* not sure why 25%, since you seem to only
     * have three sections... but either way,
     * the same value is needed in multiple locations
     * so it's pulled out on its own here for
     * ease of maintenance  */
}

section > header {
    position: absolute;
    top: 0px;
    height: 3em;
}
section > div {
    position: absolute;
    top: 0px;
    height: 100%;
    padding-top: 3em;
    padding-bottom: 3em; 
    box-sizing: border-box;
}

section#splash { /*unchanged*/
    background: url("../img/bg_grey.png") repeat;
}
section#next { /*unchanged*/
    background: url("../img/cork.jpg") repeat;
    z-index: 1;
}
section#next > header#frame-top { /*unchanged*/
    background: url("../img/frame.png") repeat-x;
    background-position: top;
    z-index: 3;
}
section#next > div#frame-bottom {
    background: url("../img/frame.png") repeat-x;
    background-position: bottom;
    background-origin: content-box;
    z-index: 3;
}
section#circuit { /*unchanged*/
    background: url("../img/circuit-tile-02.png") repeat;
}

.st-scroll { /*unchanged*/
    top: 0;
    left: 0;
    transition: all 0.6s ease-in-out;

    /* Let's enforce some hardware acceleration */
    -webkit-transform: translate3d(0, 0, 0);
    -webkit-backface-visibility: hidden;
}

nav {
    bottom: 0;
    left: 0;
    position: fixed;
    background: -webkit-gradient(
        linear,
        left bottom,
        left top,
        color-stop(0.3, #303030),
        color-stop(0.5, #212121),
        color-stop(0.7, #575657)
    );
    background: linear-gradient(to top, #303030 30%, #212121 50%, #575657 70%);
    /* ^-- for non-webkit */
    height: 3em;
    width: 100%;
    z-index: 5;
}

nav ul { /*unchanged*/
    width:  50%;
    height: 100%;
    color: #FFF;
    margin-right: auto;
    margin-left: auto;
}

nav ul li{ /*unchanged*/
    width: 25%;
    height: 100%;
    display: inline-block;
}

答案 1 :(得分:0)

使用“bottom:0px”代替保证金。我没有深入研究这个,但我有一个自己的项目,div与底部对齐,并且已修复。

答案 2 :(得分:0)

经过@joequincy的一些帮助以及大量的黑客攻击和篡改代码,我已经达到了完美的解决方案:

    <!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="format-detection" content="telephone=no" />
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />
    <title>Ptfolio</title>
    <link rel="stylesheet" href="css/style.css">
    <script src="js/less.js" type="text/javascript"></script>
    <link href='http://fonts.googleapis.com/css?family=Chango' rel='stylesheet' type='text/css'>
    <link href='http://fonts.googleapis.com/css?family=Londrina+Solid' rel='stylesheet' type='text/css'>
</head>
<body>
    <nav>
        <ul>
            <li><a href="#splash">Home</a></li>
            <li><a href="#next">About</a></li>
            <li><a href="#circuit">Circuit</a></li>
            <li>Placeholder</li>
        </ul>
    </nav>
    <div id="wrapper">
        <div class="cell">
            <section id="splash">
                <header>Celso Santos</header>
                <div class="container">
                    <div>
                        Lorem ipsum just testing things
                    </div>
                </div>
            </section>
        </div>
        <div class="cell">  
            <section id="next">
                <header>Portfolio</header>
                <div id="frame-top"></div>
                    <div class="container">
                        <div id="content">&nbsp</div>
                    </div>
                <div id="frame-bottom"></div>
            </section>
        </div>
        <div class="cell">
            <section id="circuit">
                <header>Contact</header>
                <div class="container"></div>
            </section>
        </div>
    </div> <!-- wrapper -->
    <script type="text/javascript" src="cordova-2.3.0.js"></script>
    <script type="text/javascript" src="js/index.js"></script>
    <script type="text/javascript">
        app.initialize();
    </script>
</body>
</html>

和CSS:

/* --Meyerweb */
/* http://meyerweb.com/eric/tools/css/reset/
   v2.0 | 20110126
   License: none (public domain)
*/

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
    display: block;
}
body {
    line-height: 1;
}
ol, ul {
    list-style: none;
}
blockquote, q {
    quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
    content: '';
    content: none;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}
/* --Meyerweb */

html, body {
    height: 100%;
    overflow: hidden;
}

#wrapper {
    display: table;
    width: 300%;
    height: 100%;
    -webkit-box-sizing: border-box;
    margin-bottom: -3em;
}

#wrapper > .cell { display: table-cell; height: 100%; width: 25%; }

#wrapper > .cell > section { position: relative; height: 100%; }

.container { 
  position: absolute; 
  top: 4em; right: 15px; bottom: 4em; left: 15px; 
  overflow-y: auto; border: 1px solid #000000; }

#wrapper > section {
    display: table-cell;
    height: 100%;
    width: 25%;
}

header {
    min-height: 2em;
    font-size: 2em;
    text-align: center;
}


section#splash {
    background: url("../img/bg_grey.png") repeat;
}

section#splash > header {
    font-family: 'Chango', cursive;
}

section#next {
    background: url("../img/cork.jpg") repeat;
    z-index: 1;
    position: relative;
}

section#next > header {
    top: 20px;
    font-family: 'Londrina Solid', cursive;
    color: rgba(124, 52, 24, 0.92);
    text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.83);
    width: 100%;
    position: relative;
}

section#next > div#frame-top {
    background: url("../img/frame.png") repeat-x;
    background-position: top;
    z-index: 3;
    width: 100%;
    position: absolute;
    top: 0px;
    height: 16px;
}

#frame-top > header {
    font-family: 'Londrina Solid', cursive;
    color: rgba(124, 52, 24, 0.92);
    text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.83);
}

#next > .container {
    bottom: 5em;
}

#frame-bottom {
    background: url("../img/frame.png") repeat-x;
    height: 16px;
    background-position: top;
    z-index: 4;
    position: absolute;
    bottom: 3em;
    width: 100%;
}

#content {
    height: 100%;
    z-index: 2;
    min-height: 100%;
}

section#circuit {
    background: url("../img/circuit-tile-02.png") repeat;
}

#circuit > header {
    text-shadow: 0px 2px 3px #666;
}

.st-scroll {
    top: 0;
    left: 0;
    transition: all 0.6s ease-in-out;

    /* Let's enforce some hardware acceleration */
    -webkit-transform: translate3d(0, 0, 0);
    -webkit-backface-visibility: hidden;
}

nav {
    bottom: 0;
    position: fixed;
    height: 3em;
    width: 100%;
    z-index: 99;
    background-image: linear-gradient(bottom, #333333 10%, #525252 50%, #525252 80%);
    background-image: -o-linear-gradient(bottom, #333333 10%, #525252 50%, #525252 80%);
    background-image: -moz-linear-gradient(bottom, #333333 10%, #525252 50%, #525252 80%);
    background-image: -webkit-linear-gradient(bottom, #333333 10%, #525252 50%, #525252 80%);
    background-image: -ms-linear-gradient(bottom, #333333 10%, #525252 50%, #525252 80%);
    box-shadow: 0px -3px 3px #333333;
}

nav ul {
    width:  80%;
    height: 100%;
    color: #FFF;
    margin-right: auto;
    margin-left: auto;
}

nav ul li{
    width: 20%;
    height: 100%;
    display: inline-block;
}

我保留了桌子,整齐地对齐了一切(即使是那些尴尬的空间&#34;)然后保持一切整洁的秘密就是使用溢出:隐藏在体内。 现在,这确实存在其他问题,例如你现在无法垂直或水平滚动,但鉴于这不是问题(导航应该使用导航栏来模拟不同的视图),它现在可以正常工作,没有任何问题JS。