- From: Mike Bremford via GitHub <sysbot+gh@w3.org>
- Date: Tue, 18 Aug 2020 09:14:45 +0000
- To: public-css-archive@w3.org
Thanks @emilio for bringing this one up. Yes, viewport units are a bit of a pain point for us, when applied to font sizing anyway.
* PDFReactor [defines](https://www.pdfreactor.com/product/doc_html/index.html#SupportedLengthUnits) `vw` as _"Equal to 1% of the width of the content area of the first page"_
* Prince doesn't claim support for `vw` in their current documentation, but they are ["on the roadmap"](https://www.princexml.com/forum/topic/2728/css3-units)
* Antenna House Formatter [defines](https://www.antenna.co.jp/AHF/help/v70e/ahf-ext.html#ext-unit-conf) `vw` as _"Unit of the width expressing the viewport width as 100. It cannot be used with elements for which a viewport, such as the root element, has not been established"_. But I'm struggling to parse that.
* We treat `vw` as 100% of the content-box of the current page, so you can fragment a table that is `width: 50vw` from portrait to landscape and it will increase in width. This is what I believe is currently specified. But, we still have issues breaking text where font size is in viewport units, eg `font-size: 80vh` and the page size changes.
So I agree it's "the page box minus margins". We don't accept viewport units in @page dimensions at all, they collapse to `auto` the same way a percentage against shrink-to-fit does. So `size: 100vw 100vh` is invalid. I don't know about the other print engines.
Media Queries are more interesting. RealObjects, Prince and ourselves allow the nominal page width/height to be set externally - I've no information on AH formatter. And I hadn't spotted this sentence until you pointed it out:
> Media queries do not honor size: they assume the paper size that would be chosen if no @page rules were specified
I think that's a very problematic sentence. Without a @page rule the default page size is `auto` - UA dependent, so effectively undefined. Which means any width/height related media query is also - currently - effectively undefined in print. I'm pretty sure we can, and should, improve on this.
I don't think evaluating MQ width/height against the the "first page" is useful, as that's layout dependent - for example, the first page here is arguably[1] landscape, not portrait:
```css
@page cover {
size: a4 landscape;
}
<html>
<body>
<img style="page: cover"/>
```
But you could define the media width/height against the size of the last _unqualified_ page rule - i.e. the highest priority @page rule that has no selectors and is not itself nested inside a @media or imported from a media-qualified @import. This is unambiguous once you've parsed all the stylesheets, and doesn't require layout to evaluate. And it still lets you do stuff like this, which might be tricky otherwise:
```css
@media print and (width: 210mm) and (height: 297mm) {
@page landscape {
size: 297mm 210mm;
}
}
@media print and (width: 8.5in) and (height: 11in) {
@page landscape {
size: 11in 8.5in;
}
}
```
I could imagine this rule in an author stylesheet, and a @page rule selecting the current paper loaded into the printer being set in the user stylesheet generated by the print dialog (for example). Without any @page rule the rule collapses to what we have now, so there's no compat issue for Prince, RealObjects and ourselves .
Finally, I'm not sure I agree that media-query "width" should be defined to equal 100vw. Media has a very specific meaning in print (eg "Media Box" in PDF means the size of the physical page, which is well-known terminology). Personally, I don't find the fact it's not 100vw problematic - media != viewport.
[1] Not just arguably but actually in Prince and our product; untested elsewhere.
--
GitHub Notification of comment by faceless2
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/5437#issuecomment-675363039 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Tuesday, 18 August 2020 09:14:47 UTC