HTMLayout 界面贴图技术

概述


在HTMLayout中支持在CSS中使用background属性指定背景图片, 并扩展支持更多的功能, 例如九宫格切片贴图.

另外, HTMLayout 还可以在CSS中使用foreground属性指定前景图片. 前景图片的所有属性用法与背景图片完全一样, 背景贴图支持的功能, 前景贴图同样支持, 唯一要做的就是将background里的"back"替换为"fore"即可, 因为他们用到的语法完全一样, 所以在本文中使用星号泛指背景或前景图片, 例如 *****ground 在本文中泛指 background或foreground.

可以同时指定背景图片与前景图片, 这对于需要大量实现交互效果的软件UI设计非常重要. 例如对于一个按钮, 他可能有一个前景图标是不会变化的, 而他的背景可能需要根据用户的鼠标活动产生动态变化. 例如鼠标放到按钮上,离开按钮,按钮按下等等。

HTMLayout他的优势在于,针对性的对于软件界面的实现提供了很多方便的CSS扩展. 而且他的交互响应速度非常快, 占用的资源也很少.

CSS标准中的背景属性


首先我们简单回顾一下CSS标准语法中与背景图片有关的一些属性:

Properties 属性

CSS Version 版本

Inherit From Parent 继承性

Description 简介

background

CSS1

复合属性。设置或检索对象的背景特性

background-color

CSS1

设置或检索对象的背景颜色

background-image

CSS1/CSS3

设置或检索对象的背景图像

background-repeat

CSS1/CSS3

设置或检索对象的背景图像如何铺排填充

background-attachment

CSS1/CSS3

设置或检索对象的背景图像是随对象内容滚动还是固定的

background-position

CSS1

设置或检索对象的背景图像位置

background-origin

CSS3

设置或检索对象的背景图像显示的原点

background-clip

CSS3

检索或设置对象的背景向外裁剪的区域

background-size

CSS3

检索或设置对象的背景图像的尺寸大小

Multiple background

CSS3

检索或设置对象的多重背景图像

1、 background  语法: background:[ background-color ] || [ background-image ] || [ background-repeat ] || [ background-attachment ] || [ background-position ] 上面的所有值都是可选值, 有多个值用空格分开. background  是一个复合属性, 也就是说可以将其他的背景属性写在这个属性里, 而不是分开写. 2、 background-position 语法: background-position:<bg-position> [ , <bg-position> ]* <bg-position> = [ <percentage> | <length> | left | center① | right ] [ <percentage> | <length> | top | center② | bottom ]? 设置或检索对象的背景图像位置。必须先指定background-image属性。 该属性提供2个参数值。 如果提供两个,第一个用于横坐标,第二个用于纵坐标。 如果只提供一个,该值将用于横坐标;纵坐标将默认为50. 这里大家需要重点注意一下, 这里所指的坐标, 指的是图片左上角相对于节点左上角的左标. 例如:  background-position 50px 50px; 这可不是指从图片本身的坐标 50x50 开始绘制图片, 而是指将图片向右移动50像素, 向下移动50像素, 这里指的坐标是节点容器的坐标系. 而不是图片上的坐标. 默认值:0% 0%,效果等同于left top 取值: <percentage>: 用百分比指定背景图像填充的位置。可以为负值。 <length>: 用长度值指定背景图像填充的位置。可以为负值。 left: 背景图像在横向上填充从左边开始。 center①: 背景图像在横向上填充从中间开始。 right: 背景图像在横向上填充从右边开始。 top: 背景图像在纵向上填充从顶部开始。 center②: 背景图像在纵向上填充从中间开始。 bottom: 背景图像在纵向上填充从底部开始。

HTMLayout CSS 贴图属性


前景图片一般位于背景图片前面,即使不是同一个节点对象, 例如 div对象#A包含div节点#B,那么#A的前景图片在#B的背景图片前面( 但是#A的背景图片仍然在 #B的背景图片后面 )。

本文使用  *****ground 在本文中泛指 background或foreground. 下文中提到的padding box,border box,请参考贴子: 了解CSS盒模型 http://www.aau.cn/thread-7398-1-1.html

在HTMLayout 中 可以使用 ****ground-repeat指定图片的呈现规则, 可选值如下:

1、 ****ground-repeat: no-repeat

在这种模式下不进行任何缩放处理, 不会重复铺排背景. 并且可以配合以下 ****ground-position 属性设置绘图坐标:

****ground-position-left: 左侧坐标; 指的是图片左上角相对于节点padding box(就是节点包含padding的空间)左侧的偏移值, 这个值如果为正数,表示图片左上角向右移动, 如果为负数,图片向左移动.

****ground-position-top: 顶部坐标;

指的是图片左上角相对于节点 padding box(就是节点包含padding的空间)顶部的偏移值, 这个值如果为正数,表示图片左上角向下移动, 如果为负数,图片向上移动..

****ground-position-right:

指的是图片右下角相对于节点padding box(就是节点包含padding的空间)右侧的偏移值, 这个值如果为正数,表示图片右下角向左移动, 如果为负数,图片向右移动. 如果同时指定了 ****ground-position-left, 那么 ****ground-position-left被忽略

****ground-position-bottom:底部坐标;

指的是图片右下角相对于节点padding box(就是节点包含padding的空间)底部的偏移值, 这个值如果为正数,表示图片右下角向上移动, 如果为负数,图片向下移动. 如果同时指定了 ****ground-position-top, 那么 ****ground-position-top 被忽略

background-position: 横坐标 纵坐标;

等于同时指定下面的属性: ****ground-position-bottom: 左侧坐标; ****ground-position-bottom: 顶部坐标;

2、 ****ground-repeat: repeat

图像重复铺排,填满节点内部空间(包含边框), 可以配合下面的属性使用: ****ground-attachment: 可选值为 scroll 或 fixed; 设置背景图片是否跟随滚动条滚动,设为 fixed则固定背景图片不滚动。 ****ground-position-left: ****ground-position-top: ****ground-position-right: ****ground-position-bottom: 定义图片初始编移位置, 用法参考 no-repeat

3、 ****ground-repeat: repeat-x

图片横向重复铺排, 可以配合下面的属性使用: ****ground-position-right  或 ****ground-position-left 定义开始铺排的横坐标,这两个属性不能同时使用, 如果指定 ****ground-position-left  为一个正数则图片向右移动指定的距离然后开始向下铺排, 如果指定了  ****ground-position-right 并且是一个正数, 则图片向左移动指定的距离, 也就是说页面右侧有指定大小的空间没有背景图片 ****ground-position-top 或 ****ground-position-bottom 定义图片的顶部偏移,这两个属性不能同时使用

4、 ****ground-repeat: repeat-y

图片垂直重复铺排. 可以配合下面的属性使用 ****ground-position-left: 或 ****ground-position-right 定义图片水平偏移,这两个属性不能同时使用 ****ground-position-top or ****ground-position-bottom 定义开始铺排的纵坐标,这两个属性不能同时使用 如果指定了  ****ground-position-bottom 并且是一个正数, 则图片向上移动指定的距离, 也就是说页面底侧有指定大小的空间没有背景图片

5、 ****ground-repeat: expand

九宫格切图模式,

九宫格切图模式 可以配合以下属性指定切片坐标, 使图片分为九个分区: ****ground-position-left: 左侧块切片位置 ****ground-position-top: 指定顶部切片位置 ****ground-position-right: 指定右侧切片位置 ****ground-position-bottom: 指定底部切片位置 ****ground-position: 按上,右,下,左的顺序同时指定所有切片位置 . 示例: background-position: 6px 6px 6px 6px; foreground-position: 6px 6px 6px 6px; 请参考下图中的源图片,图片大小为90个像素,指定下面的CSS进行九宫格切图. background-position: 30px 30px 30px 30px;

切图后图片如上图分为九个部份, 其中四个角落的图片保持原状态放置到节点内部空间( 包含padding指定的内边距  ) 四个角上, 四角切片不进行任何拉伸或重复铺排. . 而其他位于中间部位的图片(顶部中间,底部中间,左侧中间,右侧中间,正中间), 默认都进行重复平铺绘图. 如果需要对这些位于中间部位的图片进行拉伸处理, 可以使用CSS中的 ****ground-stretch 指定拉伸方式. ****ground-stretch 可用的参数有: o   stretch-left 拉伸左中切块 o   stretch-middle   拉伸正中切块 o   stretch-right  拉伸右中切块 o   stretch-top 拉伸上中切块 o   stretch-bottom  拉伸下中切块 这些参数也可以追加在 ****ground-repeat 后面, 例如: ****ground-repeat:expand stretch-bottom;

6、 ****ground-repeat: stretch

图片以拉伸模式显示,即自动适应节点内部空间大小, 这里指定内部空间也是包含padding内边距的空间( padding box ) 可以配合以下CSS属性使用: ****ground-position-left: 左边距;

指定图片左侧边距, 也就是节点左侧指定的大小不显示图片. ****ground-position-top: 顶边距; 指定图片顶部边距, 也就是节点顶部指定的大小不显示图片. ****ground-position-right: 右边距; 指定图片右侧边距, 也就是节点右侧指定的大小不显示图片. ****ground-position-bottom: 底边距; 指定图片底部边距, 也就是节点底部指定的大小不显示图片.

图像变换效果


HTMLayout支持对前景和背景图像的多种变换效果. 目前可用的变换效果有如下几种:

o    ****ground-image-transformation: opacity(0.5)

设置图像透明度,参数为大于0小于1的小数.1.0 为不透明,0.0 为完全透明o    ****ground-image-transformation: flip-x() 图像左右翻转

o   ****ground-image-transformation: flip-y()

图像上下翻转

o   ****ground-image-transformation: colorize(#FFCC00)

颜色滤镜效果,常用于实现按钮图标的禁用状态

o   ****ground-image-transformation: contrast-brightness-gamma(对比度 = 0.0 .. 1.0, 亮度 = 0.0 .. 1.0, gamma值 )

对比度,亮度,gamma值调整. 对比度和亮度的中间值为 0.5. 可用于鼠标悬停死的按钮图标变化.

o   ****ground-image-transformation: color-schema(red,yellow,blue)

将图像的灰度色部分按给出的颜色(可以有多个)进行插值变换.

下面是在CSS是应用的范例:

  1. img:hover {
  2.    foreground-image-transformation: contrast-brightness-gamma(0.5,0.5,1.2);
  3. }

实战 HTMLayout 贴图 - AAuto完整范例

import win.ui; /*DSG{{*/ winform = ..win.form( right=717;bottom=365;parent=...;text="HTMLayout 贴图演示";border="resizable" ) winform.add( editStyle={ dr=1;vscroll=1;bottom=321;right=708;left=363;multiline=1;top=5;dt=1;z=2;db=1;hscroll=1;edge=1;cls="edit" }; btnApply={ dr=1;bottom=359;text="修改CSS试试";left=502;top=328;z=3;db=1;right=640;cls="button" }; layoutWindow={ dr=1;dl=1;bottom=352;right=358;left=6;dt=1;top=6;z=1;db=1;notify=1;multiline=1;cls="edit" } ) /*}}*/

import web.layout; wbLayout = web.layout(winform.layoutWindow);

wbLayout.html =/*** <div id="imgBox" >  </div>

<div id="tip">鼠标移到图片上看看效果,最大化窗口看看效果</div> ***/

css = /** body{ margin:0px; //设置body节点边距为零 }

//下面的CSS将说明文字绝对定位到页面右下角 div#tip{ font:system; right:5px; bottom:5px; position:absolute; }

//ID为"imgBox"的节点,当鼠标悬停在节点上转换为hover状态时的样式 #imgBox:hover { background-image-transformation:colorize(#CC7000); foreground-image-transformation:contrast-brightness-gamma(0.5, 0.3, 1.2 ); }

//ID为"imgBox"的节点样式 #imgBox{ width:100%%;//两个百分号表示在可以使用的空间里占用的百分比 height:300px;

background-repeat:expand stretch-bottom;//切片贴图模式,并拉伸底部中间的切片 background-position:30px 30px 30px 30px;//设置切片

foreground-repeat:no-repeat; foreground-position:60px 90px; foreground-image:url( http://www.aau.cn/static/image/common/logo.png );

background-image:url(data:image/jpeg;base64, /9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAvAAD/ 4QMraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49 Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRh IHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29y ZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAg ICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8w Mi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0 PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0v IiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBl L1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hh cC8xLjAvIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI3Mjc3MDVFQjE1MjEx RTE5NTRGODEyOEE0RDMzQkYzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI3 Mjc3MDVEQjE1MjExRTE5NTRGODEyOEE0RDMzQkYzIiB4bXA6Q3JlYXRvclRvb2w9 IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRG cm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODI4MzE0RTVCMTQ2MTFFMTkz Q0JDQzNCNTAwMDRCNkEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ODI4MzE0 RTZCMTQ2MTFFMTkzQ0JDQzNCNTAwMDRCNkEiLz4gPC9yZGY6RGVzY3JpcHRpb24+ IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAO QWRvYmUAZMAAAAAB/9sAhAAJBgYGBwYJBwcJDQkHCQ0PCwkJCw8SDg4PDg4SEQ4P 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 9G7pOym9Ubju0v/Z); } **/

wbLayout.css = css; winform.editStyle.text = css;

winform.btnApply.oncommand = function(id,event){ wbLayout.css  = winform.editStyle.text; wbLayout.updateWindow() }

winform.show() win.loopMessage();

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GIS讲堂

Arcgis for JavaSctipt之常用Layer详解

概述:Arcgis for Javasctipt中常见的layer有动态图层(ArcGISDynamicMapServiceLayer

18850
来自专栏IMWeb前端团队

网格系统 CSS Grid Layout

听闻w3cplus大漠在第三届CSS Conf上的演讲主题是CSS Grid Layout,吓得我赶紧抛下红尘俗事闭门谢客苦心钻研,唯恐脚步太慢,遥望大漠一骑绝...

22380
来自专栏Keegan小钢

Android样式的开发:shape篇

一个应用,应该保持一套统一的样式,包括Button、EditText、ProgressBar、Toast、Checkbox等各种控件的样式,还包括控件间隔、文字...

20720
来自专栏前端知识分享

第103天:CSS3中Flex布局(伸缩布局)详解

Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。

9910
来自专栏前端杂货铺

CSS3实现圆形进度条

介绍   闲来无事,去了CSS3Plus网站逛了逛,发现了一个很有意思的实现--css3实现进度条。粗略看了下代码,发现原理其实很简单,不难理解。 现在在此讲述...

71180
来自专栏WebDeveloper

如何让超出块级元素的内容使用省略号代替?

13260
来自专栏老马寒门IT

Html5 学习系列(五)Canvas绘图API快速入门(2)

Canvas绘图API Demos 上一篇文章中,笔者已经给大家演示了怎么快速用Canvas的API绘制一个矩形出来。接下里我会在本文中给各位介绍Canvas的...

28080
来自专栏CodingBlock

Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解

上篇文章介绍了自定义View的创建流程,从宏观上给出了一个自定义View的创建步骤,本篇是上一篇文章的延续,介绍了自定义View中两个必不可少的工具Canvas...

439120
来自专栏前端知识分享

第100天:CSS3中animation动画详解

CSS3属性中有关于制作动画的三个属性:Transform,Transition,Animation;

21820
来自专栏cnblogs

深入理解和应用display属性(二)

四、inline-block 此类元素是inline + block的合体 1) margin和padding都有效;width和height都有效; .inl...

22060

扫码关注云+社区

领取腾讯云代金券