Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 仅使用CSS固定和取消固定元素_Javascript_Jquery_Html_Css - Fatal编程技术网

Javascript 仅使用CSS固定和取消固定元素

Javascript 仅使用CSS固定和取消固定元素,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我一直在使用position:fixed将元素固定在屏幕上,但一旦我取消固定它们,它们就会从屏幕上消失(在滚动到几行之后),并出现在文档的开头 例如: 如果元素在第5行取消固定,它应该保持在文档的第5行,但无论从何处取消固定,它都会跳回到顶部 我一直在钉和解钉 .pinned { position: fixed; } .unpinned { position: relative; } 链接到 那么,是否有任何方法可以将元素的位置(在取消固定时)设置为仅使用CSS(或者如果不可能使用纯

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

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

我一直在钉和解钉

.pinned {
  position: fixed;
}

.unpinned {
  position: relative;
}
链接到

那么,是否有任何方法可以将元素的位置(在取消固定时)设置为仅使用CSS(或者如果不可能使用纯CSS,则使用最小JS)取消固定的位置


另外,我试着在取消钉扎时使用
绝对
相对
,以及
静态
,但似乎都不起作用。

不。你不能单独使用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
属性,然后在“位置固定”和“绝对”之间切换。

否。仅使用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
属性,然后在位置固定和绝对之间切换。

您可以使用JavaScript方法检索元素相对于视图端口的位置。

可以使用JavaScript方法检索元素相对于视图端口的位置。

您可以将元素粘合到如下位置:

var el = document.getElementById('element')
var rectObject = el.getBoundingClientRect();
var scroll = document.body.scrollTop 
el.className = 'unpinned';
el.style.top = (scroll + rectObject.top) + "px"
+取消钉扎时出现一些代码

演示:
避免其卡在滚动条上方:


仅在CSS中无法执行此操作

您可以将元素粘贴到如下位置:

var el = document.getElementById('element')
var rectObject = el.getBoundingClientRect();
var scroll = document.body.scrollTop 
el.className = 'unpinned';
el.style.top = (scroll + rectObject.top) + "px"
+取消钉扎时出现一些代码

演示:
避免其卡在滚动条上方:



不可能只在CSS中执行此操作

您还应该在此处发布相关代码部分,以供将来参考(CodePen可能有一天会关闭)。对此表示抱歉。我会编辑它:)不,我试过使用
相对的
绝对的
,还有
静态的
,但是没有用。你也应该在这里发布相关的代码部分以备将来参考(CodePen可能有一天会坏掉)。很抱歉。我会编辑它:)不,我试过使用
相对的
绝对的
,还有
静态的
,但是都不起作用。你被允许提供一个JS解决方案,因为这个问题也被标记为JS/JQ(我想这就是你被否决的原因),但是你是正确的,这是不可行的CSS,因为这是一个动态的性质的东西。这是一个怎样的答案?这是一个评论。答案可能是这样的:“你不能单独用CSS来做……但下面是你如何用JS来做……”@wf4谢谢,我只是想问一下……)自从我给出答案后,这个问题就被编辑了。他只是问,这是否只可能与CSS。我来拉小提琴。JeezYou被允许提供一个JS解决方案来解决这个问题,因为这个问题也被标记为JS/JQ(我想这就是为什么你得到了否决票),但是你是对的,这在CSS中是不可行的,因为这是一个动态性质的问题。这是一个怎样的答案?这是一个评论。答案可能是这样的:“你不能单独用CSS来做……但下面是你如何用JS来做……”@wf4谢谢,我只是想问一下……)自从我给出答案后,这个问题就被编辑了。他只是问,这是否只可能与CSS。我来拉小提琴。Jeeztry点击超过2次,在取消钉住时仍然会跳到顶部:(@SnazzySanoj已修复)it@SnazzySanoj但我会尽量避免在页面滚动上方固定元素,因为这样你就看不到它了。如果你愿意,我可以抓住这个盒子,把它拉下来,这样用户就可以看到它:这里有没有其他方法(除了
getBoundingClientRect
)要获取元素的位置,当元素取消固定并将该位置指定为绝对值时?尝试单击2次以上,在取消固定时仍会跳到顶部:(@SnazzySanoj已修复it@SnazzySanoj但我会尽量避免将元素固定在页面滚动上方,因为这样您就看不到它了。如果您愿意,我可以抓住该框并将其向下拉,以便用户可以看到:这里有没有其他方法(除了
getBoundingClientRect
)要获取元素的位置,当它取消固定并将该位置指定为绝对值时?