当前位置: 首页 > news >正文

SAPUI5基础知识18 - 自定义CSS和主题色

1. 背景

在上一篇博客中,我们通过使用SAPUI5提供的CSS类实现元素间距的调整。在本篇博客中,让我们看一下如何实现自定义的CSS样式。

2. 背景知识

2.1 CSS基础语法

CSS,全称为级联样式表(Cascading Style Sheets),是一种用来描述HTML或XML(包括如SVG、XHTML等各类XML分支语言)文档样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

CSS(层叠样式表)的基础语法由选择器(selector)、属性(property)和属性值(value)组成。基本的语法格式如下:

selector {  property: value;  
}  

组成部分:

  • 选择器:用于指定要应用样式的HTML元素。可以是元素名、类名、ID或其他属性。
  • 属性:是你要设置的样式特征,比如字体、颜色、边距等。
  • 属性值:是你要赋给该属性的具体值。

示例:

/* 选择所有的 <h1> 元素,并设置颜色为蓝色 */  
h1 {  color: blue;  
}  /* 选择 class 为 "myClass" 的元素,并设置字体大小为 16px */  
.myClass {  font-size: 16px;  
}  /* 选择 id 为 "myId" 的元素,并设置背景颜色为灰色 */  
#myId {  background-color: gray;  
}  

示例解释:

  • 在第一个示例中,选择器h1表示所有的<h1>标签,样式是将其文本颜色设置为蓝色。

  • 第二个例子中,选择器 .myClass 选择所有包含 class="myClass" 的元素,设置其字体大小为 16px。

  • 第三个例子中,选择器 #myId 选择具有 id="myId" 的元素,设置其背景颜色为灰色。

CSS的这种结构,可以很方便地为不同的HTML元素应用样式。

2.2 常见的CSS选择器

在CSS中,选择器用于选择你想要样式化的HTML元素。以下是一些常见的CSS选择器类型及其示例:

  1. 元素选择器:选择HTML文档中的特定类型的元素。
p {color: red;
}

在这个例子中,所有的 <p> 元素都将被设置为红色。

  1. 类选择器:选择具有特定类属性的元素。它用于选择一个或多个具有特定类名的HTML元素,并对这些元素应用样式规则。类选择器以点(.)开头,后跟类名。

类选择器的主要优点是可以重复使用,这意味着你可以在多个HTML元素上使用同一个类,以应用相同的样式。此外,一个HTML元素也可以有多个类,这使得你可以组合多个样式。

.red-text {color: red;
}.large-text {font-size: 2em;
}
<p class="red-text">这段文字是红色的。</p>
<p class="large-text">这段文字的字体很大。</p>
<p class="red-text large-text">这段文字是红色的,而且字体很大。</p>

在这个例子中,.red-text.large-text 是CSS类。第一段 <p> 元素使用了 red-text 类,所以它的文字是红色的。第二段 <p> 元素使用了 large-text 类,所以它的文字字体很大。第三段 <p> 元素同时使用了这两个类,所以它的文字既是红色的,又很大。

  1. ID选择器:选择具有特定ID属性的元素。ID选择器以 # 开头。
#main-content {font-size: 1.5em;
}

在这个例子中,ID为 main-content 的元素字体大小将被设置为1.5em。

  1. 属性选择器:选择具有特定属性的元素。
input[type="text"] {width: 200px;
}

在这个例子中,所有类型为 text 的 <input> 元素宽度将被设置为200px。

  1. 伪类选择器:选择处于特定状态的元素,例如鼠标悬停状态。
a:hover {color: orange;
}

在这个例子中,鼠标悬停在 <a> 元素上时,元素的颜色将变为橙色。

  1. 伪元素选择器:选择元素的特定部分,例如元素的第一行。
p::first-line {font-weight: bold;
}

在这个例子中,所有 <p> 元素的第一行将被设置为粗体。

  1. 组合选择器:选择满足多个条件的元素。
div.highlight {background-color: yellow;
}

在这个例子中,所有 <div> 元素且类名为 highlight 的元素背景色将被设置为黄色。

  1. 后代选择器:选择特定元素的后代元素。
div p {color: blue;
}

在这个例子中,所有 <div> 元素内的 <p> 元素文本颜色将被设置为蓝色。

选择器可以单独使用,也可以组合使用,以选择满足多个条件的元素。

3. 练习

接下来,在前序练习的基础上,让我们通过自定义的CSS样式,来改变页面元素的格式。

3.1 创建自定义的css样式文件

首先,让我们创建一个css文件夹,用于包含css文件。然后,创建style.css文件,用于定义CSS样式。改动后的项目文件夹结构如下:
在这里插入图片描述

style.css文件代码如下:

html[dir="ltr"] .myAppDemoWT .myCustomButton.sapMBtn {margin-right: 0.125rem
}html[dir="rtl"] .myAppDemoWT .myCustomButton.sapMBtn {margin-left: 0.125rem
}.myAppDemoWT .myCustomText {display: inline-block;font-weight: bold;
}

这段CSS代码包含了三个样式规则,每个规则都使用了不同的选择器。通过自定义类和自定义命名空间类(.myAppDemoWT),可以确保样式只应用于我们应用程序中使用的控件上。

第一个样式规则:

html[dir="ltr"] .myAppDemoWT .myCustomButton.sapMBtn {margin-right: 0.125rem;
}

这个规则使用了属性选择器后代选择器的组合。

  • 它选择了HTML元素的 dir 属性值为 ltr(从左到右的文本方向),并且是 .myAppDemoWT 类的后代元素,且这个后代元素又是 .myCustomButton.sapMBtn 类的元素。对于这些元素,它设置了右边距(margin-right)为 0.125rem。

第二个样式规则:

html[dir="rtl"] .myAppDemoWT .myCustomButton.sapMBtn {margin-left: 0.125rem;
}

这个规则与第一个规则类似,但是它选择的是HTML元素的 dir 属性值为 rtl(从右到左的文本方向)的元素(比如阿拉伯语,当应用程序显示颠倒时,需要设置左外边距并重置右外边距。如果你只使用标准的SAPUI5控件,你不需要关心这个,在我们使用自定义CSS的情况下,你必须添加这个信息)。

对于这些元素,它设置了左边距(margin-left)为 0.125rem。

第三个样式规则:

.myAppDemoWT .myCustomText {display: inline-block;font-weight: bold;
}

这个规则使用了后代选择器。它选择了 .myAppDemoWT 类的后代元素,且这个后代元素是 .myCustomText 类的元素。对于这些元素,它设置了显示方式(display)为 inline-block,并且字体粗细(ont-weight)为粗体 bold

3.2 修改manifest.json

定义好css样式后,我们需要让SAPUI5框架在程序运行时,加载此资源。这可动作通过修改manifest.json完成。

sap.ui5命名空间的resources部分,可以加载应用程序的其他资源。可以通过指定CSS资源的相对路径,来加载CSS样式。

SAPUI5将会让该文件作为<link>标记添加到HTML页面的头部,就像普通的Web页面一样,这样浏览器就会自动加载它。

在这里插入图片描述
改动后的manifest.json文件如下:

{"_version": "1.58.0","sap.app": {"id": "zsapui5.test","i18n": "i18n/i18n.properties","title": "{{appTitle}}","description": "{{appDescription}}","type": "application","applicationVersion": {"version": "1.0.0"}},"sap.ui": {"technology": "UI5","deviceTypes": {"desktop": true,"tablet": true,"phone": true}},"sap.ui5": {"dependencies": {"minUI5Version": "1.108.0","libs": {"sap.ui.core": {},"sap.m": {}}},"models": {"i18n": {"type": "sap.ui.model.resource.ResourceModel","settings": {"bundleName": "zsapui5.test.i18n.i18n","supportedLocales": [""],"fallbackLocale": ""}}},"rootView": {"viewName": "zsapui5.test.view.App","type": "XML","id": "app"},"resources": {"css": [{"uri": "css/style.css"}]}}}

3.3 在App.view.xml中使用样式

接下来,让我们将样式应用到屏幕元素上。在App.view.xml文件中,修改<App>,<Button>,<FormattedText>控件的CSS样式类。

  • <App>控件上,指定自定义的CSS命名空间类myAppDemoWT。在CSS的定义中,使用它来定义具体的CSS选择器,通过在在<App>控件上指定myAppDemoWT,保证在myAppDemoWT类下面定义的具体的样式选择器,仅对这个应用程序有效。

  • <Button>控件添加自定义CSS类myCustomButton,用于定义按钮和输入框之间的间距。通过自定义的样式类,我们实现了面板内容布局的像素级控制。

  • 为了突出显示输出文本,我们使用了FormattedText控件,该控件可以使用自定义CSS或HTML代码单独设置样式。我们添加了自定义CSS类myCustomText,并添加了一个依赖于主题的CSS类来设置主题中定义的高亮颜色。

文本的实际颜色取决于所选择的主题,这确保了颜色总是与主题保持一致。有关可用CSS类名的完整列表,请参阅CSS Classes中的主题参数。

在这里插入图片描述
改动后的App.view.xml文件内容如下:

<mvc:ViewcontrollerName="zsapui5.test.controller.App"xmlns="sap.m"xmlns:mvc="sap.ui.core.mvc"displayBlock="true"
><!--在视图中想要使用的库的命名空间列表--><Shell><App class="myAppDemoWT"><pages><Page title="{i18n>homePageTitle}"><content><PanelheaderText="{i18n>helloPanelTitle}"class="sapUiResponsiveMargin"width="auto"><content><Buttontext="{i18n>showHelloButtonText}"press=".onShowHello"class="myCustomButton"/><Inputvalue="{/recipient/name}"valueLiveUpdate="true"width="60%"/><FormattedTexthtmlText="Hello {/recipient/name}"class="sapUiSmallMargin sapThemeHighligh-asColor myCustomText"/></content></Panel></content></Page></pages></App></Shell>
</mvc:View>

3.4 运行程序

运行改动后的程序,效果如下:

改动前:
在这里插入图片描述

改动后:
在这里插入图片描述
可以看到,我们通过自定义的CSS类,实现了对于Button控件和文本控件格式的调整。

注意,本文展示了使用自定义的CSS类来更改SAPUI5控件样式的可能性,但在正式开发中,更推荐使用SAPUI5标准的CSS类实现布局和样式的调整;在颜色调整方面,应使用与SAPUI5主题相关的颜色,不要使用自定义的颜色。

4. 小结

本文展示了如何使用自定义的CSS类来调整SAPUI5的展示样式,并通过一个实际的例子,展示了其用法。

相关文章:

SAPUI5基础知识18 - 自定义CSS和主题色

1. 背景 在上一篇博客中&#xff0c;我们通过使用SAPUI5提供的CSS类实现元素间距的调整。在本篇博客中&#xff0c;让我们看一下如何实现自定义的CSS样式。 2. 背景知识 2.1 CSS基础语法 CSS&#xff0c;全称为级联样式表&#xff08;Cascading Style Sheets&#xff09;&a…...

Postman中API测试的艺术:测试用例复用的高级技巧

Postman中API测试的艺术&#xff1a;测试用例复用的高级技巧 在API测试过程中&#xff0c;复用测试用例可以显著提高测试效率和一致性。Postman作为一个强大的API开发工具&#xff0c;提供了多种机制来实现测试用例的复用。本文将深入探讨Postman中API测试用例复用的技巧&…...

Flutter Geocoding插件使用指南:简化地理编码与逆地理编码

Flutter Geocoding插件使用指南&#xff1a;简化地理编码与逆地理编码 简介 geocoding 是一个Flutter插件&#xff0c;提供了简便的地理编码&#xff08;将地址转换为经纬度坐标&#xff09;和逆地理编码&#xff08;将经纬度坐标转换为地址&#xff09;功能。它利用了iOS和A…...

“手撕”全网最细的JDBC教程(安装导入使用)

目录 一、什么是JDBC 二、JDBC的安装 三、JDBC如何导入 四、怎么使用JDBC编写代码 一、什么是JDBC JDBC由Java提供给数据库的一组通用的API。 在平常的业务中&#xff0c;是比较少使用像cmd命令行来操作数据库的&#xff0c;更多的是操作代码&#xff08;Python&#xff…...

C++指针选择题带答案

1、有如下语句int a10,b20,*p1,*p2;p1&a;p2&b;如图1所示&#xff0c;若要实现图2所示的存储 结构&#xff0c;可选用的赋值语句是___________。 A)*p1*p2; B)p1p2; C&#xff09;p1*p2; D)*p1p2; 2、变量的指针&#xff0c;其含义是该…...

力扣 二分查找

二分查找基础篇。 题目 class Solution {public int searchInsert(int[] nums, int target) {int l 0, r nums.length - 1;while(l < r) {int mid l((r-l)>>1);//(lr)/2if(nums[mid]<target)lmid1;else rmid-1;}return l;//处理边界&#xff0c;设定数组的左半…...

ADMAS-Simulink联合仿真输入设置

使用Solidworks、ADAMS、Simulink进行机电联合仿真_adams-simulink-CSDN博客RecurDynSimulink联合仿真案例演示_哔哩哔哩_bilibili# C#调用已经使用Python训练好的神经网络做图片检测_c#调用python训练好的神经网络模型-CSDN博客...

【NOI】C++程序设计入门三

文章目录 前言一、大杂烩1.导入2.常量3.标识符4.关键字5.整型补充5.1 short&#xff1a;短整型5.2 long&#xff1a;长整型5.3 long long&#xff1a;长长整型 二、例题讲解问题&#xff1a;1597. 买文具问题&#xff1a;1596. 火柴棒三角形问题问题&#xff1a;1417. 买文具问…...

Three.js投射光线实现三维物体交互

<template><div id"webgl"></div> </template><script setup> import * as THREE from three //导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入 dat.gui import { GUI } from thre…...

SSRF学习笔记

1.NAT学习 Nat&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;是 一种网络通信技术主要用于将私有网络中的内部IP地址转换成公共网络中的公共IP地址&#xff0c;以实现局域网内部设备访问互联网的功能。具体来说&#xff0c;Nat有以下几个主要…...

Python——Pandas(第三讲)

文章目录 修改替换变量值对应数值的替换指定数值范围的替换 虚拟变量变换数值变量分段数据分组基于拆分进行筛选 分组汇总使用 agg 函数进行汇总引用自定义函数 长宽格式转换转换为最简格式长宽型格式的自由互转 多个数据源的合并数据的横向合并concat 命令 处理缺失值认识缺失…...

性能测试中qps 一直上不去的原因

QPS&#xff1a;Queries Per Second意思是“每秒查询率”&#xff0c;是一台服务器每秒能够相应的查询次数&#xff0c;是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。 在性能测试中&#xff0c;QPS&#xff08;每秒查询率&#xff09;一直上不去可能由以下…...

学习笔记14:CNAME 记录值、TTL (Time to Live)、Redis 的 Pool 对象池、钩子函数、依赖注入

CNAME 记录值 CNAME 记录是一种DNS记录类型&#xff0c;它将一个域名映射到另一个域名。这通常用于将一个子域名指向另一个域名&#xff0c;或者将一个域名指向一个不同的顶级域。 用途&#xff1a;用于域名别名&#xff0c;负载均衡&#xff0c;或者在更换域名时保持服务的连…...

springboot集成mybatis时,dao层的mapper类需要添加@Repository注解吗?

在Spring Boot项目中&#xff0c;当你使用MyBatis作为ORM框架时&#xff0c;关于DAO层的Mapper类是否需要添加Repository注解&#xff0c;这主要取决于你的项目需求和配置。 Repository注解的作用Repository注解是Spring框架中用于声明持久层&#xff08;DAO层&#xff09;的组…...

一文总结代理:代理模式、代理服务器

概述 代理在计算机编程领域&#xff0c;是一个很通用的概念&#xff0c;包括&#xff1a;代理设计模式&#xff0c;代理服务器等。 代理类持有具体实现类的实例&#xff0c;将在代理类上的操作转化为实例上方法的调用。为某个对象提供一个代理&#xff0c;以控制对这个对象的…...

探索 Kubernetes 持久化存储之 Longhorn 初窥门径

作者&#xff1a;运维有术星主 在 Kubernetes 生态系统中&#xff0c;持久化存储扮演着至关重要的角色&#xff0c;它是支撑业务应用稳定运行的基石。对于那些选择自建 Kubernetes 集群的运维架构师而言&#xff0c;选择合适的后端持久化存储解决方案是一项至关重要的选型决策。…...

全国区块链职业技能大赛样题第9套智能合约+数据库表设计

后端源码地址:https://blog.csdn.net/Qhx20040819/article/details/140746050 前端源码地址:https://blog.csdn.net/Qhx20040819/article/details/140746216 智能合约+数据库表设计:https://blog.csdn.net/Qhx20040819/article/details/140746646 nice.sql /* Navicat MySQ…...

常见OVS网桥及其链接接口详解

目录 引言OVS简介常见OVS网桥 QBR&#xff08;qbr&#xff09;PLY网桥br-intbr-tunbr-routerbrcps常见网桥链接接口 QVOQVIQVMPatch网桥和接口的工作原理应用场景 虚拟化环境数据中心网络云计算平台 1. 引言 开放虚拟交换机&#xff08;Open vSwitch&#xff0c;简称OVS&…...

创建最最最纯净 Windows 11/10 系统镜像!| 全网独一份

前期准备工作 1.配置系统应答文件&#xff1a;【点击前往】 2.系统镜像编辑器&#xff1a; 【点击下载】 3.Windows 系统镜像官方下载&#xff1a; 【Windows 11】、【Windows 10】【官方密钥】 4.翻译工具 【GitHub】 5.详细的设置教程 5.1先打开配置系统应答文件&#…...

带你学会Git必会操作

文章目录 带你学会Git必会操作1Git的安装2.Git基本操作2.1本地仓库的创建2.2配置本地仓库 3.认识一些Git的基本概念3.1操作流程&#xff1a; 4.一些使用场景4.1添加文件场景一4.2查看git文件4.3修改文件4.4Git版本回退4.5git撤销修改 5.分支管理5.1查看分支5.2创建本地分支5.3切…...

基于I2C总线与ATtiny85的RGB LCD时钟:在5个GPIO上实现多设备驱动

1. 项目概述&#xff1a;当微型控制器遇上彩色显示屏几年前&#xff0c;我在为一个智能花盆项目寻找显示方案时遇到了一个经典难题&#xff1a;手头的Adafruit Trinket&#xff08;基于ATtiny85&#xff09;只有5个可用GPIO&#xff0c;而一个能显示温湿度、时间的16x2字符LCD屏…...

晶晨T972嵌入式主板开发指南:从硬件选型到量产部署

1. 项目概述&#xff1a;一颗“芯”引发的性价比革命 最近在嵌入式开发圈和智能硬件圈里&#xff0c;一个消息传得挺火&#xff1a;亮钻推出了一款基于晶晨T972平台的高性价比主板。对于很多正在寻找稳定、高性能且成本可控的解决方案的开发者、产品经理和创客来说&#xff0c;…...

TalkingHeads开源项目:基于扩散模型的AI人脸说话视频生成技术详解

1. 项目概述&#xff1a;当AI学会“眉目传情” 最近在折腾一个挺有意思的开源项目&#xff0c;叫TalkingHeads。简单来说&#xff0c;它能让一张静态的人脸照片“活”过来&#xff0c;不仅能根据你输入的音频或文本生成口型同步的说话视频&#xff0c;还能让视频里的人做出各种…...

淘宝淘金币自动化脚本:解放双手的智能任务助手技术解析

淘宝淘金币自动化脚本&#xff1a;解放双手的智能任务助手技术解析 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本&#xff0c;包含蚂蚁森林收取能量&#xff0c;芭芭农场全任务&#xff0c;解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi 淘宝…...

YOLOv7训练VisDrone数据集避坑指南:标签转换、类别映射与路径配置详解

YOLOv7实战&#xff1a;VisDrone数据集训练全流程精解与疑难排查 1. 理解VisDrone数据集特性与YOLO格式差异 VisDrone作为无人机视角下的目标检测基准数据集&#xff0c;其标注格式与YOLOv7的预期输入存在本质区别。原始标注文件&#xff08;annotations/*.txt&#xff09;采用…...

Linux蓝牙SPP连接保姆级教程:从手机App到开发板双向通信实战(Android/iOS)

Linux蓝牙SPP连接实战&#xff1a;手机与开发板双向通信全指南 当智能家居控制面板需要无线接收手机指令&#xff0c;或是工业传感器数据要通过移动设备实时查看时&#xff0c;蓝牙串口协议(SPP)便成为最便捷的桥梁。不同于常见的蓝牙音频传输&#xff0c;SPP提供了稳定的数据通…...

如何在Windows上快速配置词法语法分析器:WinFlexBison完整实战指南

如何在Windows上快速配置词法语法分析器&#xff1a;WinFlexBison完整实战指南 【免费下载链接】winflexbison Main winflexbision repository 项目地址: https://gitcode.com/gh_mirrors/wi/winflexbison 你是否在Windows平台上开发编译器、解释器或配置文件解析器时&a…...

Contextcore:轻量高性能的框架无关状态管理核心

1. 项目概述&#xff1a;一个为现代前端应用量身定制的状态管理核心 如果你正在开发一个中大型的React、Vue或任何现代前端应用&#xff0c;并且对现有状态管理库的复杂性、样板代码量或者性能优化感到头疼&#xff0c;那么 lucifer-ux/Contextcore 这个项目很可能就是你一直…...

企业内如何构建基于Taotoken的标准化AI能力中台

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业内如何构建基于Taotoken的标准化AI能力中台 随着大模型技术在企业内部的应用日益广泛&#xff0c;如何高效、安全、可控地管理…...

从零到一:基于STM32CubeMX与FSMC高效点亮TFT LCD屏的实战指南

1. 硬件准备与环境搭建 第一次接触STM32和TFT LCD屏时&#xff0c;我完全被各种接线和术语搞晕了。后来才发现&#xff0c;只要选对硬件组合&#xff0c;事情就成功了一半。我用的STM32F103ZET6开发板&#xff08;俗称大容量版&#xff09;和正点原子2.8寸LCD屏&#xff0c;这套…...