Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

快应用 - 样式采坑指南 #3

Open
Real102 opened this issue Mar 17, 2023 · 0 comments
Open

快应用 - 样式采坑指南 #3

Real102 opened this issue Mar 17, 2023 · 0 comments

Comments

@Real102
Copy link
Owner

Real102 commented Mar 17, 2023

快应用 - 样式采坑指南

前言

本以为快应用样式这一块会跟普通 H5 开发一样,没想到遇到的问题还蛮多的,而且还有些挺常用的属性、使用方式等都没有支持,有点难搞。

以下稍微整理了些需要注意的地方,开发需谨慎,沉住气,不然挺废键盘的 🤣

样式 css

盒模型 box-sizing

快应用只支持 border-box, 也就是 IE 盒模型,开发时不需要设置也不需要改动也不能改动

阴影 box-shadow

不支持 box-shadowtext-shadow 等阴影属性。请看:快应用论坛

目前只有 canvas 支持 shadow 属性,文档地址:官方文档

暂时就不要考虑使用阴影属性了,官方也没有给出什么时间支持。替代方案可以考虑一下用背景图,不过这么一来的话,容器 div 的宽高就比较难搞了,挺麻烦的

/* 不支持 */
.unSupport {
  box-shadow: 0 0 0 #ccc;
}

背景 background

H5 上,我们一般习惯合并写 background 属性,一方面可以减少代码量,另一方面也可以让代码看起来更简洁一些。

但在快应用,background 是不支持合并写法的,只能拆分开来一个一个写,比如写一个背景图样式,如下:

(又多了几行代码,工资 up up up 🤣 )

.unSupport {
  /* 异常 */
  background: #fff; /* 编辑器异常:属性`background` 的值 `#fff` 存在问题: 背景类型 `#fff`暂不支持 */
  background: url("../../../assets/img/test.png") no-repeat;
  /* 以下正常写法 */
  background-color: #fff;
  background-image: url("../../../assets/img/test.png");
  background-repeat: no-repeat;
  background-position: center;
  background-size: cover;
}

圆角 border-radius

常规设置圆角值如:border-radius: 8px 没什么问题,但如果想要设置四个边角不同的圆角值时,并且使用常规的合并写法时,编辑器会报错,但实际上真机预览却可以正常显示

.unSupport {
  /* 编辑器报异常,但真机可以预览 */
  border-radius: 8px 8px 0 0; /* 属性 `border-radius` 不支持单位 `px 8px 0 0`, 目前仅支持 `["px","%","dp"]*/
  /* 正常 */
  border-radius: 8px;
  /* 正常 */
  border-top-left-radius: 8px;
  border-top-right-radius: 8px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}

如果有使用 css 预处理器 scss,可以考虑封装为 mixin (看不得编辑器报错强迫症首选),方便快捷~

@mixin borderRadius($tl, $tr, $br, $bl) {
  border-top-left-radius: $tl;
  border-top-right-radius: $tr;
  border-bottom-right-radius: $br;
  border-bottom-left-radius: $bl;
}

文本超出隐藏 text-overflow

一般我们实现文本超出隐藏都会用到 white-space 这个属性,但在快应用中没有这个属性,而是用另外一个属性代替,相对来说,快应用的使用会更简单方便一些

示例如下:

/* before */
.textOverflow {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* after */
.textOverFlow {
  text-overflow: ellipsis;
  lines: 1;
}

注意,text-overflow 在快应用中只有两个值:ellipsisclip 并且仅用于 text 标签

行间距与字间距 letter-spacing & word-spacing

word-spacing 用于调整单词之间的间距(空格隔开就会被影响到)在快应用中暂不支持;

letter-spacing 用于调整文本字符之间的间距,在编辑器上会提示报错,但在真机预览上可以正常使用

.unSupport {
  /* 编辑器报错,但真机正常使用 */
  letter-spacing: 10px;
  /* 编辑器报错,真机也不能正常使用 */
  word-spacing: 10px;
}

css 子类/伪类选择器

快应用选择器已经不支持子孙类选择器(直接子类还是支持的)以及伪类选择器

遇到那种 list 每一项都有 border,最后一项需要干掉 border 的时候比较蛋疼

.unSupport {
  &:first-child,
  &:nth-child(2),
  &:nth-of-type() {
  }
  &:before,
  &:after {
  }
}

缩进 text-indent

测试发现,目前快应用仅 text 标签支持 text-indent 属性,在 divinput 上使用 text-indent 时编辑器会报异常,同时真机上也显示异常

.unSupport {
  /* 编辑器报异常,真机预览无效 */
  div {
    text-indent: 10px;
  }
  /* 正常 */
  text {
    text-indent: 10px;
  }
}

布局类型 display

目前快应用仅支持 display: flex | none 且默认是以 flex 方式布局。

为了方便使用,可以考虑封装为 mixin,避免每次 flex 布局都需要写横向、纵向排列方式

@mixin flexBox($column, $justify, $align) {
  display: flex;
  flex-direction: $column;
  justify-content: $justify;
  align-items: $align;
}

.flexChild {
  flex-shink: 0;
  flex-grow: 0;
  flex-basis: 1;
}

动画 animation & transition

动画属性跟 css3 的使用方式基本相同,但需要有一些需要注意的点,快应用中动画支持的 css 属性有些不同,具体如下:

animation 支持的 @keyframes 属性有:

  • background-color
  • background-position
  • opacity
  • width/height
  • transform

transition 支持的属性有:

  • width
  • height
  • opacity
  • visibility
  • color -- 暂不支持
  • transform-origin
  • transform
  • padding
  • padding-[left|top|right|bottom]
  • margin
  • margin-[left|top|right|bottom]
  • border 暂不支持
  • border-[left|top|right|bottom] -- 暂不支持
  • border-width
  • border-[left|top|right|bottom]-width
  • border-color
  • border-[left|top|right|bottom]-color
  • border-radius -- 暂不支持
  • border-[top|bottom]-[left|right]-radius -- 暂不支持
  • background 仅支持属性 background-color,background-position
  • background-color
  • background-size -- 暂不支持
  • background-position
  • flex
  • flex-grow
  • flex-shrink
  • flex-basis
  • [left|top|right|bottom]

animation 允许使用的属性有:
transition 允许使用的属性有:

其他

全局引入样式文件

很蛋疼,样式文件居然无法全局引入...

快应用不像 vue 有一个统一的程序入口,且父组件的样式影响不到子组件的样式,也没有深度选择器 deep,也不能直接在 app.ux 上写全局样式,写了也不生效

目前好像就只能在每一个文件 import 诸如 vars.scsscommon.scss 等这些全局文件

写在最后

以上是自己在快应用开发过程中遇到的样式相关的问题

如果有新的内容,会继续更新在本文档,欢迎关注

如果对以上内容有问题,欢迎指教

我是枸哥,可以叫我杞爷

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant