打开 CodePen 编辑器,在 HTML 的部份加入标题。由于它有一个副标题,所以我会用 <p>
标签去装着它。然后加入一个 <div>
,id
名为 iphone
,里面新增两个 <div>
,id
分别是 hardware
和 ui
;hardware
会用来显示 iPhone 的机身和边框,而 ui
则会显示画面里面的内容。
CSS 的部分
先定义一些 CSS,让我们更加清楚知道在做什么。加入 :root
选择器,定义一些变量和样式:
-
--device-width
是770px
-
--device-height
是1336px
-
--ui-width
是640px
-
基础文字大小是
15px
然后加入 #iphone
选择器,设定 position
是 relative
,宽度和高度的值从变量中获取。
再加入 #hardware
选择器,设定宽度和高度是 100%
,然后背景图片,载入 iPhone 的机身图片,为了支援 Retina Display 高清屏幕,这张图片的尺寸是两倍大小,所以设定 background-size
,宽度和高度同样等于变量的设定值。
好了,在这里想介绍一个图片遮罩的 CSS 属性,大家会发现现在 iPhone 的四周,圆型边框背后有个黑色背景:
而我发现 Apple 特地准备了一张遮罩图片,画出了 iPhone 的外型,用白色填充,而圆型边框的四周是透明的:
我们可以通过 mask-image
这个属性将遮罩图片套用上去。由于这个 CSS 属性还在试验阶段,所以要加上 -webkit
前缀的版本,与背景图片一样,图片是两倍大小,所以同样需要将遮罩的大小设定一下,将 mask-size
设定为变量的值,并且加上 -webkit
前缀的版本。
现在可以看到遮罩已经成功套用上,iPhone 的黑色背景不见了。至于为何 Apple 不直接将 iPhone 图片的背景设定为透明?我估计是为了优化图片的大小,因为透明底的图片需要用到 PNG 格式,而这么大张的彩色 PNG 图片容量上比起 JPG 会大不少,所以 Apple 就采用了高压缩比的 JPG 格式作为 iPhone 图片,再准备一张只有单色的 PNG 图片来做遮罩,这样的确可以省下不少网络频宽。
好了,介绍完这个属性,可以加入 body
选择器,将背景颜色设定为黑色,margin
设定为 0
,然后将网页的内容上下左右置中:
-
display
设定为flex
-
flex-direction
设定为column
-
justify-content
设定为center
-
align-items
设定为center
-
min-height
设定为100vh
字体设定为 Helvetica
,再加入一些 padding
,设定上下是 4rem
,左右是 0
。
再设定一下标题的样式,加入 h2
选择器,文字颜色设定为灰色,text-align
设定为 center
将它置中,文字大小设定为 4.5rem
,文字粗度是 600
。然后 margin
设定为上下 6rem
,左右 0
。
加入 h2 p
选择器,设定副标题的样式,margin
设定为 0
,文字颜色设定为白色就可以了。
框架大置上设定好了,下一步就设定 iPhone 画面的内容。
在 #ui
里面加入一张图片,是画面顶部的 UI,然后就是每一行资料的图片,我会用 <ul>
列表去建构它,加入 <li>
,内容是一张图片,总共有 7 行。
回到 CSS 的部份,加入 #ui
选择器,position
设定为 absolute
,top
设定为 0
。然后要将它左右置中,先将 left
设定为 50%
,再将 transform
设定为 translateX(-50%)
就可以了。
加入 #ui .top-ui
选择器,设定顶部 UI 图片的定位。display
设定为 block
,宽度从变量中获取,高度是 auto
,然后 margin
,设定上方是 70px
,左右是 auto
,下方是 0
。再加一点 padding-bottom
,设定为 30px
,以及一条下边框线。
来到列表的部份,加入 #ui ul
选择器,将 list-style
设定为 none
,取消列表的样式,margin
和 padding
设定为 0
。
再设定里面的图片的样式,加入 #ui ul li img
选择器,设定 display
是 block
,宽度从变量中获取,高度是 auto
,margin
设定为上下 10px
,左右 auto
。padding-bottom
是 10px
,然后再加一条下边框线。
现在界面基本上已设定好了,接下来处理动画的部份。
动画的部分
我们先了解一下这个动画的原理,它是在页面卷动的时候,一行一行的由大至小滑入至列表中,先试试在 CSS 中将效果实现出来。
加入 #ui ul li img:hover
选择器,设定 transform
为 scale(1.8)
,然后 opacity
设定为 0
。在 #ui ul li img
选择器内加入 transition: .25s transform ease-in-out;
,现在试试将游标移至其中一行,就可以实现将图片由放大至缩小,回到列表中的效果。
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
打开全栈工匠技能包-1小时轻松掌握SSR
两小时精通jq+bs插件开发
生产环境下如歌部署Node.js
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
网易内部VUE自定义插件库NPM集成
谁说前端不用懂安全,XSS跨站脚本的危害
webpack的loader到底是什么样的?两小时带你写一个自己loader
说前端不用懂安全,XSS跨站脚本的危害
webpack的loader到底是什么样的?两小时带你写一个自己loader