HarmonyOS之CSS实现哆啦A梦头像

系统 OpenHarmony
相信很多人的童年是看哆啦A梦一起长大的吧,小时候是真的希望能有一个自己的蓝胖子,因为蓝胖子无所不能。那么这次试着用纯css来实现一个静态版本的蓝胖子吧。

​想了解更多内容,请访问:​

​51CTO和华为官方合作共建的鸿蒙技术社区​

​https://ost.51cto.com​

前言:

相信很多人的童年是看哆啦A梦一起长大的吧,小时候是真的希望能有一个自己的蓝胖子,因为蓝胖子无所不能。它伴随着我很长的一段童年生活。那么这次试着用纯css来实现一个静态版本的蓝胖子吧。

效果展示

实现步骤

根据蓝胖子结构先定义好外部hml结构:

将head分解为三个部分分别为:眼睛(eyes),脸(face)和围巾(scarf)。

hml代码:

<div class="container">
<!--整体头部布局-->
<div class="head">
<!-- 眼睛-->
<div class="eyes"></div>
<!-- 脸部-->
<div class="face"></div>
<!-- 围脖-->
<div class="scarf"></div>
</div>
</div>

css代码部分:

.container {
flex-direction: column;
width: 100%;
height: 100%;
}
/*头部样式代码*/
.head{
width:480px;
height:350px;
background-color: #0093dd;
position:relative;
margin:20px;
border-radius:220px;
border:2px solid rgb(41,102,123);
flex-direction: column;
}
/*眼睛部分样式代码*/
.eyes{
position: relative;
top: 34px;
width: 208px;
height: 120px;
display:flex;
justify-content: center;
left:50%;
transform:translateX(-50%);
}
/*脸部外层css*/
.face{
position: relative;
top: 10px;
width: 280px;
height: 260px;
border-radius: 180px;
border: 2px solid #000;
background-color:#fff;
left:50%;
transform:translateX(-50%);
flex-direction: column;
}
/*围脖部分的css*/
.scarf{
position: relative;
z-index: 10;
top: 20px;
width: 300px;
height: 30px;
left:50%;
transform:translateX(-50%);
border: 2px solid #000;
border-radius: 16px;
background-image:linear-gradient(top,rgb(195,64,20),rgb(121,13,11));
}

第一步:我们来看看眼睛是如何实现的:

眼睛部分的hml代码结构:

     <div class="eyes">
<!-- 左眼-->
<div class="left-e">
<!-- 左眼珠-->
<div class="eyeball-left"></div>
</div>
<!-- 右眼-->
<div class="right-e">
<!-- 右眼珠-->
<div class="eyeball-right"></div>
</div>
</div>

眼睛部分的css代码部分:

/*眼睛部分样式代码*/
.eyes{
position: relative;
top: 34px;
width: 208px;
height: 120px;
display:flex;
justify-content: center;
left:50%;
transform:translateX(-50%);
}
/*左右眼公共的css*/
.left-e,.right-e{
position: absolute;
width: 100px;
height: 110px;
border: 2px solid black;
border-radius: 50px;
background-color:#fff;
z-index: 3;
}
/*左眼定位css*/
.left-e{
left:0;
}
/*右眼定位css*/
.right-e{
right:0;
}
/*黑色的眼球部分的css*/
.eyeball-left,.eyeball-right{
position: absolute;
top: 70px;
background-color:#000;
width: 20px;
height: 20px;
border-radius: 10px;
}
/*左眼球css*/
.eyeball-left{
right:10px;
top: 62px;
}
/*右眼球css*/
.eyeball-right{
left: 10px;
top: 62px;
}

此时的效果图为:

第二步:我们来看看脸是如何实现的

脸(face)的部分可分解为:鼻子(nose),胡须(whiskers),中间的对称线(symmetric-line),嘴巴(mouth)。

脸部分hml代码:

<div class="face">
<!--鼻子-->
<div class="nose"></div>
<!--胡须-->
<div class="whiskers">
<!--左胡须-->
<div class="whiskers-left">
<!--上胡须-->
<div class="wlfirst"></div>
<!--中间胡须 -->
<div class="wlsecond"></div>
<!--下胡须-->
<div class="wlthree"></div>
</div>
<!--右胡须-->
<div class="whiskers-right">
<!--上胡须-->
<div class="wrfirst"></div>
<!--中间胡须-->
<div class="wrsecond"></div>
<!--下胡须-->
<div class="wrthree"></div>
</div>
</div>
<!--中轴线-->
<div class="symmetric-line"></div>
<!--嘴巴-->
<div class="mouth">
<div class="smile"></div>
</div>
</div>

脸部分的css代码:

/*脸部外层css*/
.face{
position: relative;
top: 10px;
width: 280px;
height: 260px;
border-radius: 180px;
border: 2px solid #000;
background-color:#fff;
left:50%;
transform:translateX(-50%);
flex-direction: column;
}
/*鼻子部分的css*/
.nose{
position: relative;
left:50%;
transform:translateX(-50%);
top:0px;
width: 40px;
height: 40px;
border: 2px solid #000;
border-radius: 20px;
background-color:red;
z-index:4;
}
/*胡须部分的css*/
.whiskers{
position: relative;
top: 20px;
left:50%;
transform:translateX(-50%);
width: 200px;
height: 50px;
}
/*左胡须*/
.whiskers-left{
position: absolute;
left: 0;
flex-direction: column;
}
/*右胡须*/
.whiskers-right{
position: absolute;
right: 0;
flex-direction: column;
}
/*第一个胡须的css*/
.wlfirst,.wrfirst{
width: 60px;
height: 4px;
background-color:#000;
margin-bottom: 10px;
}
/*中间胡须的css*/
.wlsecond,.wrsecond{
width: 58px;
height: 4px;
background-color:#000;
}
/*下边的胡须的css*/
.wlthree,.wrthree{
width: 60px;
height: 4px;
background-color:#000;
margin-top: 10px;
}
/*左边上胡须的旋转*/
.wlfirst{
transform-origin:50px 0;
transform: rotate(30deg);
}
/*有边上胡须的旋转*/
.wrfirst{
transform-origin: 10px 0;
transform: rotate(-30deg);
}
/*左边下胡须的旋转*/
.wlthree{
transform-origin: 50px 0;
transform: rotate(-30deg);
}
/*右边下胡须的旋转*/
.wrthree{
transform-origin: 10px 0;
transform: rotate(30deg);
}
/*最中间的那个对称线css*/
.symmetric-line{
position: relative;
top: -40px;
height: 160px;
width: 3px;
background-color:#000;
left:50%;
transform:translateX(-50%);
}
/*嘴巴最外层部分的css*/
.mouth{
width: 200px;
height: 52px;
position: absolute;
left: 50%;
transform: translateX(-50%);
top: 142px;
background-color: #000;
border-radius: 200px 200px 4px 4px;
}
/*嘴巴部分的css*/
.smile{
position: absolute;
width: 200px;
height: 52px;
border-radius: 200px 200px 0 0;
background-color: #fff;
left: 50%;
transform:translateX(-50%);
top:-4px;
}

此时效果图:

第三步:实现围脖

接下来就是围脖这部分的代码了,围脖部分分为了两个部分:围脖,铃铛。

hml代码:

<div class="scarf">
<!-- 铃铛-->
<div class="bell">
<!-- 第一根横线-->
<div class="bell-1"></div>
<!-- 第二根横线-->
<div class="bell-2"></div>
<!-- 铃铛上的圆-->
<div class="bell-3"></div>
<!-- 铃铛下的线-->
<div class="bell-4"></div>
</div>
</div>

css部分代码:

/*围脖部分的css*/
.scarf{
position: relative;
z-index: 10;
top: 20px;
width: 300px;
height: 30px;
left:50%;
transform:translateX(-50%);
border: 2px solid #000;
border-radius: 16px;
background-image:linear-gradient(top,rgb(195,64,20),rgb(121,13,11));
}
/*铃铛部分css*/
.bell{
position: relative;
top: 10px;
width: 40px;
height: 40px;
border: 2px solid #000;
border-radius: 40px;
background-color:#CD7F32;
left:50%;
transform:translateX(-50%);
flex-direction: column;
}
.bell-1,.bell-2,.bell-3,.bell-4{
position: relative;
background-color:#000;
}
/*第一个线条css*/
.bell-1{
top: 4px;
width: 100%;
height: 4px;
}
/*第二个线条css*/
.bell-2{
top: 6px;
width: 100%;
height: 4px;
}
/*铃铛上的孔css*/
.bell-3{
left:50%;
transform:translateX(-50%);
top: 8px;
width: 16px;
height: 16px;
border-radius: 8px;
}
/*铃铛孔下面的黑线css*/
.bell-4{
top: 2px;
height: 100%;
width: 4px;
left:50%;
transform:translateX(-50%);
}

最终的效果图如下:

总结

以上就是所有的代码,最初的预览也如最上面的效果图的展示。其实写这个不难,主要是调试起来麻烦,而且也不像普通的css样式一样,在鸿蒙系统中存在着相当一部分的css样式不支持。主要是需要调试好position和css3transform属性的应用上。欢迎各位开发者一起讨论与研究,本次分享希望对大家的学习有所帮助。

​想了解更多内容,请访问:​

​51CTO和华为官方合作共建的鸿蒙技术社区​

​https://ost.51cto.com​

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2015-06-16 13:06:03

运维管理北塔软件

2015-12-14 16:57:45

高潮挑歌

2016-10-11 08:32:24

人工智能认知计算

2015-06-03 17:25:01

戴尔云计算

2020-05-20 14:19:47

滴滴开源工具

2022-10-24 17:57:06

CSS容器查询

2022-05-05 18:32:18

浏览器图片CSS

2015-04-24 10:05:15

HTML+CSS阿童木头像

2016-03-25 13:43:19

飞象网

2018-05-09 10:19:24

AI校园暴力校园

2012-05-24 10:15:48

PHP

2012-04-09 17:36:38

华为智真

2015-08-05 16:24:34

Dreamlizer

2024-11-29 10:58:54

CSS代码黑模式

2017-06-08 16:07:18

互联网

2022-08-29 17:39:53

应用开发css动画

2022-09-14 09:27:49

CSS架构代码

2023-09-28 10:21:44

CSS前端

2023-09-29 11:32:07

2010-08-25 09:30:56

marginCSS
点赞
收藏

51CTO技术栈公众号