- From: Kang-Hao (Kenny) Lu <kanghaol@oupeng.com>
- Date: Sat, 26 Oct 2013 03:39:53 +0800
- To: John Hax <johnhax@gmail.com>
- CC: 一丝 <yiorsi@gmail.com>, Leo Deng <myst.dg@gmail.com>, W3C HTML5 中文興趣小組 <public-html-ig-zh@w3.org>
(2013/10/25 21:52), John Hax wrote: > 注意1和2的差别是:方案1的img.src永远override > @srcset和@src,所以不存在优先级问题;方案2的src和srcset属性是和@src和 > @srcset对应的,就产生了优先级、顺序之类的问题。 这个地方逻辑复杂,为了避免沟通有误,再说明一次。首先,DOM 属性的值跟读取 或写入本来就可以是非常不一样的逻辑,再怎么说,DOM 属性就是一个 setter/getter(以 WebIDL 来说)[1],另外,HTML 规范中也非常多 “在获取 时……(on getting...)”、“在设置时……(on setting...)”的分隔,完全可以分 开讨论。所以,这里为了简化讨论,先讨论 setter。在我本来的 1)、2)、3) 的 分类中 >>> 2013/10/24 Kang-Hao (Kenny) Lu <kanghaol@oupeng.com> >>>> 1) image.src 设值总是更新图片,.src 永远返回当时真正显示图片。 >>>> 2) image.src 设值总是更新图片,.src 返回 @src。 >>>> 3) image.src 设值只更动 @src,.src 返回 @src。 1) 跟 2) 的描述在前面(也就时应该是 getter 的部分)的部分是一样的,所 以,在我本来的分类中,1) 跟 2) 的 setter 就是我后来 (2013/10/25 23:39), Kang-Hao (Kenny) Lu wrote: > 1) image.src 设值总是更新图片,完全不管 .srcset 的设值存在与否,也不 > 管 @src、@srcset 是什么。 > 2) image.src 设值在后面没有 .srcset 设值的情况总是更新图片,不管 > @src、@srcset 是什么。 > 3) image.src 设值只更动 @src。 里的 2)。前面那个 “总是更新图片” 当然是写得很模糊,所以这个好一点。你感 觉是喜欢 1),所以我上一封信主要讲的是 1) 的问题。其实还有一个 4) image.src 设值只在前面、后面都没有 .srcset 的时候会更新图片,否则 .srcset 盖过 .src。 每一个都有坑: 1) 的坑是 HTML <img src=xxx srcset=xxx /> + 不支持 srcset 的 JS 库 1 设置了 .src + 支持 srcset 的 JS 库 2 设置了 .srcset 的状况下 JS 库 2 会不起作用。 2) 的坑是 .src 与 .srcset 设值不可交换,后者获胜(所以必须先设置 .src 再 设置 .srcset,否则不能设置 2x 的图像)。 3) 的坑是 HTML <img src=xxx srcset=xxx /> + 不支持 srcset 的 JS 库 1 设置了 .src 的状况下 JS 库 1 不起作用。 4) 的坑是 HTML 里有 <img src=xxx srcset=xxx /> + 支持 srcset 的 JS 库 1 设置了 .srcset + 不支持 srcset 的 JS 库 2 设置了 .src 的状况下 JS 库 2 会不起作用。基本上也就是 1) 的颠倒。 我们应该都同意 3) 的坑是最大的,1)、2)、4) 要怎么排是个问题,毕竟同时用 两个会设置 src/srcset 的库应该还是很稀有的。因为 @srcset 是压过 @src 的,所以我认为 .srcset 不压过 .src 奇怪了点,所以觉得 4 好过 1。总结就是 2 > 4 > 1 > 3 (喜好排名,不是坑大小排名) 。 再换一个或许好一点的比喻。考虑 img.src = "image.png"; img.srcset = "image.png, image-HD.png 2x"; 的 CSS 表达形式 1) 是 image-1x: url(image.png) !important; image-2x: none !important; image-1x: url(image.png); image-2x: url(image-HD.png); 2) 是 image-1x: url(image.png); image-2x: none; image-1x: url(image.png); image-2x: url(image-HD.png); 3) 是 image-1x: url(image.png); image-1x: url(image.png) !important; image-2x: url(image-HD.png) !important; 4) 是 image-1x: url(image.png); image-2x: none; image-1x: url(image.png) !important; image-2x: url(image-HD.png) !important; 。不知道这样子有没有比较好分析?这里面 2) 是因为没有 !important,所以不 可交换。3) 我觉得根本没必要考虑。就不知道有没有什么更妙的方法了…… [1] http://www.w3.org/html/ig/zh/wiki/WebIDL#es-attributes 以上 Kenny -- Web Specialist, Opera Sphinx Team, Oupeng Browser, Beijing Try Sphinx: http://sphinx.oupeng.com/
Received on Friday, 25 October 2013 19:40:21 UTC