在 JavaScript 中,咱們能夠利用變量,DOM 來保存狀態,而 CSS 當中,咱們也能夠利用僞類選擇器來保存狀態,這就是 CSS 搞事的核心了。css
核心概念:保存狀態。html
在上一篇 CSS 搞事技巧:checkbox+label+selector 中利用 checkbox+label+selector 來加深瞭解了 Flex 的彈性容器屬性,這一節是要利用 :hover+:active 來了解 Flex 的彈性項目屬性。vue
這兩個屬性你有沒有很熟悉呢,其實咱們常常在 a
標籤上使用它們git
LVHA
順序::link
—:visited
—:hover
—:active
github
效果圖:佈局
因爲做者找不到工做,陷入自閉缺少創做激情,因此這一個環節就略過……flex
hover
觸發時,隱藏的子元素顯示;active
觸發時,子元素按照需求變化。spa
由於展現性的東西須要垂直居中展現,因此我利用 Vue 的 props 固化了垂直居中的樣式:3d
<Layout-Layout align-center justify-center :background-color="bgColor" >
hello flex item
</Layout-Layout>
複製代碼
爲了更容易演示,有請高矮胖瘦均不一致的三兄弟:
<div class="flex__item">大哥</div>
<div class="flex__item">二弟</div>
<div class="flex__item">三妹</div>
複製代碼
爲它們增長樣式,並添加僞元素:
<style lang="stylus" scoped>
.flex__item
width 15%
height 15%
box-shadow 0 0 4px rgba(0, 0, 0, .5), inset 2px 0 1px rgba(0, 0, 0, .2)
display flex
align-items center
justify-content center
color #142334 // 鋼青
&:nth-child(1)
width 20%
height 20%
&:nth-child(2)
width 16%
height 18%
&:nth-child(3)
width 14%
height 28%
&::before
position absolute
content '一人得道'
padding 10px 6px
border-radius 6px
color #e0c8d1 // 淡青紫
background-color #1661ab // 靛青
&::after
position absolute
content '背水一戰'
padding 10px 6px
border-radius 6px
color #e0c8d1 // 淡青紫
background-color #1661ab // 靛青
</style>
複製代碼
查看一下效果:
:hover
基礎佈局完成,接着是添加 :hover
效果。當鼠標懸停時,兩個僞元素將會顯示,而且一個往上一個往下:
.flex__item
&::before
opacity 0
&::after
opacity 0
.flex__item:hover::before
transform translateY(-80px)
opacity 1
.flex__item:hover::after
transform translateY(80px)
opacity 1
複製代碼
查看效果:
:active
在個人記憶中,:active
是對任何元素都生效的,結果僞元素上設置失敗了,而後就去看了下 MDN:
或許僞元素與元素自己算做一體?仍是說要選擇到父元素(線索::focus-within
)?這個留以後解決吧,FLag +1。取捨的辦法仍是有的(假裝),犧牲帶頭大哥吧:
.flex__item
&:nth-child(1)
width 20%
height 20%
&::after
position absolute
content '背水一戰'
padding 10px 6px
border-radius 6px
color #e0c8d1 // 淡青紫
background-color #1661ab // 靛青
transition all 0.5s linear
opacity 0
&:nth-child(2)
width 16%
height 18%
&::before
position absolute
content '一人得道'
padding 10px 6px
border-radius 6px
color #e0c8d1 // 淡青紫
background-color #1661ab // 靛青
transition all 0.5s linear
opacity 0
&:nth-child(3)
width 14%
height 28%
&::before
position absolute
content '一人得道'
padding 10px 6px
border-radius 6px
color #e0c8d1 // 淡青紫
background-color #1661ab // 靛青
transition all 0.5s linear
opacity 0
複製代碼
查看效果:
爲僞類添加 :active
效果:
.flex__item:active::before,
.flex__item:active::after
color #f1908c // 榴子紅
background-color #fff
box-shadow 0 2px 4px rgba(0, 0, 0, .5), 2px 0 4px rgba(0, 0, 0, .6)
複製代碼
查看效果:
align-self
給子元素添加 align-self
不一樣的值:
.flex__item
&:nth-child(1)
&:active
align-self flex-end
&:nth-child(2)
&:active
align-self flex-start
&:nth-child(3)
&:active
align-self flex-start
複製代碼
最後結果就如介紹中所示了。
CSS 不少屬性咱們可能難以理解其效果,我的認爲運用 CSS 來解釋 CSS 不失爲一種良好的方式。