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

52 阅读4分钟

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

容器组件使用

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        .box{
            width: 100px;
            height: 100px;
            background-color: red;
            border: 10px solid black;
        }
    </style>
</head>
<body>
    <div class="box"></div>
    
</body>
</html>

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

 @Entry
@Component
struct Index {

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

  }
}

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

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

​编辑

线性容器布局的使用

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

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

前端中

    <style>
       
        .box{
            width: 100%;
            display: flex;
            flex-direction: row;
        }
        .box  .item{
            flex: 1;
            background-color: red;
            color: wheat;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
    </div>
</body>

鸿蒙中

@Entry
@Component
struct 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
@Component
struct 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  子元素水平布局   垂直方向(交叉轴) 垂直居中

前端代码如下

    <style>
       
        .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;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
    </div>
</body>

前端页面效果

​编辑

鸿蒙中代码

@Entry
@Component
struct 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
    })
  }
}

效果

​编辑

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

前端中


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            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;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
    </div>
</body>
</html>

效果  两端对齐中间平分

​编辑

鸿蒙中

@Entry
@Component
struct 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
    })
  }
}

效果

​编辑

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

鸿蒙学习认证地址