显示所有DIV如果没有链接的点击

问题描述 投票:5回答:2

我有一个页面名称url.com/yourfirstpage/当我去所有的div默认是隐藏的页面(显示:无),如果我们的目标#秒-1为url.com/yourfirstpage/#sec1它只显示秒-1并隐藏其他。我在想,如果我们去的网址,而不必像url.com/yourfirstpage/它需要显示所有的div锚ID。

#sec1, #sec2, #sec3{
	display:none;
}
#sec1:target{
	display:block;
}
#sec2:target{
	display:block;
}
#sec3:target{
	display:block;
}
<a href="#sec1">sec1</a>
<a href="#sec2">sec2</a>
<a href="#sec3">sec3</a>

<div id="sec1" class="page"> this is sec1</div>
<div id="sec2" class="page"> this is sec2</div>
<div id="sec3" class="page"> this is sec3</div>
javascript html css
2个回答
2
投票

下面是如果你可以修改你的HTML结构的把戏。我们的想法是要具备的要素可见,然后我们隐藏它们使用:target。因为我们以前没有兄弟选择或家长选择,我用了一个父元素中的id是能选择任意元素:

#sec1:target .page:nth-child(n+2){
  display: none;
}

#sec2:target .page:nth-child(2n+1){
  display: none;
}

#sec3:target .page:nth-last-child(n+2){
  display: none;
}
<a href="#sec1">sec1</a>
<a href="#sec2">sec2</a>
<a href="#sec3">sec3</a>

<div id="sec1">
  <div id="sec2">
    <div id="sec3">
      <div class="page"> this is sec1</div>
      <div class="page"> this is sec2</div>
      <div class="page"> this is sec3</div>
    </div>
  </div>
</div>

它可以用任何数量的部分工作,我们可以提高CSS代码如下:

#sec1:target .page:not(:nth-child(1)),
#sec2:target .page:not(:nth-child(2)),
#sec3:target .page:not(:nth-child(3)),
#sec4:target .page:not(:nth-child(4)),
#sec5:target .page:not(:nth-child(5)) {
  display: none;
}
<a href="#sec1">sec1</a>
<a href="#sec2">sec2</a>
<a href="#sec3">sec3</a>
<a href="#sec4">sec4</a>
<a href="#sec5">sec5</a>

<div id="sec1">
  <div id="sec2">
    <div id="sec3">
      <div id="sec4">
        <div id="sec5">
          <div class="page"> this is sec1</div>
          <div class="page"> this is sec2</div>
          <div class="page"> this is sec3</div>
          <div class="page"> this is sec4</div>
          <div class="page"> this is sec5</div>
        </div>
      </div>
    </div>
  </div>
</div>

1
投票

这种快速的方法可以帮助

您可以通过使用postcss插件与!选择做CSS

[...document.querySelectorAll('a')].forEach(a => {
    a.addEventListener('click', () => {
        a.parentElement.classList.add('targeted')
    })
})
.targeted div {
  display: none;
}
.targeted div:target {
  display: block;
}
<a href="#sec1">sec1</a>
<a href="#sec2">sec2</a>
<a href="#sec3">sec3</a>

<div id="sec1" class="page"> this is sec1</div>
<div id="sec2" class="page"> this is sec2</div>
<div id="sec3" class="page"> this is sec3</div>
© www.soinside.com 2019 - 2024. All rights reserved.