Astuce css: forcer l'impression de l'image de fond d'une objet

Avec une feuille de style print.css, j'avais un souci: le fond d'une div d'info ne s'imprimait pas alors que j'y avais mis un joli bronco...

ben en fait, il semblerait qu'on puisse forcer l'impression d'une image passée en background:


.madiv{
        -webkit-print-color-adjust: exact !important;
        print-color-adjust: exact !important;
}

Si ça peut aider...

(...)

CSS C OUF

Dans mon appli de documents, je voulais accentuer le document survolé dans la liste et diminuer les autres li. Ben ça se fait en ... un sélecteur CSS !

body:has(li:hover) li:not(:hover){
    opacity:0.5;
    transition: opacity 500ms;
}

Les li non survolés alors qu'un li est survolé sur la page deviennent transparents à 50% mais si on ne survole aucun li, l'aspect est normal...

11.jpg 1.jpg

(...)

Responsive Moderne, le Web au-delà des breakpoints - Alsacreations

Je n'ai pas forcément compris toutes les explications mais l'article est vraiment intéressant.

J'imagine qu'il me faudrait réfléchir pour remplacer mon usage des media queries façon patch à la pelle de chantier des trucs qui foirent quand on change la taille du viewport... si je pouvais me passer des breakpoints...

Mais bon, j'ai déjà bossé à un refacto du css de mon appli de documents/exercices pour les élèves en modernisant le code à coups de nesting et de variables pour les couleurs... résultat, certains navigateurs au collège affichent de la merde parce qu'ils ne sont pas mis à jour

Je ne sais pas pour vous amis codeurs, mais de mon côté, si je n'ai pas un problème concret pour intégrer des nouveautés,impossible de les comprendre vraiment...

CSS properties that solve annoying problems - YouTube

Je me note quelques astuces intéressantes. Toutefois, une remarque en passant... ARRÊTEZ DE FAIRE DES VIDÉOS DE PROGRAMMATION... à quoi ça rime ? on ne peut pas faire de copier coller, pas de récup auto de snippets, pas de tests... à part faire grimper votre popularité sur les raizosocio... pfff.

Oui, je sais qu'en description il a mis les snippets : mais il pouvait les inclures dans une page de blog, non ? Ou alors plus personne ne sait lire à part moi et on ne m'a rien dit ?!

un effet glow ou une ombre qui suit le background de la div.

L'astuce consiste à utiliser des pseudo éléments héritant du background de la div et à les blur.

.gradient-shadow {
  background: linear-gradient(
    45deg,
    hsl(var(--clr-orange)),
    hsl(var(--clr-blue))
  );
  position: relative;
  isolation: isolate;
}

.gradient-shadow::before,
.gradient-shadow::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: inherit;
  /*   border: 10px dotted white; */
}

.gradient-shadow::before {
  filter: blur(0.75em);
}

.gradient-shadow::after {
  opacity: 0.5;
  filter: blur(2em);
}

Faire en sorte que la répartition du texte sur plusieurs lignes soit meilleure

En gros, le navigateur essaie de couper le texte de façon plus homogène

// pour les titres (peu de lignes) 
h1{ text-wrap: balance;}
// pour les paragraphes etc (beaucoup de lignes): pas d'orphelin sur la dernière ligne
p{text-wrap:pretty;}



My Opinionated CSS Reset | Vale.Rocks

Je me note quelques astuces à tester ou retenir :

/* empêcher les navigateurs mobiles d'ajuster la taille du texte */
-webkit-text-size-adjust: none;
text-size-adjust: none;
/* le body prend tout le viewport */
html{ block-size: 100%; }
body{ min-block-size: 100%; }
/* empêcher les medias de déborder */
img,
iframe,
audio,
video,
canvas {
    display: block;
    max-inline-size: 100%;
    block-size: auto;
}

svg {
    max-inline-size: 100%;
}
/* overflow horizontal */
p,
h1,
h2,
h3,
h4,
h5,
h6 {
    overflow-wrap: break-word;
}
/* rendre le disabled plus visible */
:disabled {
    opacity: 0.8;
    cursor: not-allowed;
}

The Incredible Overcomplexity of the Shadcn Radio Button

Donc on PEUT styler les boutons radio sans casser l'accessibilité ni recourir à des libs ou frameworks hippopotamesques.

Hop, dans mon snippetvamp.

La lecture de l'article est intéressante.


input[type="radio"] {
  /* Disable the browser's default radio button styles */
  appearance: none;
  margin: 0;

/ Recreate the circle container / border: 1px solid black; background: white; border-radius: 50%;

/ Center our dot in the container / display: inline-grid; place-content: center;

/ Use a pseudo-element to display our "dot" / &::before { content: ""; width: 0.75rem; height: 0.75rem; border-radius: 50%; }

/ And display it when the radio button is checked / &:checked::before { background: black; } }

via https://www.devenet.eu/links/?_X-l9g

L'animation dans les interfaces numériques : moins, mais mieux. - Alsacreations

Résume :

Amen.

  • On définit le but : est-ce que c'est pour expliquer, guider, ou juste faire plaisir ?
  • On pense à la fréquence : plus c'est utilisé, moins ça doit bouger
  • On reste rapide, toujours sous les 300 ms
  • On donne le contrôle, en respectant toujours les préférences de la personne qui utilise l'interface.

(oui, l'image de titre est bien un troll )

PluXml plugin Starter v1.3

Pour toute personne voulant faire des plugins pour pluXML, j'ai mis à jour mon générateur de plugin: pour rappel, il sert à créer tous les fichiers et sous-dossiers préconfigurés selon vos choix.

  • J'ai mis à jour les hooks,
  • j'ai ajouté la gestion du scope (admin/site)
  • j'ai ajouté la possibilité de traduire les textes du frontend
  • j'ai changé un détail assez chiant: il ne plaçait pas les fichiers du zip dans le dossier du plugin...
  • J'ai amélioré la lisibilité du code... (un peu)

Je ne m'étends pas plus, vu que je dois être le seul à utiliser ça, mais bon.

Au cas où,

PHP - Notes perso sur Imagick 2 - ImagickDraw... si on dessinait ?

Deuxième épisode de mes notes perso sur la bibliothèque Image magic pour évoquer la classe ImagickDraw qui, comme son nom l'indique, permet de dessiner avec Imagick. ( 1er épisode )

On va se limiter à des usages basiques parce que la lecture du sommaire suffit à imaginer des possibilités certes alléchantes mais totalement hors de propos en ce qui me concerne (courbes de bézier etc)

Spoiler: c'est nettement moins intuitif et simple que pour le traitement d'image... l'écart entre Imagick et GD dans le domaine du tracé n'est plus si évident: ça mériterait de faire un classe pour simplifier tout ça... ( /me se jette sur son bujo pour griffonner spasmodiquement)

Préambule

Cette classe crée un objet servant d'instructions à appliquer ensuite à un objet Imagick.

On partira du principe que vous avez fait des instances des classes comme suit:

$im=new Imagick(); # l'image dans laquelle vous allez appliquer l'objet ImagickDraw
$draw=new ImagickDraw();

Ajouter un texte

Fixer les caractéristiques

  • $draw->setFont(fonte); : sélectionne la fonte à utiliser
  • $draw->setFontSize(taille); : définit la taille en pixels
  • $draw->setFillColor(couleur);: définit la couleur de fond (normalement, couleur est un objet ImagickPixel, voir 1er épisode mais on peut passer une chaîne au format de couleur CSS )
  • $draw->setTextAlignment(alignement); : une des constantes d'alignement imagick::ALIGN_LEFT imagick::ALIGN_CENTER Imagick::ALIGN_RIGHT
  • $draw->setGravity(Imagick::GRAVITY_CENTER); centre le texte dans sa boîte (horizontal et vertical)
  • $draw->setTextDecoration(decoration): une des constantes de décoration imagick::DECORATION_UNDERLINE imagick::DECORATION_OVERLINE imagick::DECORATION_LINETROUGH et bien d'autres (comme du... bruit ?!).
  • $draw->setTextAntialias(true);: ajouter de l'antialias
  • l'espacement :
    • entre les mots : $draw->setTextInterwordSpacing(taille)
    • entre les lignes : $draw->setTextInterlineSpacing(taille)

Tracer le texte

  • $draw->annotation(x,y,texte) : trace un texte dans la police sélectionnée
  • $im->annotateImage( $draw, 0, 0, 0, $fontName ); : ajoute le texte à l'image.

Obtenir des infos utiles

  • obtenir la liste des polices disponibles: $im->queryFonts($pattern = "*") 🆒 on peut filtrer avec une pattern à la façon de glob().
  • obtenir les infos fixées par setXXX : getXXX ... ainsi on a getFont(), getFontSize() etc...
  • obtenir les dimensions de la boîte de texte: $im->queryFontMetrics($draw, text); on récupère un tableau comme ci-dessous
  • 
    Array
    (
        [characterWidth] => 9
        [characterHeight] => 9
        [ascender] => 9 # la taille au-dessus de la baseline
        [descender] => -2 # la taille sous la baseline
        [textWidth] => 71
        [textHeight] => 10
        [maxHorizontalAdvance] => 12
        [boundingBox] => Array
            (
                [x1] => 0
                [y1] => -2
                [x2] => 6.890625
                [y2] => 7
            )
        [originX] => 70
        [originY] => 0
    )
    

    Dessiner des formes

    Fixer les caractéristiques

    • opacité du trait : $draw->setStrokeOpacity(0-1);
    • couleur du trait : $draw->setStrokeColor(couleur);
    • épaisseur du trait : $draw->setStrokewidth(nb);
    • type de trait : $draw->setStrokeDashArray() Le motif semble être plein de possibilités car on peut le définir très spécifiquement et même utiliser une image comme motif (->setStrokePatternURL)
    • couleur de remplissage : $draw->setFillColor(couleur);

    Formes

    • cercle : $draw->circle ($x, $y, $x + $r, $y);
    • ellipse : $draw->ellipse($ox,$oy,$rx,$ry,$start,$end);
    • point : $draw->point ($x, $y);
    • polygone : $draw->polygon ($tableau_de_coordonnées); : array( 'x' => 3, 'y' => 4 ), array( 'x' => 2, 'y' => 6 )
    • ligne brisée : $draw->polyline ($tableau_de_coordonnées); : array( 'x' => 3, 'y' => 4 ), array( 'x' => 2, 'y' => 6 )
    • rectangle : $draw->rectangle ($x, $y, $x2, $y2); )
    • rectangle arrondi: $draw->roundRectangle ($x, $y, $x2, $y2,$rayonx,$rayony);

    Exemple

    Pour écrire un texte dans une image:

    
    $text='pipo et mollo';
    $im=new Imagick();
    $draw=new ImagickDraw();
    //var_dump($im->queryFonts('*'));exit;
    $draw->setFont( 'Courier' );
    $draw->setFontSize( 20 );
    $draw->setFillColor( 'black' );
    $draw->setTextAntialias(true);
    $metrics = $im->queryFontMetrics($draw, $text);
    $draw->annotation(0,$metrics['ascender'],$text);
    $im->newImage( 300, 20, 'lightblue');
    $im->drawImage($draw);
    $im->setImageFormat( 'png' );
    header('Content-type: image/jpeg');
    exit($im);  
    
    ce qui donne cette image
    index2.png
    C'est pas ouf...

    Il serait intéressant de pousser les tests mais là, j'ai pas le temps...

    Peut-être reprendrais-je des trucs existant avec tout ça ( scriptopic, RoR, Stamp mematic etc etc.)

    Et c'est là que Bronco prit  conscience de la quantité de   merdes affligeantes qu'il avait  codées sur un coup de tête  à la va-comme-je-te-pousse   et qu'il avait infligées à tous...

    Cadeau du lundi: pas un, pas deux mais TROIS plugins Pluxml... (et oui !)

    Bon, il ne s'agit pas de trois   plugins que j'aurais fait en   une fois, mais de trois plugins   codés à des moments différents   et que j'avais oublié de partager   jusque-là...

    ok

    🥇 Plugin N°1 : uniquePagePreview

    Si toi aussi t'en as marre que le bouton Aperçu de la page article t'ouvre à chaque fois un nouvel onglet aboutissant rapidement à une accumulation visuellement insupportable du nombre d'échecs qu'il te faut avant de parvenir à un billet un tant soit peu abouti ? Alors ce ... «plugin» est pour toi: il se contente de changer le «_blank» de l'attribut onclick du bouton en «article_preview»... et ça, tu vois, ça change tout...

    Désormais, la visualisation de l'article se fera toujours dans le même onglet (ouvert lors de la première visualisation)

    ⚡ Téléchargement direct du ZIP: https://repo.warriordudimanche.net/ZIPFILES/uniquePagePreview.zip

    🥈 plugin N°2 : resizeArticleTextarea

    Un truc qui me chiffonnait dans la rédaction d'articles un peu longs, c'était:

    1. de ne jamais voir l'article en entier pendant la rédaction
    2. de passer mon temps à défiler DANS le textarea en plus de défiler DANS la page...
    Ok, ça fait deux trucs...

    Grâce à ce plugin, on ne passe plus son temps à défiler QUE dans la page

    En effet, il redimensionne les textareas de la page article en fonction de leur contenu. La zone de texte grandit avec le volume de texte tapé dedans.

    ⚡ Téléchargement direct du ZIP: https://repo.warriordudimanche.net/ZIPFILES/resizeArticleTextarea.zip

    🥉 plugin N°3 : adminPanel

    Un plugin dérivé d'un de mes anciens qui s'avérait obsolète avec la nouvelle maquette. Il permet d'afficher un menu visible uniquement quand l'admin est connecté. Ce menu regroupe plusieurs icônes:

    Capture du 2022-11-14 14-35-06.png

    • un lien vers l'espace admin
    • un lien vers un tag particulier: je m'en sers pour accéder aux articles publiés pour lecture ultérieure sous le tag «riditleteur»
    • un lien vers la page commentaires avec un décompte des commentaires non lus
    • un bouton de déconnexion

    Il affiche de plus un lien sur chaque article pour éditer directement ce dernier (pratique pour corriger ou mettre à jour un article)

    Ces deux fonctions sont accessibles via deux hooks, «editArticleIcon» et «adminPanel», dont il faut placer l'appel dans les pages header.php et articles.php du thème

    Une page de config permet de redéfinir les icônes et texte des boutons ainsi que le tag du raccourci.

    Capture du 2022-11-14 14-43-09.png

    ⚡ Téléchargement direct du ZIP: https://repo.warriordudimanche.net/ZIPFILES/AdminPanel.zip

    Si ça peut vous servir, c'est cadeau !

    PluXml plugin Starter

    Je viens de procéder à une mise à jour de pluXml plugin starter:

    1. ajout des hooks des dernières versions de pluXML
    2. ajout d'une fonction permettant de filter les hooks afin de les retrouver plus facilement
    3. ajout d'icônes unicode sur les boutons de sélection des hooks (plus faciles à identifier
    4. dans l'optique d'en finir avec github, j'ai changé le lien de github en lien de téléchargement direct de la version courante, comme j'avais fait avec googol.

    Googol - Mise à jour

    Quand STARTPAGE se met à utiliser un content-encoding en gzip sans prévenir, ça fait cafouiller Googol qui n'y retrouve plus ses petits regexes.

    Heureusement, en ajoutant

    curl_setopt($ch,CURLOPT_ENCODING , "gzip");

    dans la méthode de curl, on répare tout...

    ouf.

    TV backlight compensation

    Superbe travail en effet: concevoir un shader pour compenser les irrégularités de luminosité d'une télé vieillissante. Je suis fan du principe et pour une fois que le fait que les télés soient devenus des ordinateurs peut-être utile au lieu d'emmerdant...

    Via https://sebsauvage.net/links/?HLJbSw


    Fil RSS des articles