純CSS實現單擊錨點平滑切換的效果

jopen 8年前發布 | 38K 次閱讀 CSS 前端技術

純CSS實現單擊錨點平滑切換的效果

有時想實現一個功能,比如想讓頁面不出現滾動條,但是卻能裝下更多的東西,這個時候我們會對某個容器設置 overflow: hidden ,然后通過錨點來實現單擊切換頁面(其實只是控制顯示的內容)的效果。但是通過錨點來跳到指定內容的不足之處在于,沒有什么過渡效果,很突兀的就跳到了目標點。當然,也可以通過JS或者jQuery來實現自己想要的動態切換效果,這一類的文章一搜一大堆,這里就不贅述了。

但是在一些個人主頁中,比如github的個人主頁(只是主頁而已,也就是username.github.io)上會禁止JS腳本的運行,這個時候如果還是想通過單擊錨點平滑切換的功能的話,應該怎么辦呢?

原諒我是一個前端初學者,傻想了很久也想不到什么辦法,然后就百度谷歌了。

后來找到了一些方法,比如用radio配合他的check屬性來實現, 文章在這里 ,關于這個方法, 慕課 上也有專門的教程,大家也可以去看看。

但是可不可以不插入radio就實現對應的效果呢? 答案是有的。

那就是利用 :target 偽類,這個選擇器可以選擇當前活動的錨點,那么利用這個屬性我們就可以實現自己想要的效果了。

代碼如下:

<a href="#tag1">Tag1</a>
<a href="#tag2">Tag2</a>
<a href="#tag3">Tag3</a>

<div id="container">
  <div id="tag1"></div>
  <div id="tag2"></div>
  <div id="tag3"></div>
</div>
div{
  width: 100px;
  height: 100px;
  border-radius: 50%;
}
#container{
  margin-top: 10px;
  outline: 1px solid red;
  position: relative;
}
#tag1,#tag2,#tag3{
  transition: all ease-out .2s;
  position: absolute;
  top:0
  left:0;
  right:0;
  bottom:0;
  opacity: 0;

}
#tag1{
  background: #f66;
  opacity: 1;
  z-index: 1;
}
#tag2{
  background: orange;
}
#tag3{
  background: gray;
}
#container>div:target{
  z-index: 1000;
  opacity: 1;
}

查看DEMO

上面的例子是通過絕對定位配合z-index和透明度來實現的動態效果。先將所有的元素的opacity設為0,然后為了默認顯示出來第一個元素,所以第一個元素的opacity為1,z-index為1。然后單擊就可以實現動態切換了。

其實我最先嘗試的是通過給 #container 設置 overflow: hidden; , 為它的子元素設置 height:100%; ,然后給target設置margin-top為負的百分比值來實現相應效果的,畢竟比較喜歡這種從下往上冒或者從上往下掉的感覺嘛。。。但是在實現過程中遇到了一點小問題,那就是當Tag2和Tag3相互切換的時候,居然只會移動到一半就不再動了,如果把 overflow: hidden 去掉,顯示的就是自己期望的效果。 一個有問題的DEMO

后來自己想到了解決的辦法,那就是給container包裹一個div,然后把 overflow: hidden 設置在這個元素身上,再把container的overflow去掉,設置高度為它子元素的高度,這樣就能顯示正常了。 DEMO在這里 .

雖然找到了解決辦法,但是對于 問題DEMO 里的這種怪異行為真的不理解,如果各位誰知道的話,還請告知,謝謝。

來自: http://www.cnblogs.com/jiangxi/p/5111187.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!