Comment charger CSS de manière asynchrone sans utiliser JavaScript?

supposons que j'ai un site web http://somethingsomething.com

et j'ai 3 fichier css

  • commun.css
  • page d'accueil.css
  • intérieur-pages.css

homepage.css est nécessaire pour la page d'accueil et common.css est pour l'ensemble du site, mais inner-pages.css est pour les autres pages seulement et il est grand fichier. Est-il possible de charger inner-pages.css après le téléchargement des données de la page d'accueil. De la même manière que nous utilisons l'attribut async pour l'étiquette script . Pour autant que je sache async attribut est seulement pour JS pas CSS

mon seul ami a suggéré d'utiliser requerjs pour ce http://requirejs.org/docs/faq-advanced.html#css mais je ne veux pas utiliser javascript pour charger css et même je penserais à JS way Je ne voudrais pas utiliser require.js juste pour cela. Donc, si ce N'est pas possible avec CSS seulement. quelle serait la façon la plus simple pour JS de faire ça?

16
demandé sur Jitendra Vyas 2013-11-06 21:46:34

4 réponses

Async CSS avec media="bidon" et un <link> au pied Disons que nous avons notre HTML structuré comme ceci:

<head>
    <!-- unimportant nonsense -->
    <link rel="stylesheet" href="style.css" media="bogus">
</head>
<body>
    <!-- other unimportant nonsense, such as content -->
    <link rel="stylesheet" href="style.css">
</body>

plus à http://codepen.io/Tigt/post/async-css-without-javascript

9
répondu Abhishek Gupta 2015-12-22 13:55:15

essayer

$.ajax({
    url:'/css.css',
    type:'get',
    success:function(css){
        $('html').append('<style>'+css+'</style>');
    }
});

ou

function getCss(url){
    $('<link>',{rel:'stylesheet',type:'text/css','href':url}).appendTo('head');
}

getCss('/css.css');

ok désolé je n'ai pas vu que vous ne vouliez pas utiliser javascript

Que diriez-vous d'utiliser css @import:

<style>
@import url('/style1.css');
@import url('/style2.css');
</style>
1
répondu 2013-11-06 18:00:55

vous pouvez placer une iframe dans votre page pointant vers une page factice qui sert la CSS, qui devrait servir le fichier CSS async.

<iframe src="loadcss.html"></iframe>

ne notez pas qu'il semble assez trivial, cela provoque un minimum de 2 transferts de fichiers css par page et 3 transferts de fichiers css par page d'enfant (si elle n'est pas mise en cache). Si vous deviez minifier le css, vous n'auriez qu'un seul transfert.

1
répondu David Nguyen 2013-11-06 18:02:10

incluez votre CSS dans le <body> au lieu de <head> ... "il semble que cette astuce provoque Chrome & Firefox pour démarrer le corps plus tôt, et ils ne bloquent tout simplement pas pour les feuilles de style de corps."et ajouter une condition pour IE:

tête

<head>
  <!--[if IE]>
    <link rel="stylesheet" href="style.css"> <!-- blocking, but what else can ya do? -->
  <![endif]-->
</head>

corps

<body>
    <!--[if !IE]> -->
        <link rel="stylesheet" href="style.css" lazyload>
  <!-- <![endif]-->
</body>

par Taylor Chasse @codepen.io

0
répondu Yatko 2016-11-03 03:26:13