有没有办法在CSS中保留锚?

时间:2012-02-18 02:40:19

标签: html css anchor

我有一个固定的标题高度50px。在我的身体里,我有很多锚点。问题是,当我点击指向锚点的链接时,锚点出现在我的固定标题下,我丢失了50px的内容(我需要向上滚动50px来读取标题下的内容)。

有没有办法保留50px的锚点?我的身体充满了很多盒子(div),它们之间有一个边缘,所以我不能放置50px的空div然后锚定它..

HTML:

<div id="header"></div>
<div id="content">
     <div class="box" id="n1"></div>
     <div class="box" id="n2"></div>
     <div class="box" id="n3"></div>
</div>

的CSS:

#header{
    height: 40px;
    width: 100%;
    margin: 0px;
    padding: 0px;
    position: fixed;
    text-align: center;
    z-index:2;
}

#content{
    padding-top: 50px; 
    margin: 0px;
}

.box {
    width: 80%;
    margin-left: auto;
    margin-right: auto;
    vertical-align : top;
    padding: 1.4%; /* Keep it in percent (%) */
    margin-bottom: 30px;
    min-height: 200px;
}

6 个答案:

答案 0 :(得分:6)

如果标题是真正修复的,则将锚点放在可滚动的div中。然后包含锚点的div将滚动而不是整个页面。访问小提琴,然后单击anchor1。它转到了anchor2。等等。

http://jsfiddle.net/mrtsherman/CsJ3Y/3/

css - 设置隐藏在body上的溢出以防止默认滚动。在顶部和底部设置的新内容区域上使用绝对位置。这会强制它伸展以适应剩余的视口窗口。

body { overflow: hidden; }
#header { position: fixed; top: 0; left: 0; width: 100%; height: 50px; background: gray; border: 1px solid black; }
#content { 
    overflow: scroll; 
    position: absolute;
    top: 50px;
    bottom: 0px;
    width: 100%;
    border: 1px solid blue; 
}

html

<div id="header">header</div>
<div id="content">
    <div>
        Page Content <br />
        <a id="a1" href="#anchor2" name="anchor1">Anchor 1</a>                
        <a id="a2" href="#anchor1" name="anchor2">Anchor 2</a>   
    </div>
</div>​

答案 1 :(得分:4)

如果您使用jQuery,则使用此功能:

function scrollToAnchor() {
    if($(".jquery-anchor").length > 0 && document.URL.indexOf("#") >= 0){
    var anchor = document.URL.split("#")[1];
    $(".jquery-anchor").each(function() {
        if($(this).attr("name") == anchor) {
            $("html,body").animate({
                    scrollTop: $(this).offset().top - 50},
                'slow');
            }
        });
    }
}

然后将类“jquery_anchor”添加到您的锚点

答案 2 :(得分:2)

对于Pure CSS解决方案,只需使用另一个带有oposited margin的div :)

<style>
.anchor {
     margin-top: -50px; 
     margin-bottom: 50px;
}
</style>

<div id="n1" class="anchor"></div>
<div class="box"></div>

答案 3 :(得分:0)

我知道这是一个老话题-但也许其他人也有同样的问题。

机会正在为每个锚定的div设置顶部填充,如下所示:

.box { padding-top:50像素; ... }

现在,您的锚点滚动将到达之前没有任何空容器的框,并且您在CSS中添加的填充将为您提供空间,以在标题的正下方显示内容。

答案 4 :(得分:0)

// For modern browsers, just add the CSS3 :target selector to the page. 
// This will apply to all the anchors automatically.
// ref: http://stackoverflow.com/a/21707103/6220029

:target {
    display: block;
    position: relative;
    top: -120px; 
    visibility: hidden;}

答案 5 :(得分:0)

欢迎来到未来:

.box {
  scroll-margin-top: 50px;
}

来源:https://css-tricks.com/almanac/properties/s/scroll-margin/