123

Pen Settings

CSS Base

Vendor Prefixing

Add External Stylesheets/Pens

Any URL's added here will be added as <link>s in order, and before the CSS in the editor. If you link to another Pen, it will include the CSS from that Pen. If the preprocessor matches, it will attempt to combine them before processing.

+ add another resource

You're using npm packages, so we've auto-selected Babel for you here, which we require to process imports and make it all work. If you need to use a different JavaScript preprocessor, remove the packages in the npm tab.

Add External Scripts/Pens

Any URL's added here will be added as <script>s in order, and run before the JavaScript in the editor. You can use the URL of any other Pen and it will include the JavaScript from that Pen.

+ add another resource

Use npm Packages

We can make npm packages available for you to use in your JavaScript. We use webpack to prepare them and make them available to import. We'll also process your JavaScript with Babel.

⚠️ This feature can only be used by logged in users.

Code Indentation

     

Save Automatically?

If active, Pens will autosave every 30 seconds after being saved once.

Auto-Updating Preview

If enabled, the preview panel updates automatically as you code. If disabled, use the "Run" button to update.

HTML Settings

Here you can Sed posuere consectetur est at lobortis. Donec ullamcorper nulla non metus auctor fringilla. Maecenas sed diam eget risus varius blandit sit amet non magna. Donec id elit non mi porta gravida at eget metus. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.

            
              <link href="http://sparkx.online/secondary.css" rel="preload" as="style"/><!--not placed inside <HEAD> for purpose of this demo-->

<style id="critical">/*immediate cyan background by internal css*/
  body {background-color:cyan}
</style>

<div>
<h1>Triggering a Javascript/jQuery event after CSS has loaded .. AND RENDERED</h1><p>The above code presents a way to <b>remove critical CSS (&#x3C;style&#x3E; element) from HTML after being 100% sure, that external sheets have lazyloaded and rendered</b>.</p><p>This allows using universal, yet visually pleasing critical internal CSS globally over several projects.</p><p>Since some of the critical styles go visually against the lazyloaded ones,  so they need to be overridden (too much work), or removed. This is what happens with the second option:<ol><li>The document with critical internal CSS loads</li><li>Additional CSS is loaded after the document is rendered and interactive (good for SEO and UX)</li><li>Critical CSS is removed from HTML after the fancy additional <b>stylesheets have been loaded and truly rendered</b>.</li></ol><p>Using <i>setInterval();</i> to periodically check, whether a style, unique to secondary CSS, has truly been applied is a 100% working solution (may it be unpopular).</p><p>There are other solutions available, but only this one <b>prevents flickering which occured when the CSS is being manipulated</b> (lot of testing done on this). Check out more on this <a href="https://sparkx.online/triggering-javascript-jquery-after-css-has-loaded/" target="_blank">here</a> or alternatives in this   <a href="https://stackoverflow.com/questions/2571164/jquery-event-that-triggers-after-css-is-loaded/51267013" target="_blank">Stack Overflow post</a>.</p>

<p id="result">This paragraph will change to display loading time of external CSS.</p>
</div>

<!--loading jQuery-->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

<!--Changing "preload" to "stylesheet", to load external CSS. Wrapped in a 3 second setTimeout, to make the change visible -->
<script>
  setTimeout(function() {
$('*[rel="preload"]').attr("rel", "stylesheet");
    },3000); 
</script>

<!--Checking for CSS change, changing text of last <p>, when after it occurs. -->
<script> 
var i = 0;  
var CSSloadcheck = setInterval(function () {
  i++;
    if ($('body').css('opacity') != 1) {
    //when opacity is set to 0.99 by externatl sheet
	  $('style#critical').remove();
	  $('p#result').html('Critical CSS was removed after roughly ' + i*100 + "ms. Also, as a result, this paragraph changed and so did backround color - from cyan to orange.");
	  clearInterval(CSSloadcheck);  
      console.log(i);
  }
}, 100);
</script>

            
          
!
999px
🕑 One or more of the npm packages you are using needs to be built. You're the first person to ever need it! We're building it right now and your preview will start updating again when it's ready.

Console