CSS纸张阴影二三事
开篇废话
众所周知,我博客是模仿“纸”来进行设计的(真的众所周知吗?
纸的纹理使用的
zhongguose - 传统颜色
包括字体,采用的方正聚珍仿宋
方正聚珍仿宋是复刻民国丁善之、丁辅之兄弟所创制的聚珍仿宋的版本。源于宋元时期雕版印刷,横竖笔画粗细均匀,折笔处棱角分明,整体字形刚劲灵动
本人非常喜欢这个风格,尤其是放大后还有书写的真实痕迹
以上目的都是为了营造一种单纯为阅读而设计的,但又不失细节的设计风格,
毕竟博客就是为了写文章的嘛。
今日想让博客的#board
再像“纸”一点,想要模仿纸张略微弯曲的效果,因此求于网络。
(并非今日)
借鉴
于是发现了张鑫旭老师的文章
几种纯CSS(CSS3)下的纸张效果实现展示 « 张鑫旭-鑫空间-鑫生活
1 |
|
1 |
|
图片来源:CSS3 box-shadow(3D球,翘边纸)_3d阴影 css-CSDN博客
思路就是使用伪元素生成两个平行四边形,把他俩定位到底部,加上阴影,让四边形被盖住,阴影漏出来。
解决bug
bug其一:
在hexo博客中,使用z-index
并不能让纸挡住菱形
原因在于
#board 设置了
position: relative;且设置了z-index
我们观察发现,在文件main.css
中,#board
的z-index
为3。
元素本体 #board
没有 z-index,不会创建新的 stacking context(堆叠上下文)
层叠上下文 - CSS:层叠样式表 | MDN
CSS 中只有以下情况会创建新的 stacking context:
position: relative|absolute|fixed
+z-index
非 autoopacity < 1
transform
filter
will-change
isolation: isolate
flex/inline-flex/grid 子元素 + z-index
所以.page
虽然有position: relative
,但没有 z-index,所以不会自己阻止子元素(伪元素)的 z-index 起作用。
简化理解:
.page
本体是“auto”,.page::before
是-1
,- 所以
.page::before
会画在下面。
一旦你给.page
设置了 z-index,那伪元素的 z-index: -1 就会被锁死在.page
的堆叠上下文内,只能在.page
的“内部最底层”,但永远不能压过.page
自身。
方法一:
因此我们需要
1 |
|
不提倡,会破坏博客框架原有的层叠关系,导致某些bug的出现
方法二:
我们还可以利用3D
1 |
|
bug其二:
当纸张高度到达一定大小,就会导致两个菱形跑出来(不完全被纸张挡住)
如图
因此我们需要一个固定的高度,且高度不能过大,比如
1 |
|
因为设备宽度的不同,会导致两个平行四边形不能很好的「钉在」下方两个页脚处
并且我们需要适配多平台
1 |
|
自行调整left和right