- From: Paul Duffin <pduffin@volantis.com>
- Date: Thu, 10 Jun 2010 01:55:36 -0600 (MDT)
- To: www-style <www-style@w3.org>
I don't mean to hassle but I have a deadline and really need an answer. I know it could change in future and I can deal with that (vendor specific pseudo element) I just wanted to minimize the risk. ----- "Paul Duffin" <pduffin@volantis.com> wrote: > I have a question about the meaning of width/height properties when > used on an element that is the superior parent for one or more > ::outside pseudo elements. It may be that a deeper understanding of > how CSS rendering is performed or pseudo elements in general would > make this obvious but I have looked and am still not clear. > > Calculations for determining the actual values of width/height > properties are defined in terms of the "containing block", nowhere in > the specification for ::outside (in > http://dev.w3.org/csswg/css3-content/) does it make mention of the > "containing block" so I am unsure as to whether the ::outside affects > the containing block or not. > > I assume that an ::outside pseudo element becomes the "containing > block" of its superior parent and the "containing block" of the > ::outside pseudo element is the "containing block" that its superior > parent would have had if the ::outside pseudo element was not present. > This determination of "containing blocks" starts from the element and > recurses down through the hierarchy of ::outside pseudo elements. > > Some examples may make this easier to understand, in the following X > > Y means that box for element X is the "containing block" of box for > element Y. > > Lets say that I have some markup like this: > <div class="outer"> > <div class="inner"> > .... > </div> > </div> > > Without any styles: ".outer" > ".inner" > > If applying this CSS. > .inner::outside {border: 4px solid red; padding: 2px} > > Then the determination of "containing block" relationships would > consist of the following steps: > 1) Initially .outer > .inner > 2) Processing .inner::outside: > * .inner::outside > .inner > * .outer > .inner::outside. > > If applying CSS. > .inner::outside {border: 4px solid red; padding: 2px} > .inner::outside(2) {border: 3px dashed blue; padding: 1px} > > Then the determination of "containing block" relationships would > consist of the following steps: > 1) Initially .outer > .inner > 2) Processing .inner::outside: > * .inner::outside > .inner > * .outer > .inner::outside. > 3) Processing .inner::outside(2) > * .inner::outside > .inner > * .inner::outside(2) > .inner::outside > * .outer > .inner::outside(2). > > If applying CSS. > .inner::outside {width: 50%} > .inner::outside(2) {width: 20%} > > Then if the actual width of the ".outer" element is 200px then: > * Width of .inner::outside(2) is 20% x 200px = 40px. > * Width of .inner::outside us 50% x 40px = 20px. > > Is this how it is supposed to work?
Received on Thursday, 10 June 2010 07:56:18 UTC