久久精品国产99国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

怎么用純css實現(xiàn)Tab切換? – css筆記

當(dāng)我們思考能否用css來實現(xiàn)時還應(yīng)考慮到html的結(jié)構(gòu),能不能構(gòu)造出滿足css已存在的選擇器的html布局,這一節(jié)和大家分享怎么用純css實現(xiàn)Tab切換

css實現(xiàn)依賴于html結(jié)構(gòu),因為css選擇器有限,有子選擇器,沒有父選擇器,有后選擇器,沒有前選擇器,所以局限性很大。所以當(dāng)我們思考能否用css來實現(xiàn)時還應(yīng)考慮到html的結(jié)構(gòu),能不能構(gòu)造出滿足css已存在的選擇器的html布局

前言

哪些簡單的效果可以考慮用css來實現(xiàn)呢,目前css能夠做的交互有

  • 鼠標(biāo)經(jīng)過/離開:hover
  • 鼠標(biāo)點擊::cheked

那是不是上述所有的交互都可以用css來實現(xiàn)呢?顯然不是的,css實現(xiàn)依賴于html結(jié)構(gòu),因為css選擇器有限,有子選擇器,沒有父選擇器,有后選擇器,沒有前選擇器,所以局限性很大。所以當(dāng)我們思考能否用css來實現(xiàn)時還應(yīng)考慮到html的結(jié)構(gòu),能不能構(gòu)造出滿足css已存在的選擇器的html布局。

效果展示;

111 222 333

先從html結(jié)構(gòu)說起

一般在碰到tab類型的組件時,一般會有如下的html

<div class="tabs">
  <div class="tab-nav">
    <div class="tab-item">tab01</div>
    <div class="tab-item">tab02</div>
    <div class="tab-item">tab03</div>
  </div>
  <div class="tab-content">
    <div>111</div>
    <div>222</div>
    <div>333</div>
  </div>
</div>

大致就是這種布局吧,暫且稱作分離模式吧,足夠靈活,就是導(dǎo)航部分和內(nèi)容結(jié)構(gòu)分開,需要什么動畫效果都可以分別實現(xiàn)。

還有一種布局,大概是這樣的

<div class="tabs">
  <div class="tab-pane">
    <div class="tab-item">tab01</div>
    <div class="tab-content">111</div>
  </div>
  <div class="tab-pane">
    <div class="tab-item">tab01</div>
    <div class="tab-content">111</div>
  </div>
  <div class="tab-pane">
    <div class="tab-item">tab01</div>
    <div class="tab-content">111</div>
  </div>
</div>

這里每一個tab里面的導(dǎo)航和內(nèi)容是一起的,我們稱為合并模式吧,這種在組件化里面很常見,比如在react里面,一個tab組件,一般會寫成這樣

ReactDOM.render(
  <Tabs defaultActiveKey="1" onChange={callback}>
    <TabPane tab="Tab 1" key="1">Content of Tab Pane 1</TabPane>
    <TabPane tab="Tab 2" key="2">Content of Tab Pane 2</TabPane>
    <TabPane tab="Tab 3" key="3">Content of Tab Pane 3</TabPane>
  </Tabs>,
mountNode);

是不是很像?

相信用js只要是一名合格的前端都能輕易的實現(xiàn)吧,這里我們主要是研究如何用css來實現(xiàn)

第一種布局(分離模式)

這里有兩種思路

  1. 錨點實現(xiàn)?herf?+?:target
  2. css3?nth-child(n)?選擇器

錨點實現(xiàn)主要是在a標(biāo)簽加上href屬性,然后目標(biāo)元素上添加相同的id,當(dāng)點擊a標(biāo)簽時,目標(biāo)元素的:target就生效了

<style>
#item01:target{ background:red }
</style>
<a href="#item01">跳轉(zhuǎn)</a>
<div id="item01">內(nèi)容</div>

這種方式可以將導(dǎo)航和內(nèi)容鏈接到一塊,但是在瀏覽器中有一個很不友好的地方,就是當(dāng)點擊帶有錨點的a鏈接的時候,瀏覽器會自動定位到目標(biāo)位置,很影響體驗,需要去掉這種效果估計還得借助js來實現(xiàn),故不太推薦用這種方式

nth-child(n)?選擇器,這種方式就比較傳統(tǒng)了,不過導(dǎo)航切換部分還是用到label+input[type=radio],實現(xiàn)基本和js是同一個思路,甚至還不如js方便,因為你有多少個tab選項就得寫多少個nth-child樣式

.tab-nav input:nth-of-type(1):checked ~ .tab-content :nth-of-type(1),
.tab-nav input:nth-of-type(2):checked ~ .tab-content :nth-of-type(2),
.tab-nav input:nth-of-type(3):checked ~ .tab-content :nth-of-type(3),
...
{
  z-index:1
}

你大概會看到這樣的樣式,如果選項卡比較固定,基本是靜態(tài)的,比較少,可以一一寫出來,如果比較多,或者是js生成的,那么建議這一部分樣式也通過js生成出來。

下面著重來實現(xiàn)第二種布局

第二種布局(合并模式)

如果是這樣一種布局,那么導(dǎo)航和內(nèi)容就可以通過相鄰選擇器+聯(lián)系上了,重點是如何實現(xiàn)選項卡的樣式,當(dāng)然,我們也需要改一下html

<div class="tabs">
  <div class="tab-pane">
    <input type="radio" name="tab" id="tab01"/>
    <label class="tab-item" for="tab01">tab01</label>
    <div class="tab-content">111</div>
  </div>
  <div class="tab-pane">
    <input type="radio" name="tab" id="tab02"/>
    <label class="tab-item" for="tab02">tab02</label>
    <div class="tab-content">222</div>
  </div>
  <div class="tab-pane">
    <input type="radio" name="tab" id="tab03"/>
    <label class="tab-item" for="tab03">tab03</label>
    <div class="tab-content">333</div>
  </div>
</div>

然后我們通過樣式美化一下

.tabs{
  position:relative;
  width:400px;
  height:300px;
}
.tab-pane{
  display:inline-block;
}
.tabs input[type='radio']{
  position:absolute;
  clip:rect(0,0,0,0)
}
.tab-item{
  display:block;
  height:34px;
  line-height:34px;
  cursor:pointer;
  padding:0 10px
}

.tab-content{
  position:absolute;
  border:1px solid #eee;
  padding:20px;
  left:0;
  top:36px;
  bottom:0;
  right:0;
  background:#fff;
}

然后加入交互,主要就是相鄰選擇器+:checked選擇器,

.tabs input[type='radio']:checked+.tab-item{/**導(dǎo)航選中狀態(tài)**/
  background:orangered;
  color:#fff
}
.tabs input[type='radio']:checked+.tab-item+.tab-content{/**當(dāng)前內(nèi)容切換**/
  z-index:1
}

我們這里只用了z-index:1就實現(xiàn)了隱藏顯示,當(dāng)然還可以實現(xiàn)更多的效果,比如淡入淡出等

演示效果見頁底Demo2

當(dāng)然,這種方式也有一定的不足,由于這里內(nèi)容區(qū)域用到了絕對定位,所以整個tab容器就不能根據(jù)里層的內(nèi)容來自適應(yīng),也需要給外層一個固定的高度,不然整個tab容器就只有頂部導(dǎo)航區(qū)域才占據(jù)空間,這明顯就不合常理。

添加一點動畫效果

/**給導(dǎo)航添加橫條的縮放效果**/
.tab-item:after{
  position:absolute;
  content:'';
  height:3px;
  width:100%;
  background:orangered;
  left:0;
  bottom:2px;
  transition:.3s;
  transform:scaleX(0)
}

.tabs input[type='radio']:checked+.tab-item:after{
  transform:scaleX(1)
}
/**給內(nèi)容區(qū)域添加一個淡入淡出的效果**/
.tab-content{
  position:absolute;
  background:#eee;
  padding:20px;
  left:0;
  top:36px;
  bottom:0;
  right:0;
  transition:.3s;
  opacity:0;
  transform:translateY(50px)
}

.tabs input[type='radio']:checked+.tab-item+.tab-content{
  z-index:1;
  opacity:1;
  transform:translateY(0)
}

演示效果見頁底Demo3

小節(jié)

通過css我們也能實現(xiàn)導(dǎo)航效果,而且更容易復(fù)用,只需要復(fù)制html結(jié)構(gòu)就行(當(dāng)然這里肯定也是需要改一下nameid的)。這就有點類似組件的意思了,給你一個html結(jié)構(gòu),你不需要關(guān)系切換邏輯,只需要根據(jù)接口取到數(shù)據(jù),然后塞到每個tab標(biāo)簽頁里面去,事實上現(xiàn)在react實現(xiàn)的組件也一般都是這種思路,只需關(guān)注業(yè)務(wù)邏輯,但這些都是大工程,哪里有css直接來的快。

這就讓我想到了剛進公司那會,每碰到一個tab,那就要取一個id,然后用jquery實現(xiàn)一遍tab切換邏輯,后來放聰明了,把tab封裝成一個插件,碰到一個tab就調(diào)用一次插件…看著代碼變少了,其實也沒什么本質(zhì)區(qū)別。

用css來實現(xiàn)的好處就是可以盡量大的把組件功能和業(yè)務(wù)邏輯分離開來,真正做一個UI組件該做的事,希望css越來越好

下載權(quán)限
查看
  • 免費下載
    評論并刷新后下載
    登錄后下載
  • {{attr.name}}:
您當(dāng)前的等級為
登錄后免費下載登錄 小黑屋反思中,不準(zhǔn)下載! 評論后刷新頁面下載評論 支付以后下載 請先登錄 您今天的下載次數(shù)(次)用完了,請明天再來 支付積分以后下載立即支付 支付以后下載立即支付 您當(dāng)前的用戶組不允許下載升級會員
您已獲得下載權(quán)限 您可以每天下載資源次,今日剩余
??
Npcink上的部份代碼及教程來源于互聯(lián)網(wǎng),僅供網(wǎng)友學(xué)習(xí)交流,若您喜歡本文可附上原文鏈接隨意轉(zhuǎn)載。
無意侵害您的權(quán)益,請發(fā)送郵件至 1355471563#qq.com 或點擊右側(cè) 私信:Muze 反饋,我們將盡快處理。
?
購物車
優(yōu)惠劵
搜索
久久精品国产99国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

    9000px;">

      美国精品一区二区| 欧美xxxx精品| 日韩一级片在线免费观看| 亚洲欧美自偷自拍另类| 久久久久亚洲av片无码下载蜜桃| 伊人精品一区二区三区| 国产喷水在线观看| 亚洲第一中文av| 黄色国产在线视频| 亚洲男人第一av| 青青操视频在线播放| eeuss中文字幕| 午夜69成人做爰视频| 国内精品偷拍视频| 亚洲图色中文字幕| 日本三级午夜理伦三级三| 粉嫩小泬无遮挡久久久久久| 五月天婷婷丁香| 九九久久久久久| 99久久精品久久亚洲精品| 色综合色综合色综合色综合| 国产一级久久久| 亚洲欧美日韩综合在线| 日本午夜精品视频| 国产视频不卡在线| 亚洲永久精品视频| 五月天色婷婷丁香| 免费a v网站| 国产又大又黄又粗的视频| 亚洲色图欧美另类| 天天操天天干天天操| 久草手机视频在线观看| 国产精久久一区二区三区| 亚洲色图 校园春色| 无码人妻久久一区二区三区蜜桃 | 中文字幕乱码av| 日本一区二区免费视频| 黄色片一区二区三区| www.四虎精品| 亚洲综合欧美综合| 中文字幕福利视频| 五月婷在线视频| 日本猛少妇色xxxxx免费网站| 国内精品偷拍视频| 国产伦精品一区二区三区视频我| 538精品在线视频| 午夜黄色福利视频| 天天操天天爱天天干| 欧美日韩在线国产| 久国产精品视频| 精品国产午夜福利| 国产人妖一区二区三区| 国产suv一区二区| youjizz在线视频| 91中文字幕在线播放| 亚洲男人在线天堂| 亚洲va在线va天堂va偷拍| 少妇极品熟妇人妻无码| 日韩 国产 在线| 少妇人妻精品一区二区三区| 日本欧美一区二区三区不卡视频| 免费在线观看国产精品| 蜜臀av一区二区三区有限公司| 精品人妻一区二区三区日产| 精品国产一区在线| 久久久久久久久黄色| 久久久久久久久久久网| 久久中文字幕在线观看| 免费在线观看a视频| 欧美熟妇激情一区二区三区| 欧洲成人午夜精品无码区久久| 蜜桃视频污在线观看| 欧美成人精品欧美一级私黄 | 精品毛片一区二区三区| 国精产品一区二区三区| 精品国产九九九| 男女污污的视频| 日产亚洲一区二区三区| 五月天久久久久久| 亚洲国产福利视频| 91丝袜在线观看| 国产精品美女久久久久av爽| 国产真实乱偷精品视频| 免费观看毛片网站| 神马一区二区三区| 中文字幕手机在线视频| 一级片一区二区三区| 国产高清视频网站| 九九热精品在线观看| 日韩精品国产一区二区| 小早川怜子久久精品中文字幕| 中文字幕在线播出| 国产不卡的av| 精品人妻无码一区二区三区换脸| 欧美另类视频在线观看| 性色av一区二区三区四区| 91n.com在线观看| 国产区在线观看视频| 欧美熟妇精品一区二区| 在线免费看av片| 亚洲综合一区中| 国产调教在线观看| 欧美一级淫片aaaaaa| 亚洲不卡在线视频| www.色偷偷.com| 久久午夜夜伦鲁鲁片| 天天摸天天舔天天操| 夜夜躁很很躁日日躁麻豆| 国产偷人妻精品一区| 人妻精品久久久久中文字幕| 中文字幕 欧美日韩| 国产精品伦一区二区三区| 免费看av在线| 亚洲精品国产片| 精国产品一区二区三区a片| 天堂在线中文网| 超碰在线97免费| 免费在线不卡av| 亚洲欧美在线精品| 精品无码人妻少妇久久久久久| 天天爽天天爽天天爽| 3d动漫精品啪啪一区二区下载| 国内av在线播放| 伊人影院综合在线| 国产乱码一区二区三区四区| 日本乱子伦xxxx| 北岛玲一区二区| 日韩精品――中文字幕| 91精品人妻一区二区三区四区| 看欧美ab黄色大片视频免费| 中文字幕一区二区三区手机版 | 夜夜嗨aⅴ一区二区三区| 久久亚洲国产成人精品性色| 中文久久久久久| 久久99久久久| 亚洲一区二区三区蜜桃| 欧美高清视频一区二区三区| 亚洲一区二区三区蜜桃| 欧美一级大片免费看| av网站免费播放| 色综合免费视频| 国产毛片久久久久| 中文字幕视频在线播放| 免费a级黄色片| www.超碰在线观看| 性xxxxbbbb| 久久久国产精品黄毛片| 91在线观看喷潮| 五月天婷婷亚洲| 久久久久久国产精品日本| 91麻豆国产视频| 天天插天天操天天射| 精品国产午夜福利| 91九色丨porny丨肉丝| 少妇精品无码一区二区三区 | 成人一二三四区| 亚洲aⅴ乱码精品成人区| 精品一区免费观看| 99精品视频在线播放免费| 天堂网在线观看视频| 国产一区二区在线不卡| 亚洲视屏在线观看| 婷婷中文字幕在线观看| 久久精品视频久久| 国产精品欧美综合| 一级黄色大片免费看| 色一情一乱一伦| 麻豆一区二区三区精品视频| 不卡av免费在线| 亚洲欧洲国产视频| 一区二区三区在线免费观看视频 | 精品国产乱码久久久久夜深人妻| 91精品国产高清一区二区三密臀| 天天躁日日躁狠狠躁伊人| 国产一级久久久| 丰满熟妇人妻中文字幕| 亚洲中文字幕无码爆乳av| 在线观看中文字幕网站| 少妇无码一区二区三区| 美女又爽又黄视频毛茸茸| 国产在线视频卡一卡二| 成人羞羞国产免费图片| 91日韩精品视频| 亚洲免费成人在线视频| 亚洲成a人片在线| 天天躁日日躁狠狠躁av| 日韩一级片免费看| 欧美一区二区免费在线观看| 久久久久亚洲AV成人网人人小说| 国产日韩在线观看一区| 超碰在线播放97| www午夜视频| av资源在线免费观看| 91丨porny丨九色| 91看片在线播放| 91精产国品一二三产区别沈先生| 亚洲精品国产一区二| 中文字幕一区在线播放| 中文字幕一区二区三区人妻四季| 一区二区三区精|