- From: Dave Cramer <dauwhe@gmail.com>
- Date: Tue, 25 Nov 2014 13:07:51 -0500
- To: Brad Kemper <brad.kemper@gmail.com>
- Cc: www-style list <www-style@w3.org>, Dave Cramer <Dave.Cramer@hbgusa.com>
On Sat, Nov 22, 2014 at 1:18 PM, Brad Kemper <brad.kemper@gmail.com> wrote:
> Regarding the first point above, I think in some ways, 'string-set' is
> similar to 'flow-into', especially if we axe the concatenation stuff of #7
> above. They both use the similar 'content' or 'contents' keywords to create
> a variable-like name to hold the original contents of the element. I think
> we can play off that, using that as mental equity for changing the name and
> syntax of 'string-set'. So, instead of 'string-set', I propose the
> following:
>
> Name: copy-into
> Value: none | [ [ <custom-ident> <content-level>] [, <custom-ident>
> <content-level>]* ]?
> Initial: none
> Applies to: All elements, but not ::first-line or ::first-letter.
> Inherited: no
>
> The 'copy-into' property contains one or more pairs, each consisting of an
> custom identifier (the name of the named string) followed by a content-level
> keyword describing how to construct the value of the named string.
I like this. I want to think more about the benefits and/or drawbacks
of separating this from flow-into.
>
> <ident> = The element or its contents, or its text, or the value of a
> specified attribute or counter is copied and placed into an non-rendered
> content fragment with the name '<ident>'. The values none, inherit, default,
> auto and initial are invalid content fragment names.
>
> <content-level> expands to one of the following values:
> element|contents|text|attr(<identifier>)|<counters>
>
> element
> the entire element is copied into the named content fragment (i'm using
> 'named content fragment' to mean the same thing as a named flow, but not
> intended to be flowed through multiple elements).
>
> contents
> only the element’s contents are copied into the named content fragment. This
> is the default if <content-level> is not specified.
>
> text
> only the element’s text (including normally collapsed white space) is copied
> into the named content fragment.
>
> attr(<identifier>)
> the string value of the attribute <identifier> is copied into the named
> content fragment
>
> <counters>
> the value of a counter() function, as described in [CSS21] is copied into
> the named content fragment.
> -----------------------------
>
> So basically, it is the same as "flow-into", except that it does not remove
> anything, just a copy, and it has some other choices besides just "content"
> and "element" (I would also change "content" to "contents" in Regions).
> Plus, it can list several different names to copy stuff into, e.g. like
> this: 'copy-into: myContents contents, chapNum counter(chapter)'. And it has
> 'contents' as the default if one of the other levels is not specified
> instead.
I'm not sure I fully understand this bit:
h1 { copy-into: myContents contents, chapNum counter(chapter) }
What's the advantage of assigning the counter to a named content
fragment here? That's something that's not related to the element.
@top-center { content 'Chapter' chapNum ': ' myContents }
could be written as
@top-center { content 'Chapter' counter(chapter) ': ' myContents }
I think it might be conceptually simpler to use copy-into solely to
get the content of the element, given that the content property
already gives us access to counters, attributes, and literal text.
>
> By default, the content fragment name would be global, as the named flow is
> with 'flow-into'. But if one of the following pseudo-classes are used on the
> subject of the selector, then the name is locally scoped to just the page
> the element is on.
>
> :nth-of-page(n) The element is the nth matched element on the page.
> :first-of-page Same as :nth-of-page(n), but where n = 1 (it is the
> first matched element on the page).
> :last-of-page The element is the last matched element on the page.
> :start-of-page The element is the first matched element on the page,
> and neither it nor its ancestors have any previous siblings that appear on
> the page.
>
> The content property would be able to accept the named content fragment as
> one of its value parts, just by using the identifier. It would not be part
> of a region chain, unless the whole element containing the named content
> fragment had "flow-into" something else.
>
So in a relatively common case, using a first/start value on the left
page, and a last value on the right page, you'd have
h1:first-of-page { copy-into: chapter-title-left }
h1:last-of-page { copy-into: chapter-title-right }
@page:left {
@top-left {
content: chapter-title-left;
}
}
@page:right {
@top-right {
content: chapter-title-right;
}
}
It bothers me a bit that you have to create two distinct named content
fragments in order to do this. I think there are some advantages to a
syntax closer to what string() does today:
h1 { copy-into: chapter-title }
@page:left {
@top-left {
content: copy-from(chapter-title, first);
}
}
@page:right {
@top-right {
content: copy-from(chapter-title, last);
}
}
But then I also want page-position selectors for entirely unrelated reasons :)
Regards,
Dave
Received on Tuesday, 25 November 2014 18:08:22 UTC