search
  • Sign In
  • Sign Up
Password reset successful

Follow the proiects vou are interested in andi aet the latestnews about them taster

Table of Contents
1. Identify Critical vs. Non-Critical CSS
2. Load Non-Critical CSS Asynchronously
with onload"> Option A: Use rel="preload" with onload
Option B: Dynamic Loading with JavaScript
3. Use Media Attributes to Defer Print or Conditional Styles
4. Minify and Combine Non-Critical Files
Trick for Immediate Deferral"> Bonus: Use media="print" Trick for Immediate Deferral
Home Web Front-end H5 Tutorial How to defer non-critical CSS in an HTML5 page?

How to defer non-critical CSS in an HTML5 page?

Aug 12, 2025 am 12:15 AM
css html5

To effectively improve page loading performance, you need to inline the critical CSS first and load the non-critical CSS asynchronously; 1. Use tools or manually identify the critical CSS and inline it to

; 2. Use rel="preload" to combine onload, JavaScript dynamic loading or requestIdleCallback asynchronously; 3. Use media attributes to delay loading conditional styles such as print or topics; 4. Merge and compress non-critical CSS to reduce requests; you can use the media="print" technique to achieve JavaScript-free asynchronous loading, thereby significantly optimizing the first-screen rendering speed.

How to defer non-critical CSS in an HTML5 page?

Deferring non-critical CSS in an HTML5 page helps improve page load performance by ensuring only the CSS needed for above-the-fold content is loaded initially. The rest—non-critical styles—are loaded later, without blocking rendering.

How to defer non-critical CSS in an HTML5 page?

Here's how to do it effectively:


1. Identify Critical vs. Non-Critical CSS

Critical CSS is the minimum set of styles required to render the visible portion of your page (above the folder). Everything else is non-critical.

How to defer non-critical CSS in an HTML5 page?
  • Use tools like Penthouse , Critical , or online generators to extract critical CSS automatically.
  • Manually review your page and isolate styles for headers, hero sections, and early-rendering components.

Once identified, inline the critical CSS directly in the :

 <head>
  <style>
    /* Inlined critical CSS */
    h1 { font-size: 2rem; color: #333; }
    .hero { margin: 0; padding: 20px; }
    /* ... */
  </style>
</head>

2. Load Non-Critical CSS Asynchronously

Standard <link rel="stylesheet"> tags block rendering. To defer non-critical CSS, load it asynchronously using JavaScript or HTML tricks.

How to defer non-critical CSS in an HTML5 page?

Option A: Use rel="preload" with onload

Preload the CSS file and switch the rel to stylesheet once loaded:

 <link rel="preload" href="non-critical.css" as="style" onload="this.onload=null;this.rel=&#39;stylesheet&#39;">
<noscript><link rel="stylesheet" href="non-critical.css"></noscript>

Include a small script to handle fallback if JavaScript is disabled:

 <script>
  // Optional: ensure the onload event triggers
  function loadCSS(href) {
    var link = document.createElement(&#39;link&#39;);
    link.rel = &#39;stylesheet&#39;;
    link.href = href;
    document.head.appendChild(link);
  }
  // Call loadCSS(&#39;non-critical.css&#39;) after page idle
</script>

Option B: Dynamic Loading with JavaScript

Load non-critical CSS after the page has rendered:

 <script>
  window.addEventListener(&#39;load&#39;, function() {
    var link = document.createElement(&#39;link&#39;);
    link.rel = &#39;stylesheet&#39;;
    link.href = &#39;non-critical.css&#39;;
    document.head.appendChild(link);
  });
</script>

Or use requestIdleCallback for even better performance:

 <script>
  if (window.requestIdleCallback) {
    requestIdleCallback(function() {
      loadCSS(&#39;non-critical.css&#39;);
    });
  } else {
    // Fallback to load event
    window.addEventListener(&#39;load&#39;, function() {
      loadCSS(&#39;non-critical.css&#39;);
    });
  }

  function loadCSS(href) {
    var link = document.createElement(&#39;link&#39;);
    link.rel = &#39;stylesheet&#39;;
    link.href = href;
    document.head.appendChild(link);
  }
</script>

3. Use Media Attributes to Defer Print or Conditional Styles

Move styles that aren't needed immediately (like print or theme styles) using media attributes:

 <link rel="stylesheet" href="print.css" media="print">
<link rel="stylesheet" href="dark-theme.css" media="prefers-color-scheme: dark">

These are still loaded, but with lower priority, helping reduce render-blocking impact.


4. Minify and Combine Non-Critical Files

Reduce HTTP requests by combining all non-critical CSS into a single minified file before deferring it. Tools like Webpack, Parcel, or build scripts (eg, with cssnano ) can help.


Bonus: Use media="print" Trick for Immediate Deferral

A clever trick to load CSS asynchronously without JavaScript:

 <link rel="stylesheet" href="non-critical.css" media="print" onload="this.media=&#39;all&#39;">

The browser downloads the file quickly (since print is low priority), and once loaded, onload switches it to all , applying the styles.


Basically, defer non-critical CSS by inlining what's essential and loading the rest asynchronously with preload , JavaScript, or smart media tricks. It's not hard, but it makes a real difference in perceived performance.

The above is the detailed content of How to defer non-critical CSS in an HTML5 page?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

ArtGPT

ArtGPT

AI image generator for creative art from text prompts.

Stock Market GPT

Stock Market GPT

AI powered investment research for smarter decisions

Popular tool

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to achieve smooth fade-out of page switching using CSS_Using animation mask How to achieve smooth fade-out of page switching using CSS_Using animation mask Apr 02, 2026 pm 07:45 PM

Transition realizes the lightest and controllable page fade-out. It needs to cooperate with the two-step control of opacity and visibility. JS listens to the transitionend and then uninstalls the component. The animation mask is prone to lag, z-index conflicts and the status is difficult to synchronize. It is only necessary in a few scenarios such as sensitive information.

How to make a simple jitter tip with CSS_using keyframes and rotation How to make a simple jitter tip with CSS_using keyframes and rotation Apr 03, 2026 pm 03:42 PM

Shake animation should use translateX() to achieve left and right displacement instead of rotate(); it needs to be combined with @keyframes to define a 0%/25%/50%/75%/100% offset sequence, and the offset is controlled within ±2px~±6px; animation-fill-m must be added ode:forwards (or use both), select cubic-bezier(.36,.07,.19,.97) for easing; the old animation must be cleared and forced to rearrange before JS is triggered; use will-change with caution on the mobile terminal, and only add translateZ(0) to ensure hardware acceleration.

How to add styles to Bootstrap switch components with CSS_Transformation through checkbox pseudo-element How to add styles to Bootstrap switch components with CSS_Transformation through checkbox pseudo-element Apr 03, 2026 pm 03:54 PM

The default style of the Bootstrap switch cannot be changed because it draws visual effects through pseudo elements::before/::after, which needs to cover .form-switch.form-check-input .form-check-label::before (track) and ::after (slider) and handle all states such as: checked, :disabled and :checked:disabled.

How to set a transparent frosted sidebar with CSS_using rgba color through background-filter How to set a transparent frosted sidebar with CSS_using rgba color through background-filter Apr 03, 2026 pm 03:57 PM

In Safari, the background-filter needs to be prefixed with -webkit- and the background is opaque to take effect; the blur value cannot be 0; the size of the blurred area affects performance more than the numerical value; text needs to be enhanced with contrast and strokes to ensure readability.

How to implement Bootstrap fixed header scrolling with CSS_Set the position attribute of thead How to implement Bootstrap fixed header scrolling with CSS_Set the position attribute of thead Apr 03, 2026 pm 04:00 PM

The fundamental reason is that the browser does not support the direct application of position:sticky to the thead, because the display:table of the parent container table limits the sticky behavior; the tbody must be moved into an independent scrolling container and a display:block split structure must be set up to unify the column width with colgroup to achieve a stable fixed header.

How to implement custom scroll bar styles on the mobile side with CSS_through pseudo-element webkit-scrollbar How to implement custom scroll bar styles on the mobile side with CSS_through pseudo-element webkit-scrollbar Apr 03, 2026 pm 03:45 PM

Mobile side::-webkit-scrollbar often fails because Android WebView and Safari before iOS 16.4 do not support this pseudo element; iOS 16.4 only has limited support, and Android basically does not support it; the alternative is to disable the native scroll bar and customize it with CSS JS.

How CSS solves the absolute positioning offset bug under IE_Fixed by setting the hasLayout attribute How CSS solves the absolute positioning offset bug under IE_Fixed by setting the hasLayout attribute Apr 03, 2026 pm 03:48 PM

The essence of the inaccurate offset of position:absolute in IE6–8 is that the parent container does not trigger hasLayout, causing the absolute positioning reference to the wrong containing block; it needs to be actively triggered by reliable methods such as zoom:1, rather than relying solely on position:relative.

How to modify the Bootstrap form validation color with CSS_by overriding the pseudo-class style How to modify the Bootstrap form validation color with CSS_by overriding the pseudo-class style Apr 03, 2026 pm 03:51 PM

The input:valid and input:invalid pseudo-classes do not take effect because the browser does not trigger native verification due to the lack of required attributes or type semantic types (such as email, url); Bootstrap's is-valid/is-invalid relies on JS rather than pseudo-classes, so you need to ensure that HTML constraints exist and CSS weight is sufficient.

Related articles