2013-12-08 51 views
5

我使用<a href>元素和:target css选择器显示默认设置为display:none<div>。问题是,当我点击链接以显示<div>时,它会自动向下滚动我的网站到那个<div>防止屏幕在点击时移动<a href=></a>

有没有办法停止屏幕移动?

不幸的是,除了CSS和HTML之外,我还没有精通任何东西。

在链接
+0

我想你会需要JS,因为你有两种可能性:1.避免通过JS滚动2.使用不同于锚点的元素,但是你将没有:目标功能,并且必须显示你的目标元素由js –

+0

正如我说的,我不知道JS(我几乎没有开始学习它一个星期agoo)。我怀疑是否有相当简单的方法来完成我在这里用纯粹的CSS和HTML进行的工作,所以尽管感谢所有的JS想法(以后再保存它们),但最好的解决方案应该是这样的,即有限的CSS和HTML (如果甚至是任何)。 – Czulu

回答

0

这是一个黑客位,但你可以使用基本的CSS解决方法:

CSS only Example

#div1 { 
    height: 0; 
    overflow:hidden; 
} 
#div1:target { 
    height: auto; 
    margin-top: -110px; 
    padding-top: 110px; 
} 
#div2 { 
    background:red; 
} 

<a href="#div1">Click to show</a> 

<div id="div1"> 
    <div id="div2">Content</div> 
</div> 

如果你需要的是一个更灵活一点,你可以添加一些js ...

More Flexible Example with JS

$('a').click(function() { 
    $('#div1').css({ 
     'margin-top': 0 - $('#div1').position().top + $(window).scrollTop(), 
      'padding-top': $('#div1').position().top - $(window).scrollTop() 
    }); 
}); 

基本上你拉DIV1了负利润率的顶部,然后推DIV2与填充背下来,这样DIV1的顶部放置在窗口顶部...就像我说的它是一个黑客,但它的确有窍门。

4

输入:

<a href="javascript:void();">Link here</a> 
+1

该问题指出,重点是触发':target'的更改。你不能改变'href'的位置而不会破坏它。 – Quentin

-1

这些链接的锚链接,默认情况下为那些跳跃作出:)你可以使用JS以防止在某种程度上的默认行为。例如使用jQuery:

$('a').click(function(e){e.preventDefault();}); 

或默认添加return false;的链接

+1

这会阻止链接被跟踪。如果没有遵循链接,那么URL中的片段ID将不会改变,从而导致对象失效。 – Quentin

+0

如果你需要的话,你仍然可以通过js来做到这一点。但是,如果他不想跳转,我通常甚至不会使用链接:) –

+0

@Quentin:如果您不喜欢所提供的解决方案,您是否有自己的解决方案? –

7

您可以使用event.preventDefault()避免这种情况。事情是这样的:

$('a.yourclass').click(function(e) 
{ 
    //your code 
    e.preventDefault(); 
}); 

OR:

<a href="javascript:void(0)" onclick="somefunction(); return false;">link</a> 
+1

这会阻止链接被跟踪。如果没有遵循链接,那么URL中的片段ID将不会改变,从而导致对象失效。 – Quentin

+0

@Quentin: - 这个怎么样:anchor

+1

'somefunction()'会做什么?设置'location.hash'?这将我们带回到我们开始的地方,但带有更多丑陋的代码和对JavaScript的依赖。 – Quentin

0

你需要JS无论如何:

// (in jQuery) 
$el.on('click', function(e) { 
    // find current scroll position 
    var pos = document.body.scrollTop || document.documentElement.scrollTop; 

    // let normal action propagate etc 

    // in the next available frame (async, hence setTimeout), reset scroll posiion 
    setTimeout(function() { 
    window.scrollTo(0, pos); 
    }, 1); 
}) 

我不知道这是否会闪烁屏幕。它可能。这是一种可怕的黑客方式。

在我的Chrome,也没有闪烁:使用http://jsfiddle.net/rudiedirkx/LEwNd/1/show/

+0

如果你做出这样的解决方案,我也会保存x位置。以防万一它在那里:) –

0

避免:目标都在一起,只是使用onclick事件。

function myFunction() 
{ 
    document.getElementById('hiddenDiv').style.display = 'block'; 
    return false; 
} 

<a href="#" onclick="myFunction()"></a>