- From: Boris Zbarsky <bzbarsky@MIT.EDU>
- Date: Fri, 17 Sep 2010 14:16:38 -0400
- To: fantasai <fantasai.lists@inkedblade.net>
- CC: "www-style@w3.org" <www-style@w3.org>
On 9/16/10 8:41 PM, fantasai wrote: > It's painfully explicit about certain things that should be specified > clearly in a general sense, and not called out specifically here. Yes, but that was a consequence of it being defined on the _element_ tree, not the formatting structure, right? My initial proposal, which was defined on a conceptual tree of boxes, was much simpler. But there was some insistence at the time on defining this purely on the element tree, so here we are. > Calling them out here implies that there are ambiguities everywhere > they are not mentioned. Well.... aren't there? But see below. > 1. The most obvious one here is the distinction between elements and > pseudo-elements, which was recently clarified in 5.12. Link, please? I can't locate the editor's draft in my bookmarks at the moment. (It'd be awful nice if the issue document linked to diff or at least the current editor's draft.) > 2. The other is the mention of ignoring "display: none" elements, > which are already specified to be taken out of the formatting tree. Yes, but this algorithm is working on the element tree, not on the formatting structure (which isn't a tree per Bert, etc). > (If that's not clear enough generally It's clear that display:none elements are not present in the formatting structure. The algorithm under discussion does not operate on the formatting structure...... > because not ignoring them would > break most of the formatting algorithms in the spec: table layout, > margin collapsing, etc.) Those operate on the formatting structure, so don't have any issues like this. > # 2. Let B be the first of A's following siblings that is neither > # floating nor absolutely positioned nor has 'display: none'. > # If B exists and has a specified value for 'display' of 'block' > # or 'list-item' and is not replaced, then A is rendered as an > # 'inline' element at the start of B's principal box. Note: A > # is rendered before B's ':before' pseudo-element, if any. > # See 12.1. > with > | 2. Let B be the first of A's in-flow following siblings. If B > | exists and is a non-replaced block box, then A is rendered > | as if it were an 'inline' element at the start of B's contents-- > | after B's list marker box, if any, and before B's ':before' > | pseudo-element, if any. (See Chapter 12.) That's not equivalent at all. For example, a caption is a non-replaced block box, right? But we do NOT want the run-in running in in this situation, I would think: <span style="display: run-in">I am a run-in</span> <span style="display: table-caption">Keep away from me</span> So you do need the explicit "display:block/list-item" check here, I think. You also need the "display:none" check unless you rewrite this whole section to work on the formatting model. I'm fine with the changes to the last sentence to make the :before behavior normative and clarify the behavior wrt markers. > Remove > # In the above, "siblings" and "children" include both normal elements > # and :before/:after pseudo-elements. I'd need to see the exact language added to 5.12 to tell you whether this is ok. > To generalize the last rule to work with new CSS3 display types, replace > # 1. C is not floating and not absolutely positioned and the computed > # value of its 'display' is one of 'block', 'list-item', 'table' > # or 'run-in'. > with > | 1. C generates an in-flow block-level box or has a computed 'display' > | value of 'run-in'. I'd have to see the new block-level-box generation stuff to make sure, but this doesn't give the same behavior. In particular, this markup: <span style="display: run-in"> <span> <span style="display: table-caption"></span> </span> Do I run in? </span> <div> Run into me! </div> runs in with the old text but not with your new text. > Replace > # 2. C has a computed value for 'display' of 'inline' and it has one > # or more children that inhibit run-in behavior. (Where "children" > # includes both normal elements and :before/:after pseudo-elements.) > with > | 2. C is a non-replaced inline element and has one or more children > | that inhibit run-in behavior. This part I'm happy with. -Boris
Received on Friday, 17 September 2010 18:17:13 UTC