• Un nouveau #plugin pour #SPIP, destiné à gérer des images en #responsive : Image Responsive
    http://zone.spip.org/trac/spip-zone/browser/_plugins_/image_responsive

    Le plugin est actuellement installé sur Orient XXI :
    http://orientxxi.info

    Pour se faire une idée des problématiques :
    http://mobile.smashingmagazine.com/2013/07/08/choosing-a-responsive-image-solution

    Aucune des solutions évoquées ne me plaît, et je me suis dit qu’on a déjà dans SPIP ce qu’il faut pour s’en sortir, du coup voici une solution qui me semble intéressante.

    Notez que je suis particulièrement intéressé, ici, par des retours et des commentaires. C’est une solution très expérimentale (je l’ai codée aujourd’hui), et comme elle est du coup directement intégrée à SPIP, je pense que c’est une piste très intéressante à développer.

    Le problème à résoudre :
    – en responsive, selon la taille de l’écran, une image va s’afficher en différentes tailles ; sur la page d’accueil d’Orient XXI, c’est même très important (une même image s’affiche sur 160 pixels de large ou 460 pixels de large selon l’écran) ;
    – de plus, sur un écran haute définition, il faudrait afficher des images encore deux fois plus grandes.

    Du coup, dès qu’on commence à faire du design responsive, on a tendance à charger des images plus lourdes que ce qu’on va réellement afficher. Et ça commence à peser sur une connexion mobile pourrie.

    Noter que c’est un aspect désormais lourdement pénalisé par le calcul du PageSpeed.

    Ma solution avec ce plugin :
    – on fait passer une image (ou, si je ne me suis pas raté, un texte complet contenant plusieurs images) par le filtre |image_responsive{120}
    – cela va modifier le tag <img> :
    + le src va appeler une version réduite de l’image (ici, à 120 pixels de large),
    + l’image d’origine (celle qui est donc dans la version initiale du src) est stockée dans un data-src
    + j’ajoute une classe « image_responsive » à l’image.

    Initialement, quand on charge la page, on va charger une version déjà réduite de l’image et, idéalement, on indiquera la taille d’affichage pour smartphone.

    Une feuille de style est associée au plugin, qui force l’affichage de toutes les images de classe .image_responsive à 100% de la largeur. Attention, c’est le point vraiment important et un peu contraignant : c’est le conteneur de l’image (par exemple un <span class="logo"><img></span>) qui va déterminer la largeur d’affichage de l’image, parce que de toute façon l’image sera affichée sur 100% de cet espace. (La feuille de style va donc styler .logo éventuellement de manière responsive…)

    Une fois la page chargée, un javascript va scanner chaque .images_responsive, récupérer la largeur à laquelle elle est affichée, éventuellement multiplier par la densité de l’écran (2 pour un écran retina), et remplacer l’image par la version de cette nouvelle largeur.

    On charge donc une vignette, puis on remplace par une version de l’image à la taille exacte d’affichage.

    L’idée c’est de faire du responsive, pas du fluide. Si votre image peut s’afficher en 1000 largeurs différentes, ce plugin va finir par fabriquer 1000 fichiers graphiques différents, ce qui n’est pas forcément génial…

    – Assez simplement, là où mettait un [(#LOGO_ARTICLE_NORMAL|image_reduire{320})]
    on met maintenant un :
    [(#LOGO_ARTICLE_NORMAL|image_responsive{120})]
    (en considérant, par exemple, que 120 est la taille d’affichage usuelle de cette vignette sur un smartphone).
    Le reste des automatismes du système se charge automatiquement via le #INSERT_HEAD, donc il n’y a rien à faire, si ce n’est vérifier que les CSS sont adaptées pour forcer le dimensionnement du conteneur de l’image plutôt que l’image elle-même.

    – Important : si votre site repose sur le .htaccess (URL sans query string), il faut absolument y insérer une ligne supplémentaire. Cela permet de traiter les images derrière des URL de fichiers JPG, ce qui devrait faciliter les mises en cache.

    Avec ça, le score PageSpeed de la page d’accueil d’Orient XXI est passée de 76/100 à 94/100. Et l’impression de vitesse sur smartphone est très très nettement améliorée.

  • Je viens d’installer sur #spip-zone un #plugin #SPIP que j’utilise systématiquement pour mes sites en #HTML5 et #responsive : HTML5 responsive
    http://zone.spip.org/trac/spip-zone/browser/_plugins_/html5_responsive

    Il s’agit d’une petite trousse à outil des choses dont j’ai systématiquement besoin lors du démarrage de squelettes HTML5 et responsive. (Si on ne veut pas faire de responsive, ce n’est pas une bonne idée d’installer ce plugin.)

    Une fois activé, le plugin ajoute directement ce qu’il faut dans #INSERT_HEAD, il n’y a rien à faire de spécifique dans les squelettes.

    – D’abord, intégration de html5shiv (pour activer la prise en compte des balises HTML5 par internet explorer), et de css3-mediaqueries (pour la prise en compte des #mediaqueries par internet explorer).

    – Insertion des meta-tags habituels pour un site responsive :
    + définition du viewport (attention : j’ai l’habitude d’interdire le zoom sur mes sites responsive, parce que souvent j’ai besoin de pouvoir utiliser les gestures pour autre chose dans le site – bon, si on a besoin, c’est facile à désactiver) ;
    + refuser la détection des numéros de téléphone, ça m’a toujours posé plus de soucis qu’autre chose ;
    + activer la possibilité de transformer le site Web en webapp.

    – Pour l’aspect Webapp, intégration d’un petit script perso qui transforme tous les liens internes du site en action javascript, ce qui fait qu’on peut naviguer entre les pages du site sans cliquer la Webapp (sans cela, dès qu’on suit un lien du site, ça lancerait Safari).

    – Comme c’est chiant à faire à chaque fois, j’intègre le meta du charset systématiquement à cet endroit.

    – Et quelques lignes de CSS…
    + désactiver la « correction » de la taille des caractères ; c’est logique sur un site qui n’est pas optimisé, mais en responsive c’est pénible ;
    + tiens, désactiver le zoom sous Internet Explorer ;
    + forcer le lissage des images réduites sous IE7, parce qu’en responsive on le fait souvent.
    + et puis mes minimums : pas de marge pour le body, et pas de cadre autour des images. C’est pas directement lié au responsive, mais ce sont les seuls choses du genre « reset » que j’utilise systématiquement (je n’utilise jamais de reset.css).

    Je sais qu’il y a déjà des choses dans la Zone, mais c’est un vieux truc à moi que j’utilise absolument tout le temps, et qui est bien pratique. Alors autant le partager.

  • C’est l’inflation !

    Je ne trouve pas comment désactiver tout ce merdier sur le site public :

    plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.core.js
    plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.widget.js
    plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.mouse.js
    plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.sortable.js

    J’ai beau désactiver la mediabox, ceci continue de s’insérer :

    var box_settings = {tt_img:true,sel_g :"#documents_portfolio a[type=’image/jpeg’],#documents_portfolio a[type=’image/png’],#documents_portfolio a[type=’image/gif’]",sel_c :".mediabox",trans :"elastic",speed :"200",ssSpeed :"2500",maxW :"90%",maxH :"90%",minW :"400px",minH :"",opa :"0.9",str_ssStart :"Slideshow",str_ssStop :"Stop",str_cur :"{current}/{total}",str_prev :"Previous",str_next :"Next",str_close :"Close",splash_url :""} ;

    Et enfin je ne trouve pas comment désactiver ça (et surtout je ne comprends pas pourquoi ça ne se compacte pas avec les autres CSS de la page, histoire de ne pas ajouter deux appels à des fichiers CSS externes) :

    <link rel=’stylesheet’ type=’text/css’ media=’all’ href=’plugins-dist/jquery_ui/css/jquery.ui.core.css’ />
    <link rel=’stylesheet’ type=’text/css’ media=’all’ href=’plugins-dist/jquery_ui/css/jquery.ui.theme.css’ />

    La tronche de mon head sous #SPIP3 : eurk !

    • Hop,

      Je ne trouve pas comment désactiver tout ce merdier sur le site public

      Le « merdier » en question n’est présent que si nécessité par un plugin, un SPIP vierge n’insère pas les scripts de jQuery UI dans le public, la preuve :

      http://b_b.grml.eu/spip.php?article1

      Pour info, les scripts de jQuery UI sont insérés sur demande à l’aide du pipeline associé :

      http://programmer3.spip.net/jqueryui_plugins

      (doc liée depuis la page de présentation de SPIP 3.0 sur spip.net)

      et surtout je ne comprends pas pourquoi ça ne se compacte pas avec les autres CSS de la pag

      Le compresseur de SPIP regroupe les css en fonction de leur attribut « media », cela fonctionne bien sur les taxinomes, on voit bien que les css de jquery UI sont regroupées dans le même fichier que les autres :

      http://www.lestaxinomes.org

    • OK, pour jqueryui_plugins je vois : c’est mon plugin « Sélection d’articles » qui ajoute les appels à cet endroit, sans faire la différence entre l’espace privé et l’espace public. Au temps pour moi, donc.

      Je vais uploader une mise à jour. En revanche, je suggère de signaler sur la page de programmer.spip.net la mention de la méthode « officielle » pour détecter en PHP si on est dans l’espace privé (si c’est déjà documenté, juste ajouter un lien hypertexte).

      Pour le compactage des CSS, pour l’instant ça ne donne rien (et même de manière assez curieuse), les regroupements restent farfelus. Je cherche encore.

    • Pour les CSS, je n’arrive pas à mieux. Mais j’ai l’impression que les CSS balancés via « insert_head » (à l’ancienne) se comptactent bien entre eux et avec les appels depuis les squelettes. Alors que les CSS balancés via « insert_head_css » ne se compactent ni entre eux ni avec les appels depuis les squelettes.

      Quand je balance un appel de CSS dans « insert_head » (à l’ancienne), ça fonctionne correctement.

    • Dans les préférences, tu as activé le mode « conversations / quelqu’un répond à un billet auquel j’ai moi-même répondu » ? Normalement ça devrait faire ce que tu veux (sinon y’a un bug).

    • Bonjour
      Désolée de déterrer un vieux post mais en regardant le code source de tes sites Arno*, je vois que tu arrives à mettre tes css inline avec #INSERT_HEAD_CSS, tu peux expliquer comment tu arrives à ça ou c’est secret ? merci