Pin和Unpin元素仅使用CSS

时间:2016-01-12 10:43:11

标签: javascript jquery html css css3

我一直在使用position: fixed;来固定屏幕上的元素,但是一旦我取消它们,它们就会从屏幕上消失(滚动到几行之后)并出现在文档的开头。< / p>

例如:
如果元素在第5行未固定,它应该保留在文档的第5行,但无论从何处取消固定,它都会跳回到顶部。

我一直在钉扎和取消固定,

.pinned {
  position: fixed;
}

.unpinned {
  position: relative;
}

链接到CodePen

那么,有没有什么方法可以将元素的位置(取消固定)设置到 位置,从中取消固定 仅使用CSS(或最小化) JS如果不能使用纯CSS)?

P.S。我在尝试取消固定时尝试使用absoluterelativestatic,但似乎都没有效果。

3 个答案:

答案 0 :(得分:3)

没有。你不能单独用CSS做这件事。您需要使用JavaScript来达到预期的效果。

将JavaScript更改为以下内容:

var el = document.getElementById('element');
function toggle(){
    if(el.className == 'pinned'){
        el.style.top = (document.body.scrollTop+el.getBoundingClientRect().top)+'px';
        el.className = 'unpinned';
    }else{
        el.style.top = el.getBoundingClientRect().top+'px';
        el.className = 'pinned';
    }
}

这个CSS:

.unpinned{
    position: absolute;
}

此代码将更改元素的top属性,然后在固定位置和绝对位置之间切换。

答案 1 :(得分:1)

您可以将元素粘贴到它的位置:

make_call

+取消固定时的一些代码 和

pjsua.c

演示:http://codepen.io/anon/pen/GoEGPZ
避免它粘在卷轴上方:http://codepen.io/anon/pen/bERKzW

仅在CSS中无法执行此操作

答案 2 :(得分:0)

您可以使用JavaScript方法检索元素相对于视口的位置。 https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect