从切图仔到鸿蒙开发01-文本样式

从切图仔到鸿蒙开发01-文本样式

本系列教程适合 HarmonyOS 初学者,为那些熟悉用 HTML 与 CSS 语法的 Web 前端开发者准备的。

本系列教程会将 HTML/CSS 代码片段替换为等价的 HarmonyOS/ArkUI 代码。

请添加图片描述

页面结构 HTML 与 ArkUI

Web 开发中,HTML 文档结构由<html><head><body>等标签组成,其中<body>标签包含了页面中所有可见的内容。

而在 HarmonyOSArkUI 框架中,使用@Entry@Component装饰器定义组件,并通过build()方法定义页面内容。

基本结构对比

HTML文档结构:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>页面标题</title>
</head>
<body><!-- 页面内容放这里 -->
</body>
</html>

ArkUI组件结构:

@Entry
@Component
struct MyComponent {build() {// 页面内容放这里}
}

文本处理对比

在Web开发中,我们习惯使用各种HTML标签来表示不同语义的文本内容,例如标题、段落、强调等。

而在HarmonyOS的ArkUI中,文本处理方式有所不同,主要依赖 Text 组件和 Span 组件。

基本概念对比

HTML概念HarmonyOS/ArkUI概念
语义化标签 (h1-h6, p等)无需语义化标签,统一使用Text组件
标签嵌套组件链式调用和嵌套
样式通过CSS设置样式通过链式API设置
内联样式直接在组件后链式调用样式方法

文本显示对比

下面通过具体示例对比HTML和ArkUI的文本显示方式:

1. 标题和段落

HTML代码:

<h1>我是一级标题</h1>
<h2>我是二级标题</h2>
<h3>我是三级标题</h3>
<h4>我是四级标题</h4>
<h5>我是五级标题</h5>
<h6>我是六级标题</h6>
<p>我是一个段落<br>我被换行了</p>

ArkUI代码:

// 鸿蒙系统中没有语义化标签的概念
// 所有文本都使用Text组件,通过样式区分不同级别
Text('我是一级标题').fontSize(32) // 通过字体大小区分标题级别.fontWeight(FontWeight.Bold)Text('我是二级标题').fontSize(24).fontWeight(FontWeight.Bold)// 以此类推...// 段落和换行
Text('我是一个段落\n我被换行了')
// 注意:在ArkUI中使用\n实现换行,而不是<br>标签
2. 文本样式

HTML代码:

<p>我是<strong>加粗</strong></p>
<p>我是<em>倾斜</em></p>
<p>我是<del>删除线</del></p>
<p>我是<ins>下划线</ins></p>

ArkUI代码:

// 在ArkUI中,样式化的文本使用Text和Span组合实现
Text() {Span('我是')Span('加粗').fontWeight(FontWeight.Bold) // 对应HTML的<strong>Span('的文本')
}Text() {Span('我是')Span('倾斜').fontStyle(FontStyle.Italic) // 对应HTML的<em>Span('的文本')
}Text() {Span('我是')Span('删除线').decoration({ type: TextDecorationType.LineThrough }) // 对应HTML的<del>Span('的文本')
}Text() {Span('我是')Span('下划线').decoration({ type: TextDecorationType.Underline }) // 对应HTML的<ins>Span('的文本')
}

布局容器

在HTML中,我们使用 <div> 作为通用容器来组织内容。

在ArkUI中,主要使用 ColumnRow 等容器。

HTML代码:

<div class="column"><!-- 内容放这里 -->
</div><style>* {margin: 0;padding: 0;/* 为了与 ArkUI 盒子模型保持一致,所有 HTML 元素的 CSS 盒模型被设置为 border-box */box-sizing: border-box;}.column{display: flex;flex-direction: column;gap: 10px;width: 100%;height: 100%;align-items: center;}
</style>

ArkUI代码:

// 默认为纵向排列的容器,类似于CSS的flex-direction: column
Column({ space: 10 }) { // space参数设置子组件之间的间距,类似CSS的gap// 内容放这里
}
.width('100%') // 设置宽度,链式API调用
.height('100%') // 设置高度
.alignItems(HorizontalAlign.Center) // 水平对齐方式,类似CSS的align-items

关键区别总结

  1. 组件化思维
    • HTML使用标签表示不同语义
    • ArkUI使用组件表示UI元素,不强调语义
  2. 样式应用方式
    • HTML/CSS分离内容和样式
    • ArkUI使用链式API直接在组件上设置样式
  3. 布局方式
    • HTML依赖CSS盒模型和Flexbox
    • ArkUI内置容器组件如Column、Row实现布局
  4. 语法结构
    • HTML使用开闭标签和属性
    • ArkUI使用TypeScript语法和方法链

学习建议

  1. 理解组件化思维:将HTML标签概念转变为组件概念
  2. 掌握ArkUI基础组件
    • Text:文本显示
    • Span:富文本片段
    • Column:纵向容器
    • Row:横向容器
  3. 链式API调用习惯:样式设置通过链式方法调用而非CSS属性
  4. 布局思维转变:使用容器组件的嵌套来实现复杂布局

总结

作为Web开发者,迁移到HarmonyOS开发需要转变思维模式,从标签和CSS的分离到组件和链式API的结合。虽然语法不同,但概念是相通的。只要掌握了基本对应关系,Web开发者能够快速适应HarmonyOS开发。

希望这篇 HarmonyOS Next 教程对你有所帮助,期待您的 👍点赞、💬评论、🌟收藏 支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39455.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础入门网络爬虫第5天:Scrapy框架

4周 Srapy爬虫框架 不是一个简单的函数功能库&#xff0c;而是一个爬虫框架 安装&#xff1a;pip install scrapy 检测&#xff1a;scrapy -h Scrapy爬虫框架结构 爬虫框架 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合爬虫框架是一个半成品&#xff0c;能够帮助…

C语言:扫雷

在编程的世界里&#xff0c;扫雷游戏是一个经典的实践项目。它不仅能帮助我们巩固编程知识&#xff0c;还能锻炼逻辑思维和解决问题的能力。今天&#xff0c;就让我们一起用 C 语言来实现这个有趣的游戏&#xff0c;并且通过图文并茂的方式&#xff0c;让每一步都清晰易懂 1. 游…

同一个局域网的话 如何访问另一台电脑的ip

在局域网内访问另一台电脑&#xff0c;可以通过以下几种常见的方法来实现&#xff1a; ‌直接通过IP地址访问‌&#xff1a; 首先&#xff0c;确保两台电脑都连接在同一个局域网内。获取目标电脑的IP地址&#xff0c;这可以通过在目标电脑上打开命令提示符&#xff08;Windows系…

记录我的ICME2025论文之旅:困顿与收获

人生第一次中B会&#xff0c;还是在课业繁重的大三上&#xff08;有点说法~&#xff09; “在最黑暗的时刻&#xff0c;总有一束光为你指引前行。” ——记录这段难忘的历程 今年的ICME投稿量创下新高&#xff0c;录取率却跌至20多%&#xff0c;并且首次加入了rebuttal&#xf…

MySQL多表查询

这是两个表多表查询&#xff0c;需要一个连接条件customer_id。如果有n个表实现多表查询&#xff0c;至少需要n-1个连接条件。如果少于n-1个&#xff0c;就会出现笛卡尔积的错误。 SELECT orders.order_id, customers.customer_name FROM orders INNER JOIN customers ON orde…

vue3 项目的最新eslint9 + prettier 配置

注意&#xff1a;eslint目前升级到9版本了 在 ESLint v9 中&#xff0c;配置文件已经从 .eslintrc 迁移到了 eslint.config.js 配置的方式和之前的方式不太一样了&#xff01;&#xff01;&#xff01;&#xff01; 详见自己的语雀文档&#xff1a;5、新版eslint9prettier 配…

目标检测20年(三)

对这篇论文感兴趣的小伙伴可以订阅笔者《目标检测》专栏&#xff0c;关注笔者对该文献的阅读和理解。 前两篇解读链接&#xff1a; 目标检测20年&#xff08;一&#xff09;-CSDN博客 目标检测20年&#xff08;二&#xff09;-CSDN博客 目录 四、 检测器的加速发展 4.1 特…

LLM之RAG实战(五十二)| 如何使用混合搜索优化RAG 检索

在RAG项目中&#xff0c;大模型生成的参考内容&#xff08;专业术语称为块&#xff09;来自前一步的检索&#xff0c;检索的内容在很大程度上直接决定了生成的效果&#xff0c;因此检索对于RAG项目至关重要&#xff0c;最常用的检索方法是关键字搜索和语义搜索。本文将分别介绍…

2025-3-24 leetcode刷题情况(动态规划——01背包)

一、416.分割等和子集 1.题目描述 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 2.代码 3.思路 首先进行边界检查&#xff0c;若数组为空则直接返回 false。接着计算数组元素总和&#xff…

Lineageos 22.1(Android 15)实现负一屏

一、前言 方案是参考的这位大佬的&#xff0c;大家可以去付费订阅支持一波。我大概理一下Android15的修改。 大佬的方案代码 二、Android15适配调整 1.bp调整&#xff0c;加入aidl引入&#xff0c;这样make之后就可以索引代码了 filegroup {name: "launcher-src"…

5G NR PRACH 随机接入前导序列

目录 一、前言二、随机接入前导序列的产生三、 N c s N_{cs} Ncs​的规划3.1、 L R A L_{RA} LRA​839 N c s N_{cs} Ncs​规划3.2、 L R A L_{RA} LRA​139 N c s N_{cs} Ncs​规划3.3、 N c s N_{cs} Ncs​确定方法 四、根序列的规划4.1、根序列的选择与确定4.2、循环移位 …

【VUE】day07 路由

【VUE】day07 路由 1. 路由2. 前端路由的工作方式3. 实现简易的前端路由4. 安装和配置路由4.1 安装vue-router包4.2 创建路由模块4.3 导入并挂在路由模块 5. 在路由模块中声明路由的对应关系5.1 router-view 1. 路由 在 Vue.js 中&#xff0c;路由&#xff08;Routing&#xf…

WPS宏开发手册——使用、工程、模块介绍

目录 系列文章前言1、开始1.1、宏编辑器使用步骤1.2、工程1.3、工程 系列文章 使用、工程、模块介绍 JSA语法 第三篇练习练习题&#xff0c;持续更新中… 前言 如果你是开发人员&#xff0c;那么wps宏开发对你来说手拿把切。反之还挺吃力&#xff0c;需要嘻嘻&#xf…

数学概念学习

# 欧式空间 ## 定义 日常生活观察到的几何空间&#xff1a;一维、平面和三维空间。 ## 点与向量 是欧式空间的基本元素。 ## 距离和内积 距离&#xff1a;通过欧几里得距离公式计算 内积&#xff08;点积&#xff09;&#xff1a; 通过两个向量的内积来测量他们的相似性&…

InnoDB 引擎核心知识点

InnoDB 引擎核心知识点 6.1 逻辑存储结构 表空间&#xff08;Tablespace&#xff09;&#xff1a;所有数据逻辑上存储在一个表空间中&#xff0c;物理上可能由多个文件组成。段&#xff08;Segment&#xff09;&#xff1a;分为数据段&#xff08;B树叶子节点&#xff09;、索引…

C++《红黑树》

在之前的篇章当中我们已经了解了基于二叉搜索树的AVL树&#xff0c;那么接下来在本篇当中将继续来学习另一种基于二叉搜索树的树状结构——红黑树&#xff0c;在此和之前学习AVL树类似还是通过先了解红黑树是什么以及红黑树的结构特点&#xff0c;接下来在试着实现红黑树的结构…

java实现coze平台鉴权+工作流调用(踩坑记录)

问题偏多建议大家看完文章后再开始实现 OAuth鉴权 https://www.coze.cn/open/docs/developer_guides/preparation https://www.coze.cn/open/docs/developer_guides/oauth_apps OAuth 授权码鉴权 https://www.coze.cn/open/docs/developer_guides/oauth_code 创建OAuth应…

2025年优化算法:龙卷风优化算法(Tornado optimizer with Coriolis force,TOC)

龙卷风优化算法&#xff08;Tornado optimizer with Coriolis force&#xff09;是发表在中科院二区期刊“ARTIFICIAL INTELLIGENCE REVIEW”&#xff08;IF&#xff1a;11.7&#xff09;的2025年智能优化算法 01.引言 当自然界的狂暴之力&#xff0c;化身数字世界的智慧引擎&…

面试题分享-多线程顺序打印奇偶数

目录 1.题目详情 2.解题思路 2.1.分析题目 2.2.解析思路 3.代码实现 4.运行结果 1.题目详情 昨天刷抖音&#xff0c;遇到一个面试题&#xff0c;描述如下&#xff1a; 请使用两个线程&#xff0c;分别顺序交替打印奇数和偶数&#xff0c;直到10为止。例如有两个线程&#…

QuecPython 网络协议之TCP/UDP协议最祥解析

概述 IP 地址与域名 IP 地址是网络中的主机地址&#xff0c;用于两台网络主机能够互相找到彼此&#xff0c;这也是网络通信能够成功进行的基础。IP 地址一般以点分十进制的字符串来表示&#xff0c;如192.168.1.1。 ​ 我们日常访问的网站&#xff0c;其所在的服务器主机都有…