- From: Dominic Cooney <dominicc@google.com>
- Date: Thu, 6 Dec 2012 20:25:33 +0900
- To: Alan Stearns <stearns@adobe.com>
- Cc: public-webapps <public-webapps@w3.org>
- Message-ID: <CAHnmYQ8GUrV7t_AWTwvE4JdyT5FwE=Xr8=u_6q_4cpdCKH+n8g@mail.gmail.com>
On Wed, Dec 5, 2012 at 9:56 AM, Alan Stearns <stearns@adobe.com> wrote:
> There are some similarities between Web Components insertion points and
> CSS Regions. Both facilities allow you to project content from one element
> into another. I'd like to compare the two when used inside custom
> components - why might you use CSS Regions inside a custom component, and
> when should you use an insertion point instead?
>
> If anything in the following analysis is incorrect, please let me know.
>
I only have a passing familiarity with CSS Regions, but I am familiar with
Web Components. I have some comments.
> An insertion point is a <content> element inside a shadow DOM subtree.
>
This is one kind of insertion point. There is a second kind, called
<shadow>, which is used when multiple shadow roots are applied to a given
element to specify how the shadows are merged for rendering.
> These elements can have a select attribute that contains one or more
> selector fragments. When the element with a shadow DOM subtree is
> rendered, its children are distributed to the insertion points in the
> subtree. The first selector match in tree order determines where each
> piece of content is displayed.
>
This is correct, but there is more – how <content> is handled when an
element has multiple shadows, and how selected nodes can be reprojected
through nested shadows.
> A CSS Region displays content that has been redirected to a named flow. A
> declaration of flow-into:<ident> moves content to a named flow, then a
> declaration of flow-from:<ident> with a matching ident creates one or more
> CSS Regions that will display that content.
>
> Insertion Points:
> 1. Content assignment done in HTML
> 2. One-to-one mapping of content to insertion point
>
If you replace /insertion point/ with /content element/ this is right for
the children of a given host element in the context of that host element’s
shadows but not for a document in general. When there are multiple shadows
and reprojection, where a node is presented in the (virtual) flattened tree
can depend on multiple insertion points.
> 3. Content must come from insertion point shadow host
>
This is incorrect in the case of reprojection. Here is a specific example
of reprojection:
<div id="a">
<div id="b">
{#a's shadow root}
<div id="c">
<content select="#b">
{#c's shadow root}
<div id="d">
<content>
The virtual tree is
#a
#c
#d
#b
Note how in #c's shadow root, the content is one of #a's children via
reprojection.
> 4. Can assign multiple selectors to a single insertion point
> 5. Cannot chain insertion points together
>
I’m not sure what you mean by “chain”, but reprojection and <shadow> make
two kinds of chaining possible.
> 6. Do not require an ident to collect content for projection
>
> CSS Regions
> 1. Content assignment done in CSS
> 2. One-to-many mapping of content to CSS Regions
> 3. Content can come from anywhere in the document
> 4. Can assign multiple selectors to a named flow
> 5. Can chain CSS Regions to create a fragmentation context
> 6. Need an ident for each named flow
>
> Should use Insertion Points
> 1. For adornments to a single <content> element
> (component as a wrapper)
> 2. For rearranging a single element's children
> (breaking news example)
> And I'm sure there are many many more use cases I'm not familiar with.
>
> Should use Regions
> 1. If you need to chain boxes together inside a template
> (create your own multicol component)
> 2. If you need to chain boxes between templates
> (custom component as pagination template)
> 3. If you want reassignments via CSS
> (media queries that target this or that portion of a component)
> 4. If you need to pull content from multiple sources
> (breaking news from two or more components)
>
> I'm happy to elaborate on the CSS Regions use cases listed here, if my
> terse descriptions are not clear.
>
>
> Thanks,
>
> Alan
>
>
>
Received on Thursday, 6 December 2012 11:26:07 UTC