2020-11-4 前端達(dá)人
最近看過我文章的都知道:我最近在負(fù)責(zé)一個微信小程序的項目,在其中遇到了很多有趣的事和一些“奇思妙想”。本文的背景就是某天早上我看著wxml文件中一堆wx:if/else
和hidden
突然很煩躁,先不說wx:if導(dǎo)致的性能問題,就是標(biāo)簽上也是冗雜的。
接著上一篇文章【微信小程序自定義組件庫yPicker組件分析及省市區(qū)三級聯(lián)動實現(xiàn)】,在其中我分析了這么一個例子 —— 省市區(qū)三級聯(lián)動的自定義實現(xiàn),在其中有詳細(xì)代碼這里就不多說,說說如何調(diào)用:
我當(dāng)時是這么想的:一方面出于“不在JavaScript里寫太多東西”的考慮,另一方面,由于省、市、區(qū)我是分別用三個變量來實現(xiàn)的,所以JavaScript里就關(guān)注這三個變量,比如之間的空格或其它東西都拿到wxml文件里。就像這樣:
(因為調(diào)用涉及到后來改動的只有在點擊彈窗里的“確認(rèn)”按鈕時在事件中將那三個變量分別賦給這段代碼中出現(xiàn)的三個變量 —— 否則會只要改動不管是點取消還是確認(rèn)已經(jīng)發(fā)生改變了,這樣不妥?。?
其布局是這樣的:
在決定了要替換這里的wx:if以后,你首先要想:用什么替換?
wx:if
作用是判斷“是否存在”,如果不存在(條件不滿足)就切換到wx:else
或是wx:elif
的邏輯里!
OK,想到這里,你應(yīng)該能想到一個css偽類::empty
!它的作用和我們想要的效果一樣:判斷如果元素(內(nèi)容)為空的話…
我迅速對代碼做了改動:
然后在class - depart_content上加了這個偽類:
一片空白!
經(jīng)過查閱資料::empty
偽類表示如果標(biāo)簽內(nèi)容為空,那么內(nèi)容區(qū)域如果帶有空格,也是不會被匹配到的!
在寫標(biāo)簽時一定要注意這一點:標(biāo)簽內(nèi)是否有空格或換行?。〒Q行常常被解析為一個空格)
遇到非單標(biāo)簽一定注意閉合標(biāo)簽!
最后解決辦法是:在js中將三個變量用空格相連接,再渲染到頁面上即可!
(其實這里是一個自定義的選擇器,而自動定位就是往高德地圖發(fā)送了請求獲取到省市區(qū)字段而已,代碼就不寫了。。。)
到這里我們會發(fā)現(xiàn)一個事:上面我們不僅用了empty偽類,還用了before偽元素!
其實這一點很平常 —— 畢竟只有empty是添加不了內(nèi)容的(似乎縱觀css,只有before和after這樣偽元素可以向頁面中添加內(nèi)容,不管是文字還是圖片之類的)
我認(rèn)為更應(yīng)該關(guān)注到的是兩個地方:
:before
和 :after
偽元素向標(biāo)簽內(nèi)插入內(nèi)容、圖形,并不會影響empty偽類的匹配!
這個特性實用的一批。
由上,可見此偽類最大的用處就是“字段缺失提示”!這是非常實用的。而且把這項任務(wù)交給CSS也可以減輕許多“(布局)負(fù)擔(dān)”、體驗更好、維護(hù)起來也更方便!
比如:我在項目優(yōu)化時就將所有有請求的字段都加上了統(tǒng)一類名:
作者:行舟客,轉(zhuǎn)載
藍(lán)藍(lán)設(shè)計的小編 http://sillybuy.com