zoukankan      html  css  js  c++  java
  • weex 通用样式以及需要注意的问题

    一、说明

    weex 对于 css 样式的支持是非常有限的,并且使用样式的时候,必须遵循 weex 定义的规则。

    对于不遵循 weex 样式规则的代码,往往在 web 页面上有效,而在 native 环境没有任何作用。

    weex 官方文档中,有专门的样式介绍:

    我最早只用 weex 的时候,想当然的觉得,反正会 vue,直接写就行了,但是后面发现,还是需要认真的去读官方的文档,很多注意事项,都是文档中有说明的。

    二、通用样式

    1、单位

    weex 中,单位必须使用 px,其他都不支持,而且通常窗口宽度为 750px,在不同的平台会进行相应的计算。

    比如在 web 中,会转换成 em

    因为 native 开发中,是必须定宽高的,所以和 web 开发中很多概念是不相同的。

    2、样式不会传递

    weex 中,native 环境的属性样式不会传递给子元素。

    比如在 <div> 中设置的 text-align:center;,无法作用到其 <text> 子元素,必须在 <text> 使用 text-align

     <div> 不能直接写文字内容,及 <text> 不能有子节点这种约束,需要详细的去了解官方文档的内置组件部分。

    3、盒模型

    盒模型默认是使用 box-sizing:border-box,盒模型中需要注意的很大部分是属性样式的简写是不支持的,必须要分开来写。

    盒模型更多注意内容可以看:http://weex.apache.org/cn/wiki/common-styles.html#zhu-yi

    内边距

    padding {length}:内边距,内容和边框之间的距离,默认值 0。与标准 CSS 类似,padding 支持简写,也可分解为以下四个:

    • padding {length}: 上、下、左、右四边内边距,默认值 0
    • padding-left {length}:左内边距,默认值 0
    • padding-right {length}:右内边距,默认值 0
    • padding-top {length}:上内边距,默认值 0
    • padding-bottom {length}:下内边距,默认值 0

    外边距

    margin {length}:外边距,元素和元素之间的空白距离,默认值 0。与标准 CSS 类似,margin 支持简写,也可分解为四边:

    • margin {length}: 上、下、左、右四边外边距,默认值 0
    • margin-left {length}:左外边距,默认值 0
    • margin-right {length}:右外边距,默认值 0
    • margin-top {length}:上外边距,默认值 0
    • margin-bottom {length}:下外边距,默认值 0

    边框

    不支持速写形式,例如:border: 1 solid #ff0000; 的组合写法

    border-style

    border-width设定边框样式,如果四个方向的边框样式不同,可分别设置:

    • border-style {string}
    • border-left-style {string}:可选值为 solid | dashed | dotted,默认值 solid
    • border-top-style {string}:可选值为 solid | dashed | dotted,默认值 solid
    • border-right-style {string}:可选值为 solid | dashed | dotted,默认值 solid
    • border-bottom-style {string}:可选值为 solid | dashed | dotted,默认值 solid

    支持的值如下:

    • solid:实线边框,默认值 solid
    • dashed:方形虚线边框
    • dotted:圆点虚线边框

    border-width

    border-width:设定边框宽度,非负值, 默认值 0,如果四个方向的边框宽度不同,可分别设置:

    • border-width {length}:非负值, 默认值 0
    • border-left-width {length}:非负值, 默认值 0
    • border-top-width {length}:非负值, 默认值 0
    • border-right-width {length}:非负值, 默认值 0
    • border-bottom-width {length}:非负值, 默认值 0

    border-color

    border-color:设定边框颜色,默认值 #000000,如果四个方向的边框颜色不同,可分别设置:

    • border-color {color}:默认值 #000000
    • border-left-color {color}:默认值 #000000
    • border-top-color {color}:默认值 #000000
    • border-right-color {color}:默认值 #000000
    • border-bottom-color {color}:默认值 #000000

    border-radius

    border-radius:设置边框的圆角,默认值 0,如果四个方向的圆角弧度不同,可分别设置:

    • border-radius {length}: 非负值, 默认值 0
    • border-bottom-left-radius {length}:非负值, 默认值 0
    • border-bottom-right-radius {length}:非负值, 默认值 0
    • border-top-left-radius {length}:非负值, 默认值 0
    • border-top-right-radius {length}:非负值, 默认值 0

    4、flexbox

    weex 默认的布局模型就是 flexbox,因此其组件本身就是 display:flex,不需要再次声明。

    weex 的 flexbox 模型的默认 flex-direction 是 column,如果你需要 row,则需要显示的说明。

    weex 中一切皆为 flexbox。

    一般来说,水平垂直居中,都可以直接使用 flexbox 去实现。

    而不是使用 position:absolute,因为不支持百分比的单位。(尝试写百分比来实现居中布局,会失效。)

    关于 flex 的使用,可以参照阮一峰的文章:

    5、定位

    weex 默认定位是 relative,不支持 static 的定位,支持 relativeabsolutefixed 和 sticky

    同样的,由于不支持百分比的单位,因此 topleftrightbottom 必须使用 px,默认都是 0

    一般来说我们会通过 z-index + position 来进行层级的设置,

    但是 weex (目前)不支持 z-index 设置层级关系,默认的越靠后的元素层级越高。

    Android 系统中,如果定出超出了边界, 则会直接隐藏,且(目前)不能设置 overflow:visible

    6、transform

    transform 属性目前比较特殊的一点是,translatetranslateYtranslateX 三个的值支持百分比。

    目前支持的 transform 声明格式:

    • translateX({<length/percentage>}):X 轴方向平移,支持长度单位或百分比。
    • translateY({<length/percentage>}):Y 轴方向平移,支持长度单位或百分比。
    • translate({<length/percentage>} {<length/percentage>}):X 轴和 Y 轴方向同时平移,translateX + translateY 简写。
    • scaleX(<number>):X 轴方向缩放,值为数值,表示缩放比例,不支持百分比。
    • scaleY(<number>):Y 轴方向缩放,值为数值,表示缩放比例,不支持百分比。
    • scale(<number>):X 轴和 Y 轴方向同时缩放,scaleX + scaleY 简写。
    • rotate(<angle/degree>):将元素围绕一个定点(由 transform-origin 属性指定)旋转而不变形的转换。指定的角度定义了旋转的量度。若角度为正,则顺时针方向旋转,否则逆时针方向旋转。
    • rotateX(<angle/degree>)0.14+:X 轴方向的旋转。
    • rotateY(<angle/degree>)0.14+:Y 轴方向的旋转。
    • rotateZ(<angle/degree>)0.26+:Z 轴方向的旋转。
    • perspective(<length>)0.16+:指定了观察者与 z=0 平面的距离,使具有三维位置变换的元素产生透视效果。z>0 的三维元素比正常大,而 z<0 时则比正常小,大小程度由该属性的值决定。Android 4.1及以上版本支持。详情可参考 MDN 介绍
    • transform-origin {length/percentage/关键字(top/left/right/bottom)}::设置一个元素变形的原点,仅支持 2D 坐标。

    7、transition

    过渡动画建议使用 animation.transition(el,{},callback) 以 js 函数的方式进行,更加的可控,能够达到需求

    transition 不支持简写形式,必须分开说明。

    • transition-property:允许过渡动画的属性名,不能使用 all

      • 支持的属性:
      • width
      • height
      • top
      • bottom
      • left
      • right
      • backgroundColor
      • opacity
      • transform
    • transition-duration:过渡动画的时间,默认值是0,单位是 毫秒
    • transition-delay:过渡动画的延迟时间,单位是毫秒或者秒,如 2s
    • tramsition-timing-function:过渡动画的速度曲线,默认是 ease

      • 目前支持的属性:
      • ease:逐渐变慢
      • ease-in:慢速开始,然后变快
      • ease-out:快速开始,然后变慢
      • linear:匀速变化
      • ease-in-out:慢速开始,然后变快,然后慢速结束
      • cubic-bezier(x1,y1,x2,y2):三阶拜赛尔曲线,参数在 0-1 之间

    8、伪类

    伪类只支持四种:activefocusdisabledenabled

    一般在 input/textarea 使用 focusdisabledenabled 比较多,因为只有这两种组件支持,而所有的组件是支持 active 伪类的。

    9、线性渐变

    weex 支持通过 background-color 进行线性渐变,但是只支持横向渐变,现在不支持径向渐变。

    使用示例:

    background-image: linear-gradient(to top,#a80077,#66ff00);

    weex 现在也只支持了两种颜色渐变,不支持更多的颜色渐变:

    • to right:从左向右渐变
      -to left:从右向左渐变
    • to bottom:从上到下渐变
    • to top:从下到上渐变
    • to bottom right:从左上角到右下角
    • to top left:从右下角到左上角

    同时 background-image 的优先级比 background-color 要高,如果同时存在,前者将覆盖后者。

    weex 不建议使用 background 的简写形式,background: #cccccc;这种在 native 上是不起作用的。

    10、box-shadow

    box-shadow 只支持 IOS,不推荐使用

    11、opacity

    opacity 默认支持,使用方式和原来使用方式一样,取值 0-1

    12、background-color

    支持的颜色包括:

    • RGB
    • RGBA
    • 十六进制(#ffffff)
    • 精简十六进制(#FFF)(个人不是很推荐)
    • 英文单词(个人不推荐)

    三、其他注意事项

    如果发现在 web 上样式能用,到了 native 上样式不能用,考虑过程可以如下:

    • 是否支持该样式
    • 书写形式是否正确,如不能简写
    • 是否落掉了标点符号(比如 transform(30% 30%) 拉掉了中间的 , 逗号)
  • 相关阅读:
    Ambari源代码分析之总览
    最简单的修改HashMap value值的方法
    机器学习 Hidden Markov Models 1
    OpenCV坐标系与操作像素的四种方法
    OpenCV2.4.13+VS2012开发环境配置
    OpenCV——PS滤镜算法之 Ellipsoid (凹陷)
    OpenCV——PS滤镜算法之 Ellipsoid (凸出)
    如何快糙好猛的使用Shiqi.Yu老师的公开人脸检测库(附源码)
    伊斯坦布尔的流浪 (三)
    伊斯坦布尔的流浪 (一)
  • 原文地址:https://www.cnblogs.com/Joe-and-Joan/p/11016333.html
Copyright © 2011-2022 走看看