前言
《异度神剑3》是一款由任天堂子公司MONOLITH SOFT开发的冒险类RPG游戏。本作原定2022年9月发售,后提前发售日期,预定于2022年7月29日发售
为庆祝异度之刃已经发售,用CSS做一台switchlite
需求分析
首先switchlite 是这个样子的(图片来源任天堂港服官网)
创建一个div 作为外层
<div class="switch" ></div>
观察一下可以把switchlite分成两个部分:
第一部分 外层L键、R键、L键右侧的两个凸起按键
第二部分 switchlite主体
switchlite主体
首先做switchlite外壳的样式
<div class="switch" >
<div class="switch-body"/>
</div>
.switch {
position: relative;
margin-left: auto;
margin-right: auto;
width: 665px;
height: 300px;
margin: 170px auto 0 auto
}
.switch-body {
position: absolute;
top: 5px;
left: 5px;
background-color: #fff;
display: block;
width: 655px;
height: 290px;
border-radius: 70px;
background-image: linear-gradient(#FF8688, #FF7B81);
box-shadow: -1px -7px 4px #F0696D inset, 6px 5px 6px #FE8C90 inset, 10px 10px 4px #FFAFB1 inset, -4px 5px 4px #FA7F84 inset, -10px 10px 4px #FD9A9E inset, 0 80px 40px -70px rgba(0, 0, 0, 0.3)
}
然后暂时先不去做switch上面的按钮和屏幕,先做外侧的按键
switchlite外侧按键
左右两侧的透明按钮
<div class="switch" >
<div class="back left"></div>
<div class="back right"></div>
<div class="switch-body"/>
</div>
.back {
display: block;
width: 170px;
height: 120px;
background-color: #DADADA;
position: absolute;
top: 4px;
border-radius: 70px
}
.back.left {
left: 2px;
box-shadow: 1px 1px 1px 0 #C1C1C1 inset, 2px 2px 1px 0 #FFF inset
}
.back.right {
right: 2px;
box-shadow: -1px 1px 1px 0 #C1C1C1 inset, -2px 2px 1px 0 #FFF inset
}
最后是L键右侧的两个凸起按键
<div class="switch" >
<div class="volume down"></div>
<div class="volume up"></div>
<div class="back left"></div>
<div class="back right"></div>
<div class="switch-body" />
</div>
.volume {
display: block;
width: 16px;
height: 2px;
position: absolute;
top: 3px;
background-image: linear-gradient(#FA8888, #E56B69);
border-radius: 1px
}
.volume.down {
left: 145px
}
.volume.up {
left: 175px
}
switchlite 按键
剩下的内容也可以分为三个部分(左侧按键,屏幕,右侧按键)
为了方便做左右两侧的按键的位置,这边先把中间的屏幕做出来
<div class="switch" >
<div class="volume down"></div>
<div class="volume up"></div>
<div class="back left"></div>
<div class="back right"></div>
<div class="switch-body">
<div class="screen-container">
</div>
</div>
</div>
.screen-container {
display: block;
width: 445px;
height: 250px;
background-color: #fff;
margin-left: auto;
margin-right: auto;
position: absolute;
top: 20px;
left: 0;
right: 0;
border-radius: 9px;
background-image: linear-gradient(#F4797C, #F07477);
box-shadow: 0 0 .5px .5px #FF9395, 0px -3px 4px #E56A6F inset, 1px 1.5px 1.5px #BA525A inset, 4px 4px 2px #FD8186 inset, -1px 1.5px 1.5px #BA525A inset, -4px 4px 2px #FD8186 inset
}
设置内屏样式
<div class="switch" >
<div class="volume down"></div>
<div class="volume up"></div>
<div class="back left"></div>
<div class="back right"></div>
<div class="switch-body">
<div class="screen-container">
<div class="screen"></div>
</div>
</div>
</div>
.screen {
display: block;
width: 390px;
height: 225px;
background-color: #FFDADB;
margin-left: auto;
margin-right: auto;
position: absolute;
left: 0;
right: 0;
top: 15px;
border-radius: 2px;
box-shadow: 0 0 1px 1px #EB8B89, 0 0 0 5px #030303 inset
}
把左右两侧减号与加号的样式添加一下
<div class="switch" >
<div class="volume down"></div>
<div class="volume up"></div>
<div class="back left"></div>
<div class="back right"></div>
<div class="switch-body">
<div class="minus"></div>
<div class="plus">
<div class="vertical"></div>
<div class="horizontal"></div>
</div>
<div class="screen-container">
<div class="screen"></div>
</div>
</div>
</div>
.minus {
position: absolute;
display: block;
width: 16px;
height: 4px;
top: 30px;
left: 80px;
border-radius: 1px;
background-color: #DFD5D9;
box-shadow: 0 0 .5px .75px #4B0607, 0 0 0 .5px #FFFAF8 inset, 0 2.5px 4px -1px #B84849
}
.plus {
display: block;
width: 15px;
height: 15px;
position: absolute;
top: 25px;
right: 80px
}
.plus:before,
.plus:after {
content: "";
display: block;
width: 5.5px;
height: 100%;
background-color: #340005;
margin-left: auto;
margin-right: auto;
border-radius: 1px;
position: absolute;
left: 0;
right: 0;
box-shadow: 0 1px 1px rgba(52, 0, 5, 0.2), 0 0 .5px rgba(52, 0, 5, 0.5)
}
.plus:after {
width: 5px;
transform: rotate(90deg)
}
做两侧对称的摇杆
<div class="switch" >
<div class="volume down"></div>
<div class="volume up"></div>
<div class="back left"></div>
<div class="back right"></div>
<div class="switch-body">
<div class="minus"></div>
<div class="plus">
<div class="vertical"></div>
<div class="horizontal"></div>
</div>
<div class="screen-container">
<div class="screen"></div>
</div>
<div class="controller left"></div>
</div>
</div>
.controller {
display: block;
width: 50px;
height: 50px;
border-radius: 25px;
background-image: linear-gradient(-135deg, #F4F2F0, #AFAFAF);
box-shadow: 0 -4.5px 3px #BAB6B3 inset, 0 0 .5px 5px #EFEDEE inset, 0 -5px .5px 1px white inset, -1.5px 1.5px 2px 4px #888 inset, 0 0 1px 1px #2F0000, 0 -1px 1.5px 1px #913639, 0 10px 14px -2px #C64850
}
.controller.left {
position: absolute;
left: 33px;
top: 55px
}
右侧摇杆调整对应位置即可
左侧的十字按键
<div class="arrow-container">
<div class="arrow top"></div>
<div class="arrow right"></div>
<div class="arrow bottom"></div>
<div class="arrow left"></div>
</div>
.arrow-container {
display: block;
width: 62px;
height: 62px;
position: absolute;
top: 140px;
left: 25px
}
.arrow-container:before,
.arrow-container:after {
position: absolute;
left: 0;
right: 0;
content: "";
display: block;
width: 22px;
height: 100%;
background-color: yellow;
border-radius: 3px;
margin-left: auto;
margin-right: auto;
background-color: #0B0000
}
.arrow-container:after {
transform: rotate(90deg)
}
.arrow {
position: absolute;
display: block;
width: 19px;
height: 50%;
background-color: #D2D2D2;
z-index: 1;
border-radius: 2px
}
.arrow:after {
content: "";
display: block;
width: 0;
height: 0;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-bottom: 6px solid #B8BAB9;
position: absolute;
top: 6px;
left: 0;
right: 0;
margin-left: auto;
margin-right: auto
}
.arrow.top {
top: 1.5px;
margin-left: auto;
margin-right: auto;
left: 0;
right: 0;
box-shadow: 0 2px 2px #FAF5F7 inset, -1.5px 0 1px #FAF5F7 inset, 1px 0 1px #FAF5F7 inset
}
.arrow.bottom {
transform: rotate(180deg);
bottom: 1px;
margin-left: auto;
margin-right: auto;
left: 0;
right: 0;
box-shadow: 0 4px 2px -2px #B2A4A9 inset
}
.arrow.right {
top: 15.5px;
transform: rotate(90deg);
right: 8px;
box-shadow: 0 3px 2px -2px #FFFBFC inset
}
.arrow.left {
top: 15.5px;
transform: rotate(-90deg);
left: 7px;
box-shadow: 0 4px 2px -2px #FAF5F7 inset
}
右侧按键样式
<div class="button-container" aria-hidden="true">
<div class="button top">
<p>X</p>
</div>
<div class="button right">
<p>A</p>
</div>
<div class="button bottom">
<p>B</p>
</div>
<div class="button left">
<p>Y</p>
</div>
</div>
.button-container {
display: block;
width: 75px;
height: 75px;
position: absolute;
top: 45px;
right: 20px
}
.button {
display: block;
position: absolute;
width: 23px;
height: 23px;
border-radius: 12.5px;
background-color: #DBDBD9;
background-image: linear-gradient(#E1DFE0, #D1D4CF);
box-shadow: 0 2px .75px #F4F6FA inset, 0 -2px .75px #B8A8A4 inset, -2px 0 .75px #D1C7C9 inset, 2px 0 .75px #D1C7C9 inset, 0 0 1px 1px #450709, 0 -2px 1px 1px #EC919B, 0 5px 4px -2px #D35657
}
.button.top {
top: 1px
}
.button.bottom {
bottom: 1px
}
.button.top,
.button.bottom {
left: 0;
right: 0;
margin-left: auto;
margin-right: auto
}
.button.left {
left: 1px
}
.button.right {
right: 1px
}
.button.left,
.button.right {
top: 25px
}
.button p {
text-align: center;
margin-top: 4px;
font-family: sans-serif;
font-size: .75rem;
color: #B2B2B2
}
最后是左右侧两端下部按钮
<div class="screenshot"></div>
<div class="home"></div>
.vertical,
.horizontal {
position: absolute;
display: block;
width: 3.5px;
z-index: 1;
background-color: #E3E2DE;
position: absolute;
left: 0;
right: 0;
margin-left: auto;
margin-right: auto;
border-radius: .5px
}
.vertical {
top: 1px;
height: 13px
}
.horizontal {
transform: rotate(90deg);
top: 1px;
height: 13.5px
}
最后我们将异度之刃的图片设置到屏幕上 code.juejin.cn/pen/7124094…
“我正在参加「创意开发 投稿大赛」详情请看:掘金创意开发大赛来了!”