Re: CSS3 B&B 規範裡 <position> 兩個取值語法的邏輯描述

(12/03/02 22:28), Dean Lee wrote:
> 也就是关于问题 2 的理解和处理。

關於這點我可能沒講清楚

(12/03/02 16:53), Kang-Hao (Kenny) Lu wrote:
> 但是這邊這種敘述有幾個問題:
>
> 2. 沒有排除 'top 10%' 這種好像滿足「且至少有一個不是關鍵字」,但是實際
> 上不合語法的情形。

實際上說明 'top 10%' 不行的是 <postion> 的語法[1](CSS 規範取值語法的語
法讀法也翻了[2]):

<positon> 的

[ center | [ left | right ] [ <percentage> | <length> ]?] &&
[ center | [ top | bottom ] [ <percentage> | <length> ]?]

有包含 'top left' 但是不包含 'top 10%',我想瀏覽器實作者也知道要看這個地
方,所以問題 2 的「處理」是完全沒問題的。

問題 2 的「理解」方面,比如說我第一次看這個部份沒注意到機械語法是支持
'top left' 這種寫法,而他寫一個「...且至少有一個不是關鍵字」的才時候才是
「第一個水平、第二個水平」完全把我困惑住了,因為我根本搞不清楚什麼樣的情
形這個順序會顛倒。所以這裡我的作法是:

1. 機械語法後面馬上加一個註解說「'top left' 合法,但是 'top 10%' 不合
法」,現在中文版我已經先加上去了,這個部份我也會當 CSS3 B&B 最後意見徵集
的反饋。

2. 現在那個文字的 A. B. C. D. 的文字敘述的更改提案。


而雖然 A. B. C. D. 都不碰問題 2 那個情況(再加「若第一個取值是 'top' 或
'down' 則本規範不允許第二個取值是 <length> 或 <percentage>。」之類的過於
冗長),但是作法 1 也試著讓不特別注意機械語法的人注意這件事了。


[1] http://www.w3.org/html/ig/zh/wiki/Css3-background#position-value
[2] http://www.w3.org/html/ig/zh/wiki/Css3-values#component-combinators

> 我个人把 C 看作原文的意译,这种解释让规范的要求一目了然。
> 
> “10% right”显然符合 C,初学者也难免望文生义,所以 IE 的 Quirks Mode
> 确实支持这种写法:
> document.getElementsByTagName('body')[0].style.backgroundPosition="bottom 90%"
> (等效于
> document.getElementsByTagName('body')[0].style.backgroundPositionY="bottom";
> document.getElementsByTagName('body')[0].style.backgroundPositionX="90%"; )

原來 IE Quirks Mode 支援這個,相當有意思,這當然是不合規範的,規範一般的
解釋是說不合機械語法的必須當作不存在。

> 可惜这种判断吃力不讨好,只会浪费运算资源,没有支持的价值。

我反而感覺現在 'left 10%', 'top right' 可以,但是 'top 10%' 不行的狀況相
當不直觀,我過我也不是對這個議題特別在意...

> 那为什么还要对关键词特别判断,做这样的兼容呢?
> 我能想到的解释只有这点:说“top-left”的人比说“left-top”的人多——连
> 5.1 border-radius 的附属元素都叫“border-top-left-radius”[1]
> (Google 的结果数也可以参考)。

這個解釋非常有道理!豁然開朗。

> 出于中英文一致的考虑,我建议以旁注的形式对原文说法进行解释,
> 避免增加阅读强度,同时也能服务感兴趣的读者。

一致性我同意,所以我會要求英文規範改成接近 C 的敘述(也當成最後徵集的意
見),可惜的是我認為就英文來講 D 是最好的,但是這種 "X, unless Y" 翻成中
文好像沒什麼好翻法,翻成「除非 Y,X」就違反了把重要的東西擺前面的構句原
則了(現在 C、D 都是把一般情形擺前面,'top right' 這種擺後面)。

> 原文也很好地规避了问题 2 的困扰(以“存在数值”为判断条件)。

如果你說的原文是指英文的 A 的話,我完全不能同意,前面已經說明讓我困惑的
地方了,這個原文讓我看了 30 分鐘還是不懂之後,再多看 www-style 一些郵
件、發現現在語法支持 'top right' 之後,我才看懂的。我不怎麼相信「存在數
值」比「兩個都不是 'left'、'top'、'right' 或 'bottom'」好...


此致

Kenny

Received on Friday, 2 March 2012 15:31:54 UTC