> 技术文档 > 前端开发者30分钟搞定鸿蒙布局一

前端开发者30分钟搞定鸿蒙布局一

“当你的CSS肌肉记忆遇到鸿蒙ArkUI——不是挑战,而是降维打击!
作为前端开发者,你早已征服Flexbox、玩转Grid布局、驯服响应式设计。现在,鸿蒙生态正以万亿级市场红利敞开大门,而我要告诉你一个被无数同行验证的事实:迁移鸿蒙布局的核心技能,你只需30分钟!喝杯咖啡的时间,你就能让代码在HarmonyOS上华丽绽放!

容器组件使用

前端中声明一个容器   高100  宽100  背景色   边框的写法

   Document  *{ margin: 0; padding: 0; list-style: none; } .box{ width: 100px; height: 100px; background-color: red; border: 10px solid black; }  

鸿蒙中声明一个容器   高100  宽100  背景色   边框的写法

 @Entry@Componentstruct Index { build() { //看这里就可以了 Column() { }.width(100).height(100).backgroundColor(Color.Red) .border({ width:10, color:Color.Black, style:BorderStyle.Solid }) }}

PS:鸿蒙中需要单位可以不加默认是vp  前端中单位要写px,核心单词都是一样的,只不过鸿蒙中都是属性方法  一个个点出来的

效果如下  红色的背景,黑色的边框

线性容器布局的使用

作为前端开发者 容器布局只需要掌握弹性盒(Flex) 在鸿蒙中如果是线性布局相关内容可以直接会

需求:一个大盒子里面有三个小盒子 横向排列 平均分

前端中

   .box{ width: 100%; display: flex; flex-direction: row; } .box .item{ flex: 1; background-color: red; color: wheat; }  
1
2
3
4

鸿蒙中

@Entry@Componentstruct Second { @Styles MyStyle(){ .backgroundColor(Color.Red) } build() { Flex({ direction: FlexDirection.Row }) { Row() { Text(\"1\").fontColor(Color.White) }.flexGrow(1).MyStyle() Row() { Text(\"2\").fontColor(Color.White) }.flexGrow(1).MyStyle() Row() { Text(\"3\").fontColor(Color.White) }.flexGrow(1).MyStyle() } .height(\'100%\') .width(\'100%\') }}

PS:鸿蒙中主要容器是Flex   控制在Flex的方法中添加属性  属性名称和前端Flex的属性名称一样

公共样式可以抽出来用@Styles来包裹 使用的时候点击公共样式的名称就可以了

效果

实操

1:改变主轴方向

代码

@Entry@Componentstruct Second { @Styles MyStyle(){ .backgroundColor(Color.Red) } build() { Flex({ direction: FlexDirection.Column }) { Row() { Text(\"1\").fontColor(Color.White) }.flexGrow(1).MyStyle() Row() { Text(\"2\").fontColor(Color.White) }.flexGrow(1).MyStyle() Row() { Text(\"3\").fontColor(Color.White) }.flexGrow(1).MyStyle() } .height(\'100%\') .width(\'100%\') }}

2:改变交叉轴的位置(交叉轴水平布局的交叉轴是垂直方向,  垂直方向布局的交叉轴就是水平)

修改刚才的代码

容器高度为200  里面子元素高度20  子元素水平布局   垂直方向(交叉轴) 垂直居中

前端代码如下

   .box{ width: 100%; height: 100px; display: flex; flex-direction: row; align-items: center; border: 5px solid blue; } .box .item{ flex: 1; background-color: red; color: wheat; height: 20px; }  
1
2
3
4

前端页面效果

鸿蒙中代码

@Entry@Componentstruct Second { @Styles MyStyle(){ .backgroundColor(Color.Red) .height(20) } build() { Flex({ direction: FlexDirection.Row, alignItems:ItemAlign.Center }) { Row() { Text(\"1\").fontColor(Color.White) }.flexGrow(1).MyStyle() Row() { Text(\"2\").fontColor(Color.White) }.flexGrow(1).MyStyle() Row() { Text(\"3\").fontColor(Color.White) }.flexGrow(1).MyStyle() } .height(200) .width(\'100%\') .border({ width:10, color:Color.Blue, style:BorderStyle.Solid }) }}

效果

同理 如果内容没有平均分   可以设置主轴去控制位置

前端中

   Document  *{ margin: 0; padding: 0; list-style: none; }  .box{ width: 100%; height: 100px; display: flex; flex-direction: row; align-items: center; justify-content:space-between;/*新增两端对齐 这样的属性有六个 start end center space—around space-evenly*/ border: 5px solid blue; } .box .item{ /* flex: 1;这里注释了 */ background-color: red; color: wheat; height: 20px; }  
1
2
3
4

效果  两端对齐中间平分

鸿蒙中

@Entry@Componentstruct Second { @Styles MyStyle(){ .backgroundColor(Color.Red) .height(20) } build() { Flex({ direction: FlexDirection.Row, alignItems:ItemAlign.Center, justifyContent:FlexAlign.SpaceBetween }) { Row() { Text(\"1\").fontColor(Color.White) }.MyStyle() Row() { Text(\"2\").fontColor(Color.White) }.MyStyle() Row() { Text(\"3\").fontColor(Color.White) }.MyStyle() } .height(200) .width(\'100%\') .border({ width:10, color:Color.Blue, style:BorderStyle.Solid }) }}

效果

未完待续,休息时间可以加入班级 看免费的视频学习一下

鸿蒙学习认证地址