- From: Craig Francis via GitHub <sysbot+gh@w3.org>
 - Date: Mon, 28 Oct 2019 18:30:44 +0000
 - To: public-css-archive@w3.org
 
craigfrancis has just created a new issue for https://github.com/w3c/csswg-drafts:
== [selectors] Add :before-load() pseudo-class ==
Page layout will often change when using async JavaScript, which is annoying, especially on a slow internet connection.
Would it be possible to have a CSS selector that's only applied when the JavaScript is being downloaded, and during initial execution.
I'm always reluctant to do something like `display: none` on some content, then get the JavaScript to show it, as the JavaScript may have a problem (fails to load due to network or ad-blocker, parsing issues, finding the element, etc).
I realise async JavaScript introduces an issue here, because it can download after `DOMContentLoaded`. And the `load` event is probably too late (waiting for loads of images), so the exact definition of this pseudo-class is up for debate.
---
As an example...
On a registration form, it asks if you're a member, and if you select "yes", then additional fields appear.
Today I'd do that by getting the JavaScript to hide the fields on `DOMContentLoaded`, but this means the additional fields appear while loading.
I'd like to create a rule, that's in a normal `<link>` style sheet, such as:
    html:before-load .member_fields {
        display: none;
    }
So the fields are initially hidden, then my JavaScript can set more specific styles; and if I don't, it will fall back to the fields being shown.
As it's async, and the DOM might not contain the fields yet, I suspect my initial JavaScript code would do something like the following (after any compatibility checks):
    document.documentElement.className += ' js_register_enabled';
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/4462 using your GitHub account
Received on Monday, 28 October 2019 18:30:46 UTC