<?xml version="1.0" encoding="UTF-8"?>
	<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Agence web Adilade</title>
<link>https://www.adilade.fr/</link>
<description>Agence web Adilade</description>
<pubDate>Fri, 10 Apr 2026 07:51:55 +0200</pubDate>
<language>fr-FR</language>
<item>
<title>Adilade MiniCMS : un site web statique modifiable !</title>
<link>https://www.adilade.fr/blog/minicms-site-web-statique-modifiable/</link>
<pubDate>Mon, 23 Mar 2026 00:40:00 +0100</pubDate>
<description><![CDATA[<p>Un site web statique modifiable, une idée farfelue ! Pas tant que cela ! En effet, pourquoi déployer l'artillerie lourde pour un site web de quelques pages avec des mises à jour peu fréquentes ?</p><h2>Le constat</h2>
<p>Il arrive parfois que l'installation d'un <abbr lang="en" title="Content Management System">CMS</abbr> complet comprenant une base de données, une zone d'administration, un contrat de maintenance et avec une prise en main parfois complexe, pour seulement quelques pages, ne soit pas nécessaire. La simplicité a souvent du bon. Mais, la possibilité d'effectuer facilement des modifications ciblées sur un site vitrine/statique est un atout non négligeable.</p>
<h2>Le compromis du MiniCMS</h2>
<p>Il permet de modifier simplement et aisément certains <strong>contenus textuels</strong> (prédéfini à l'avance) d'un site web statique. Il est facile à utiliser et à prendre en main sans besoin de formation.</p>
<ul>
<li>Fonctionne sans base de données</li>
<li>Volontairement minimaliste</li>
<li>Gestion de texte brut uniquement</li>
<li>Permet la modification de blocs de contenu</li>
<li>Permet l'ajout, la suppression et la réorganisation d'éléments</li>
<li>Possibilité de gérer des liens</li>
<li>Compatible mobile</li>
<li>Possibilité d'implémentation sur des sites web pré-existant (sous réserve de compatibilité technique)</li>
</ul>
<h2>Pour quels usages ?</h2>
<p>Cette solution s'adresse avant tout aux petites entreprises, artisans ou commerçants qui n'ont pas de mise à jour fréquente à effectuer : instituts de beauté, salon de coiffure, restaurant, restauration rapide, artisans du bâtiment, artisanat, hébergement touristique, etc.</p>
<h3>Quelques exemples de contenus modifiables :</h3>
<ul>
<li>Menu ou carte d'un restaurant</li>
<li>Liste de prestations</li>
<li>Horaires d'ouverture, vacances ou annonce</li>
<li>Grille tarifaire</li>
</ul>
<p class="ambloc"><a href="https://www.youtube.com/watch?v=LpW_QfqMYwk" rel="external">Regarder la vidéo sur YouTube</a></p>]]></description>
<guid>https://www.adilade.fr/blog/minicms-site-web-statique-modifiable/</guid>
</item>
<item>
<title>Adilade fête ses 20 ans !</title>
<link>https://www.adilade.fr/blog/adilade-fete-20-ans/</link>
<pubDate>Wed, 04 Feb 2026 00:04:00 +0100</pubDate>
<description><![CDATA[<p>2006 - 2026 : 20 ans de passion pour le web !</p><h2>Un web mature et plus complexe</h2>
<p>Passé d'un quasi-artisanat en 2006, la conception de site web devient une discipline d'ingénierie : plus de complexité, plus de compétences - performance, accessibilité, sécurité, etc.</p>
<ul>
<li>Les <abbr lang="en" title="Cascading Style Sheets">CSS</abbr> ont mûri, au point de se rapprocher d'un langage de programmation.</li>
<li>Tailwind ou Bootstrap, Vue.js ou Angular - de nombreux frameworks sont apparus, pour le meilleur et pour le pire (dont une certaine uniformité). Pourtant, le parti pris de la conception en langages natifs limite les dépendances et assure une plus grande universalité des projets dans le temps.</li>
<li>Les performances et les <span lang="en">Core Web Vitals</span> sont devenus la norme.</li>
<li>L'accessibilité s'intègre peu à peu dans les projets, même si son adhésion reste très lente.</li>
<li>On peut regretter la généralisation des <span lang="en">builders</span> qui produisent un code assez immonde, on se croirait revenu au temps de FrontPage ou DreamWeaver.</li>
</ul>
<h2>L'<abbr title="Intelligence Artificielle">IA</abbr> joue les trouble-fête</h2>
<p>Arrivé en trombe il y a à peine quelques années, l'<abbr title="Intelligence Artificielle">IA</abbr> s'immisce désormais dans tous les processus créatifs et techniques : code, graphisme, design, tests, etc. Mal utilisée, cela produit du code peu propre et des sites web bancals. Bien utilisée, elle augmente la productivité, la créativité tel un assistant infatigable. Le futur se jouera sur l'expérience et l'expertise.</p>
<h2>La passion et le futur</h2>
<p>La passion est essentielle, c'est le moteur qui fait vibrer le web. Et le futur s'annonce stimulant à tout point de vue : plus la complexité augmente, plus l'innovation constante et l'expertise deviennent nécessaires.</p>]]></description>
<guid>https://www.adilade.fr/blog/adilade-fete-20-ans/</guid>
</item>
<item>
<title>Voeux 2026</title>
<link>https://www.adilade.fr/blog/voeux-2026/</link>
<pubDate>Thu, 01 Jan 2026 01:30:00 +0100</pubDate>
<description><![CDATA[<p>Meilleurs Vœux 2026</p>]]></description>
<guid>https://www.adilade.fr/blog/voeux-2026/</guid>
</item>
<item>
<title>De l&#039;usage de l&#039;IA en production</title>
<link>https://www.adilade.fr/blog/usage-ia-production/</link>
<pubDate>Tue, 16 Sep 2025 06:06:00 +0200</pubDate>
<description><![CDATA[<p>L'intelligence artificielle s'est immiscée, en quelques années à peine, dans les processus créatifs et techniques : texte, image, graphisme, codage, et plus encore. Ces avancées technologiques sont parfois difficiles à intégrer en entreprises et posent des questions cruciales sur le long terme.</p><h2>Intégration dans le flux de production</h2>
<p>Passer de la découverte à l'intégration dans les méthodes de travail n'est pas chose aisée. Outre le fait que la sortie de nouveaux modèles et de nouvelles <abbr title="Intelligence Artificielle">IA</abbr> est fréquente, l'assimilation efficace au quotidien peut prendre du temps : tests, vérifications, qualité, modification des processus de création, etc. Il faut souvent faire un bilan régulier : quelle réelle plus-value ? Quelle amélioration de la productivité ou de la qualité ?</p>
<h2>Des images (encore) très marquées</h2>
<p>Première application des <abbr title="Intelligence Artificielle">IA</abbr> génératives, la création d'image s'améliore progressivement. Pour ce qui est du design, elles peuvent servir de base de travail et éviter un long processus de réflexion et d'essais. Parfait pour tester rapidement des idées ou servir de support à une vectorisation. À noter que les <abbr title="Intelligence Artificielle">IA</abbr> génératives sont très performantes dans les "associations de couleurs".</p>
<p>Pour les images de type "photo réaliste", le résultat reste encore fréquemment très marqué. Il faut régulièrement retoucher la colorimétrie, sans compter les hallucinations qui persistent parfois, en particulier sur les yeux.</p>
<p>Un exemple de "photo réaliste" générée par 3 <abbr title="Intelligence Artificielle">IA</abbr> différentes et qui utilisent le même prompt, il s'agit d'une photo destinée à réaliser des <span lang="en">mockup</span>.</p>
<p><img class="imgcenter am-img-medium amNonEditable" src="https://www.adilade.fr/media/img/3-photos-de-femmes-rousses-generees-par-intelligence-artificielle-medium.jpg?ver=1757980686" alt="" width="1200" height="600" sizes="(min-width: 1919px) 100vw, (min-width: 1200px) 1199px, 100vw" decoding="async" srcset="https://www.adilade.fr/media/img/3-photos-de-femmes-rousses-generees-par-intelligence-artificielle-thumb.jpg?ver=1757980686 440w, https://www.adilade.fr/media/img/3-photos-de-femmes-rousses-generees-par-intelligence-artificielle-medium.jpg?ver=1757980686 1200w, https://www.adilade.fr/media/img/3-photos-de-femmes-rousses-generees-par-intelligence-artificielle-large.jpg?ver=1757980686 2400w, https://www.adilade.fr/media/img/3-photos-de-femmes-rousses-generees-par-intelligence-artificielle.jpg?ver=1757980686 4800w" loading="lazy"></p>
<p>Le vrai problème vient de l'uniformisation des images, elles ont tendance à toutes "se ressembler", c'est assez flagrant sur les réseaux sociaux et maintenant sur des affiches ou des illustrations. En réalité, les images générées par <abbr title="Intelligence Artificielle">IA</abbr> présentent souvent des caractéristiques similaires : mêmes palettes de couleurs, mêmes compositions, même esthétique "lissée".</p>
<h2>Code : après l'euphorie, la désillusion</h2>
<p>L'intelligence artificielle est très efficace dans le codage : en l'utilisant comme métamoteur de recherche, on évite des longues heures de recherche dans la documentation, ou sur des forums spécialisés. L'inconvénient, c'est de ne pas réellement comprendre ce que l'on fait, avec tous les risques que cela pose en termes de qualité, de sécurité et de maintenabilité du code. Aujourd'hui, on arrive à un point ou des <a href="https://emploi.developpez.com/actu/375760/Des-codeurs-sont-embauches-pour-reparer-les-erreurs-commises-par-l-IA-qui-provoque-leurs-licenciements-specialiste-en-nettoyage-de-code-genere-par-l-IA-est-le-nouveau-titre-d-emploi-en-vogue-sur-les-CV/" rel="external">codeurs sont embauchés pour réparer les erreurs commises par l'<abbr title="Intelligence Artificielle">IA</abbr></a>.</p>
<h3>La question du <span lang="en">vibe coding</span></h3>
<p>Avec le <span lang="en">vibe coding</span>, on touche à l'expérience extrême : coder des sites web ou des applications sans rien n'y connaître (c'est-à-dire sans relire le code, le corriger, l'implémenter, le tester...). Ce genre de projet tourne quasi systématiquement à la catastrophe.</p>
<h2>Des avantages indéniables</h2>
<p>L'usage de l'<abbr title="Intelligence Artificielle">IA</abbr>, dans un process bien encadré, permet d'accélérer la productivité : résumé de contenu et rédaction de texte, génération d'images, qui peuvent servir d'ébauche, ou être utilisées comme base de travail. Codage plus rapide : <span lang="en">snippets</span> ou recherche de bug. Accès à l'apprentissage et à des domaines d'expertises plus élevés.</p>
<h2>Les inconvénients et risques à long terme</h2>
<ul>
<li><strong>Uniformisation</strong> : c'est déjà flagrant sur les images, mais aussi sur les textes ou le code. L'homogénéisation des contenus provoque une réelle menace pour l'identité de marque, et la différenciation devient plus difficile. Reproduire la complexité et la nuance, n'est pas chose aisée. Pour le code, cela pourrait aller jusqu'à un appauvrissement des écosystèmes et à des vulnérabilités plus fréquentes.</li>
<li><strong>Perte de compétence</strong> : à force d'utiliser l'<abbr title="Intelligence Artificielle">IA</abbr>, les développeurs pourraient perdre des compétences ou de l'expertise. Savoir coder avant d'utiliser l'intelligence artificielle constitue une condition préalable incontournable. Cela pourrait être pire avec les nouvelles générations, biberonnées à ChatGPT durant toutes leurs études !</li>
<li><strong>Dépendance</strong> : être accoutumé à un outil devient problématique si l'on ne conserve pas le savoir-faire humain. En cas de dysfonctionnement, tout est bloqué !</li>
</ul>
<p>À cela s'ajoute le manque de données pour l'entraînement des <abbr title="Intelligence Artificielle">IA</abbr> (elles ont déjà "digéré" tout ce que l'humain a produit) et le contenu de masse généré automatiquement commence à "polluer" le web.</p>
<h2>Conclusion</h2>
<p>Il y a fort à parier que l'<abbr title="Intelligence Artificielle">IA</abbr>, comme tous les outils précédents, finissent par s'intégrer dans les processus de production en conservant un certain équilibre : automatiser et accélérer la conception, tout en préservant l'expertise humaine pour la créativité, la stratégie et l'innovation. Utiliser l'intelligence artificielle comme un copilote, et non en remplacement de la compétence humaine.</p>]]></description>
<guid>https://www.adilade.fr/blog/usage-ia-production/</guid>
</item>
<item>
<title>Passer de Sass à Vanilla CSS</title>
<link>https://www.adilade.fr/blog/passer-de-sass-a-vanilla-css/</link>
<pubDate>Thu, 06 Mar 2025 00:06:00 +0100</pubDate>
<description><![CDATA[<p>Le préprocesseur <abbr lang="en" title="Syntactically awesome stylesheets">Sass</abbr> est un outil formidable, ne nous en cachons pas, mais les dépendances nécessaires pour la compilation et l'évolution des <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr> offre l'opportunité de revenir à l'utilisation de <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr> pur, ou Vanilla <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr>.</p><p>Les <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr> ont énormément évoluées ces dernières années et intègre en natif et avec un large support beaucoup de fonctionnalité <abbr lang="en" title="Syntactically awesome stylesheets">Sass</abbr>. Outre, la suppression à une dépendance pour la compilation, l'utilisation des standards natifs offre une meilleure maintenabilité pour le futur. Quelques éléments de base pour effectuer la transition de <abbr lang="en" title="Syntactically awesome stylesheets">Sass</abbr> vers Vanilla <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr> en douceur !</p>
<h2>Les Variables</h2>
<p>Déjà largement utilisées, les variables sont aisément implémentables, même s'il ne faut pas en abuser. Car, là où <abbr lang="en" title="Syntactically awesome stylesheets">Sass</abbr> remplace les variables par leurs valeurs respectives, ce n'est pas le cas en <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr>.</p>
<h3>Les variables en <abbr lang="en" title="Syntactically awesome stylesheets">Sass</abbr></h3>
<pre class="language-sass"><code>$color-green: #25653B;
$a11y-lineheight: 2.55rem;

main p {
	font-color: $color-green;
	line-height: $a11y-lineheight; 
}</code></pre>
<h3>Les variables en <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr></h3>
<pre class="language-css"><code>:root {
	--color-green: #25653B;
	--a11y-lineheight: 2.55rem;
}

main p {
	font-color: var(--color-green);
	line-height: var(--a11y-lineheight); 
}</code></pre>
<h2>Imbrication ou <span lang="en">Nesting</span></h2>
<p>C'est une fonctionnalité extrêmement intéressante et puissante de <abbr lang="en" title="Syntactically awesome stylesheets">Sass</abbr> qui évite des répétitions et une certaine lourdeur du code. Et, bonne nouvelle, cette fonctionnalité est déjà très largement supportée en <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr> (plus de 90%).</p>
<h3>Imbrication en <abbr lang="en" title="Syntactically awesome stylesheets">Sass</abbr></h3>
<pre class="language-sass"><code>.card {
    border: 1px solid #ddd;
	a {
		color: firebrick; 
		&amp;:hover {color: steelblue;}
	}
	p:last-child {margin-bottom: 1em;}
}</code></pre>
<h3>Imbrication en <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr></h3>
<p>Note : pour l'utilisation du sélecteur "&amp;", vous pouvez vous référer à l'article <a href="https://developer.chrome.com/docs/css-ui/css-nesting?hl=fr">Imbrication <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr></a>.</p>
<pre class="language-css"><code>.card {
    border: 1px solid #ddd;
	&amp; a {
		color: firebrick; 
		&amp;:hover {color: steelblue;}
	}
	&amp; p:last-child {margin-bottom: 1em;}
}</code></pre>
<h2>Les mixins</h2>
<p><code>@mixin</code> couplé à <code>@include</code> permet de définir un style de base réutilisable. Mais le code va être systématiquement réinjecté, ce qui alourdit la feuille de style.</p>
<h3>En <abbr lang="en" title="Syntactically awesome stylesheets">Sass</abbr></h3>
<pre class="language-sass"><code>@mixin card {
	border: 1px solid #ddd;
	a {
		color: firebrick; 
		&amp;:hover {color: steelblue;}
	}
	p:last-child {margin-bottom: 1em;}
}

.card--home {
  @include card;
  background-color: aliceblue;
}

/* Avec variable */
@mixin card($bg: azure) {
	border: 1px solid #ddd;
	background-color: $bg;
	a {
		color: firebrick; 
		&amp;:hover {color: steelblue;}
	}
	p:last-child {margin-bottom: 1em;}
}

.card--home {
	@include card(aliceblue);
}</code></pre>
<h3>En <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr></h3>
<p>En utilisant la technique <abbr lang="en" title="Block Element Modifier">BEM</abbr> et un sélecteur d'attribut, on arrive au même résultat. Avec, en bonus, un résultat plus léger, le code du bloc n'ayant pas besoin d'être systématiquement réinjecté.</p>
<pre class="language-css"><code>[class^="card"] {	
	border: 1px solid #ddd;
	&amp; a {
		color: firebrick; 
		&amp;:hover {color: steelblue;}
	}
	&amp; p:last-child {margin-bottom: 1em;}
}
.card--home {
	background-color: aliceblue;
}

/* En reprenant l'idée de la variable */
:root {
	--color-bg-card: azure; /* Couleur de base */
}
[class^="card"] {	
	border: 1px solid #ddd;
	background-color: var(--color-bg-card);
	&amp; a {
		color: firebrick; 
		&amp;:hover {color: steelblue;}
	}
	&amp; p:last-child {margin-bottom: 1em;}
}
.card--home {
	--color-bg-card: hotpink; /* Couleur de remplacement */
}</code></pre>
<h2>La règle <code>@import</code></h2>
<p>La fonction <code>@import</code> qui permet d'inclure des fichiers est supportée en <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr> depuis bien longtemps. Mais, là où <abbr lang="en" title="Syntactically awesome stylesheets">Sass</abbr> importe et compile le contenu des fichiers, ce n'est pas le cas en <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr>. Ce qui a pour conséquence d'augmenter le nombre de requêtes auprès du serveur (1 <code>@import</code> = 1 requête). Pourtant, il existe une astuce : lors de la minification, il est possible d'intégrer le contenu des fichiers importés, notamment en utilisant <code>postcss-import</code> (généralement inclut dans les outils de minification) avec un fonctionnement identique à celui de <abbr lang="en" title="Syntactically awesome stylesheets">Sass</abbr>.</p>
<h3>Exemple en <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr></h3>
<pre class="language-css"><code>/* ==Core */
@import "folder/variables.css";
@import "folder/reset.css"; 

/* ==Utilities &amp; Components */
@import "folder/helpers.css";
@import "folder/skip.css";</code></pre>
<h2>Les pseudo-classes <code>:is</code> et <code>:has</code></h2>
<p>Ces pseudo-classes permettent de cibler précisément des éléments et de simplifier l'écriture : fort utile à bien des égards. Le support complet de <code>:is</code> et <code>:has</code> n'est que très récent (<span lang="en">Baseline 2023</span>) !</p>
<h3>Exemples en <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr></h3>
<pre class="language-css"><code>/* Sans les pseudo-classes */
.card h2, 
.card cite {
	background-color: steelblue;
}
/* Avec les pseudo-classes */
.card :is(h2, cite) {
	background-color: steelblue;
}</code></pre>
<p>On cible tous les paragraphes, enfants de la classe <code>.card</code>, qui contiennent la balise <code>cite</code>.</p>
<pre class="language-css"><code>.card p:has(cite) {
	background-color: steelblue;
}</code></pre>
<h2>Conclusion</h2>
<p>Avec une approche méthodique et une planification soigneuse, le passage de <abbr lang="en" title="Syntactically awesome stylesheets">Sass</abbr> à Vanilla <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr> peut être réalisé de manière efficace. Sur des projets extrêmement complexes nécessitant des fonctions spécifiques ou des boucles, cela peut être un peu plus long, car il n'y a pas encore d'équivalent en pur <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr>, il faudra, pour cela, réintégrer le code compilé.</p>]]></description>
<guid>https://www.adilade.fr/blog/passer-de-sass-a-vanilla-css/</guid>
</item>
<item>
<title>Accessibilité : quelles différences entre le RGAA et la norme européenne EN 301 549</title>
<link>https://www.adilade.fr/blog/accessibilite-differences-rgaa-norme-europeenne-en-301-549/</link>
<pubDate>Mon, 10 Feb 2025 00:02:00 +0100</pubDate>
<description><![CDATA[<p>L'accessibilité numérique est encadrée par deux référentiels majeurs en Europe : le <abbr title="Référentiel Général d'Amélioration de l'Accessibilité">RGAA</abbr>, spécifique à la France, et la norme EN 301 549, applicable à l'échelle européenne. Ces deux cadres présentent des différences significatives : périmètre d'application, critères techniques et obligations.</p><h2>Le <abbr title="Référentiel Général d'Amélioration de l'Accessibilité">RGAA</abbr> français</h2>
<ul>
<li>Il s'applique aux sites web, applications mobiles, documents bureautiques et au mobilier urbain numérique</li>
<li>Il comporte 106 critères - précis et documentés</li>
<li>Le périmètre d'application va des organismes publics (état, collectivités territoriales, etc) aux entreprises privées dont le chiffre d'affaires en France est supérieur à 250 millions d'euros</li>
<li>Il nécessite une déclaration d'accessibilité, la mention de la conformité en page d'accueil et un schéma pluriannuel</li>
<li>Des sanctions pouvant aller jusqu'à 20 000 euros</li>
<li>Il est entré en application (en théorie !)</li>
</ul>
<h2>La norme européenne EN 301 549</h2>
<ul>
<li>Un champ d'application très large : sites web (y compris les outils d'édition des systèmes de gestion de contenu), applications mobiles, documents bureautiques, système de communication audio et vidéo, dispositifs matériels (bornes interactives, terminaux de paiement, etc), logiciels, documentation et services d'assistance, accès aux services d'urgence</li>
<li>Des critères et tests spécifiques à chaque champ d'application</li>
<li>Le périmètre d'application va des organismes publics (état, collectivités territoriales, etc) aux entreprises privées de plus de 10 salariés ou dont le chiffre d'affaires est supérieur à 2 millions d'euros</li>
<li>Il nécessite une déclaration d'accessibilité pour tous les supports numériques, la mention de la conformité et un schéma pluriannuel</li>
<li>Des sanctions pouvant aller jusqu'à 50 000 euros</li>
<li>Entre en application en juin 2025 pour les nouveaux contenus et produits et juin 2030 pour les contenus et produits déjà existants</li>
</ul>
<h2>Conclusion</h2>
<p>Le <abbr title="Référentiel Général d'Amélioration de l'Accessibilité">RGAA</abbr> et la norme EN 301 549 sont tous les deux basés sur les <abbr lang="en" title="Web Content Accessibility Guidelines">WCAG</abbr>, mais la norme européenne propose un cadre plus large en contrepartie de plus de flexibilité dans les méthodes d'évaluation. Cette dernière est une référence pour les marchés publics européens.</p>]]></description>
<guid>https://www.adilade.fr/blog/accessibilite-differences-rgaa-norme-europeenne-en-301-549/</guid>
</item>
<item>
<title>Voeux 2025</title>
<link>https://www.adilade.fr/blog/voeux-2025/</link>
<pubDate>Wed, 01 Jan 2025 01:04:00 +0100</pubDate>
<description><![CDATA[<p>Meilleurs Vœux 2025</p>]]></description>
<guid>https://www.adilade.fr/blog/voeux-2025/</guid>
</item>
<item>
<title>Pourquoi et comment construire son propre framework CSS</title>
<link>https://www.adilade.fr/blog/pourquoi-comment-construire-propre-framework-css/</link>
<pubDate>Sun, 05 May 2024 01:06:00 +0200</pubDate>
<description><![CDATA[<p>Pourquoi repartir de zéro alors qu'il existe pléthore de <span lang="en">frameworks</span> <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr> : Pure, Bootstrap, Tailwind, Materialize, Skeleton, Bulma - pour n'en citer que quelques-uns. Petit tour des avantages et inconvénients !</p><p>Après avoir longtemps travaillé avec KNACSS (obsolète depuis), la question d'une base de travail pour mes projets se posait. Construire son propre <span lang="en">framework</span> <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr> à partir de zéro peut sembler un peu fou, mais le temps investit au départ est largement compensé par la compréhension globale et sa facilité de mise en œuvre dans des projets concrets !</p>
<h2>Acquérir des compétences</h2>
<p>C'est l'un des premiers avantages : travailler sur ce type de projet permet l'acquisition de compétences spécifiques, une compréhension plus approfondie des subtilités des <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr> et une expérience d'apprentissage des plus agréable - sans doute plus intéressante que n'importe quelle formation !</p>
<h2>Adapté à vos besoins et votre méthode de travail</h2>
<p>Les <span lang="en">frameworks</span> existants sont généralistes et prévoient un support large et de nombreux cas de figure (par exemple un système de grille à 12 colonnes, pour ma part, je n'ai jamais dépassé 5) et sont donc souvent plus lourd, même en n'incluant que les composants que vous utilisez.<br>À titre d'exemple, je n'ai pas ajouté le support de <code>progress</code> que je n'ai jamais employé.</p>
<h2>On commence par définir la structure</h2>
<p>Vous pouvez vous inspirer de projets existants pour créer votre propre structure (en <abbr lang="en" title="Syntactically Awesome StyleSheets">SASS</abbr>, Less ou <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr>). Généralement, la base se constitue de variables, d'un mini <span lang="en">reset</span>, d'une base pour la typographie et l'espacement, sans oublier l'accessibilité.<br>Une seconde partie se constitue de composants et d'utilitaires comme les formulaires, les tables, un système de grille, etc.<br>Le but est de rester le plus minimaliste possible et de n'y inclure que ce que vous utilisez régulièrement.</p>
<p>Voici la structure de mon projet en <abbr lang="en" title="Syntactically Awesome StyleSheets">SASS</abbr> - c'est une méthode parmi d'autre, à adapter selon vos besoins et votre méthode de travail.</p>
<pre class="language-sass"><code>/* ==Core */
@import "variables.scss";
@import "reset.scss";  
@import "a11y.scss"; 
@import "layout.scss"; /* Typography &amp; Spacings */

/* ==Utilities &amp; Components */
@import "helpers.scss";
@import "skip.scss";
@import "tables.scss";
@import "pre.scss";
@import "video.scss"; 
@import "alerts.scss";
@import "badges.scss";
@import "details.scss"; /* Details &amp; Summary */
@import "burger.scss"; /* Menu */

/* ==Forms */
@import "forms.scss";
@import "formscheckbox.scss";
@import "formsselect.scss";
@import "formsradio.scss";
@import "formspassword.scss";
@import "buttons.scss";

/* ==Grids */
@import "grids.scss"; /* Grid 2-5 */

/* ==Utilities 2 */
@import "responsive.scss";
@import "print.scss"; 

/* ==Customer Styles  */
@import "customer.scss";</code></pre>
<h2>Quelques astuces</h2>
<ul>
<li>Limiter les couleurs au strict minimum.</li>
<li>Limiter l'usage des classes et des variables, surtout les variables <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr>.</li>
<li>Séparer au maximum les composants - en regardant le code ci-dessus, vous verrez un fichier séparé pour les champs de mots de passe (que je n'utilise pas sur tous les sites).</li>
<li>Intégrer l'accessibilité - avec une compatibilité <abbr lang="en" title="Web Content Accessibility Guidelines">WCAG</abbr> et <abbr title="Référentiel Général d'Amélioration de l'Accessibilité">RGAA</abbr> - dès le début de la conception (typographie, contraste, espacement des lignes et des paragraphes, etc).</li>
<li>Ajouter quelques classes utilitaires de base comme le centrage de textes et le centrage vertical à l'intérieur d'un bloc.</li>
<li>Ajouter des composants de base que vous utilisez régulièrement comme <span lang="en">ribbon, cards, hero section</span>, etc.</li>
</ul>
<h2>Tester et documenter (si besoin)</h2>
<p>Créer une page de test incluant tous les composants et différentes variations : bloc de texte, balises <code>h1</code> à <code>h6</code>, composants de formulaire, boutons, grilles, etc. Vous pourrez ainsi établir une stratégie pour effectuer des tests complets sur différents navigateurs et appareils (ordinateurs, mobiles et même téléviseurs).</p>
<h2>Maintenance</h2>
<p>Si votre code est bien conçu et structuré dès le départ, la maintenance reste assez faible - généralement 2 ou 3 fois par an : parfois quelques bugs visuels ou l'ajout de nouveautés <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr>. Par exemple, j'ai récemment ajouté le support de <code>aspect-ratio</code> pour les vidéos.</p>
<h2>Allez plus loin</h2>
<p>Si vous souhaitez développer encore un peu plus votre <span lang="en">framework</span>, vous pouvez ajouter de nombreux éléments en fonction de vos besoins :</p>
<ul>
<li>Boutons de partages.</li>
<li>Le support étendu du focus.</li>
<li>Le support des téléviseurs <abbr title="High Definition">HD</abbr> et 4K.</li>
<li>Des <span lang="en">templates</span> prêts à l'emploi avec <code>grid-template-areas</code> : articles, galerie d'images, page d'accueil, etc.</li>
</ul>]]></description>
<guid>https://www.adilade.fr/blog/pourquoi-comment-construire-propre-framework-css/</guid>
</item>
<item>
<title>Voeux 2024</title>
<link>https://www.adilade.fr/blog/voeux-2024/</link>
<pubDate>Mon, 01 Jan 2024 00:02:00 +0100</pubDate>
<description><![CDATA[<p>Meilleurs Vœux 2024</p>]]></description>
<guid>https://www.adilade.fr/blog/voeux-2024/</guid>
</item>
<item>
<title>Bard vs Claude 2 vs ChatGPT</title>
<link>https://www.adilade.fr/blog/bard-vs-claude-2-vs-chatgpt/</link>
<pubDate>Tue, 18 Jul 2023 02:11:00 +0200</pubDate>
<description><![CDATA[<p>Après une série de tests avec ChatGPT, j'ai voulu comparer les résultats avec ses 2 principaux concurrents : Claude 2 (Anthropic) et Bard de Google. Les prompts sont identiques à ceux utilisés avec ChatGPT.</p><p>Les résultats obtenus avec ChatGPT sont disponibles dans les trois précédents articles, je ne les remets pas ici !</p>
<h2><abbr lang="en" title="HyperText Markup Language">HTML</abbr> et <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr></h2>
<h3>Page web avec Bard</h3>
<pre class="language-markup"><code>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
  &lt;meta charset="UTF-8"&gt;
  &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
  &lt;title&gt;Web Agency Page Template&lt;/title&gt;
  &lt;link rel="stylesheet" href="style.css"&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;header&gt;
    &lt;div class="container"&gt;
      &lt;a href="index.html"&gt;&lt;img src="logo.png" alt="Logo"&gt;&lt;/a&gt;
      &lt;nav&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;a href="#"&gt;Home&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="#"&gt;About Us&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="#"&gt;Services&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="#"&gt;Contact Us&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/nav&gt;
    &lt;/div&gt;
  &lt;/header&gt;
  &lt;main&gt;
    &lt;div class="container"&gt;
      &lt;div class="content-left"&gt;
        &lt;h2&gt;About Us&lt;/h2&gt;
        &lt;p&gt;We are a web agency that specializes in creating beautiful and responsive websites. We have a team of experienced designers and developers who can help you bring your vision to life.&lt;/p&gt;
        &lt;p&gt;We offer a wide range of services, including web design, web development, SEO, and marketing. We are committed to providing our clients with the best possible service.&lt;/p&gt;
        &lt;p&gt;If you are looking for a web agency that can help you create a website that will wow your customers, then please contact us today.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class="content-right"&gt;
        &lt;img src="image.jpg" alt="Image"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/main&gt;
  &lt;footer&gt;
    &lt;div class="container"&gt;
      &lt;p&gt;Copyright &amp;copy; 2023 Web Agency&lt;/p&gt;
    &lt;/div&gt;
  &lt;/footer&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<pre class="language-css"><code>body {
  font-family: sans-serif;
  margin: 0;
  padding: 0;
}

header {
  background-color: #000;
  color: #fff;
  padding: 20px;
}

.container {
  max-width: 960px;
  margin: 0 auto;
}

.content-left {
  width: 60%;
}

.content-right {
  width: 40%;
}

img {
  max-width: 100%;
}

footer {
  background-color: #fff;
  padding: 20px;
}</code></pre>
<p>Un code <abbr lang="en" title="HyperText Markup Language">HTML</abbr> basique auquel il manque la balise <code>&lt;h1&gt;</code>.<br>La feuille de style est, elle aussi, ultra-minimaliste : pas de <span lang="en">reset</span>, le menu n'est pas en ligne, le contenu est bien adaptable, mais sans marge sur les côtés. Sans compter que les liens du menu sont de couleur bleue sur fond noir, pas très accessible !</p>
<h3>Page web avec Claude 2</h3>
<pre class="language-markup"><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Web Agency Template&lt;/title&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;link rel="stylesheet" type="text/css" href="style.css"&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;header&gt;
  &lt;div class="logo"&gt;
    &lt;img src="logo.png"&gt; 
  &lt;/div&gt;
  
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href="#"&gt;Home&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;About&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;Services&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;Portfolio&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;Contact&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
&lt;/header&gt;

&lt;div class="content"&gt;

  &lt;div class="column-1"&gt;
    &lt;h2&gt;Our Company&lt;/h2&gt;
    &lt;p&gt;Details about the web agency...&lt;/p&gt;
  &lt;/div&gt;
  
  &lt;div class="column-2"&gt;
    &lt;h2&gt;Our Services&lt;/h2&gt;
    &lt;p&gt;Details about services...&lt;/p&gt;
  &lt;/div&gt;

&lt;/div&gt;

&lt;footer&gt;
  &lt;p&gt;&amp;copy; Copyright Web Agency 2023&lt;/p&gt;
&lt;/footer&gt;

&lt;/body&gt;
&lt;/html&gt;</code></pre>
<pre class="language-css"><code>/* Responsive layout */
@media (min-width: 768px) {
  .content {
    display: flex;
  }
  
  .column-1 {
    flex: 1;
  }
  
  .column-2 {
    flex: 1;
  }  
}

/* Header */
header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 20px;
}

.logo img {
  width: 200px;
}

nav ul {
  list-style: none;
  display: flex;
}

nav a {
  padding: 10px 20px;
  text-decoration: none;
  color: #333;
}

/* Content */
.content {
  max-width: 1200px;
  margin: 0 auto;
  padding: 20px;
}

/* Footer */
footer {
  background: #333;
  color: #fff;
  padding: 20px;
  text-align: center;
}

footer p {
  margin: 0;
}</code></pre>
<p>Le code <abbr lang="en" title="HyperText Markup Language">HTML</abbr> est tout aussi basique, et les balises <code>&lt;h1&gt;</code> et <code>main</code> sont absentes.<br>Côté <abbr lang="en" title="Cascading Styles Sheet">CSS</abbr>, on est aussi sans <span lang="en">reset</span>, le menu est bien en ligne, mais pas adaptable contrairement au contenu</p>
<p>Pour cette première partie, c'est Claude 2 qui gagne, suivi de ChatGPT et de Bard. On est tout de même très, très loin de ce que peut produire un développeur web !</p>
<h2><abbr lang="en" title="Hypertext PreProcessor">PHP</abbr> et <abbr lang="en" title="My Structured Query Language">MySQL</abbr></h2>
<p><strong>Les formulaires n'ont pas été testés !</strong></p>
<h3>Formulaire avec Bard</h3>
<pre class="language-markup"><code>&lt;form action="save_data.php" method="post"&gt;
  &lt;input type="text" name="name" placeholder="Name"&gt;
  &lt;input type="email" name="email" placeholder="Email"&gt;
  &lt;input type="password" name="password" placeholder="Password"&gt;
  &lt;input type="submit" value="Submit"&gt;
&lt;/form&gt;</code></pre>
<pre class="language-php"><code>&lt;?php
  // Sanitize and validate the input
  $name = htmlspecialchars(trim($_POST['name']));
  $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
  $password = md5($_POST['password']);

  // Connect to the MySQL database
  $db = new mysqli('localhost', 'root', '', 'my_database');

  // Insert the data into the MySQL table
  $sql = "INSERT INTO users (name, email, password) VALUES ('$name', '$email', '$password')";
  $result = $db-&gt;query($sql);

  // Check if the query was successful
  if ($result) {
    echo "The data was successfully inserted into the database.";
  } else {
    echo "There was an error inserting the data into the database.";
  }

  // Close the MySQL connection
  $db-&gt;close();
?&gt;</code></pre>
<p>Le code <abbr lang="en" title="HyperText Markup Language">HTML</abbr> est "minimaliste" : pas d'attribut <code>ID</code>, ni de <code>required</code>, et encore moins de balise <code>label</code>.<br>Pour ce qui est du code <abbr lang="en" title="Hypertext PreProcessor">PHP</abbr>, on est aussi dans le minimalisme et, contrairement à ChatGPT, les variables ne sont pas préparées avec <code>bind_param</code>.</p>
<h3>Formulaire avec Claude 2</h3>
<pre class="language-markup"><code>&lt;form action="form.php" method="post"&gt;

  &lt;label for="name"&gt;Name:&lt;/label&gt;
  &lt;input type="text" id="name" name="name"&gt;&lt;br&gt;&lt;br&gt;

  &lt;label for="email"&gt;Email:&lt;/label&gt;
  &lt;input type="email" id="email" name="email"&gt;&lt;br&gt;&lt;br&gt;

  &lt;label for="password"&gt;Password:&lt;/label&gt;
  &lt;input type="password" id="password" name="password"&gt;&lt;br&gt;&lt;br&gt;

  &lt;input type="submit" value="Submit"&gt;

&lt;/form&gt;</code></pre>
<pre class="language-php"><code>&lt;?php

// Connect to database 
$db = mysqli_connect("localhost", "username", "password", "database");

// Sanitize input data 
$name = mysqli_real_escape_string($db, $_POST['name']);
$email = mysqli_real_escape_string($db, $_POST['email']);
$password = mysqli_real_escape_string($db, $_POST['password']);

// Validate input data
if(empty($name) || empty($email) || empty($password)){
  echo "Please fill all fields";
  exit();
}

if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
  echo "Invalid email format";
  exit();
}

// Insert data into database
$query = "INSERT INTO users(name, email, password) 
          VALUES ('$name', '$email', '$password')";
          
if(mysqli_query($db, $query)){
  echo "Records inserted successfully";
} else {
  echo "ERROR: Could not execute $query. " . mysqli_error($db);
}

?&gt;</code></pre>
<p>Le code <abbr lang="en" title="HyperText Markup Language">HTML</abbr> est simple et efficace, même si les double <code>&lt;br&gt;</code> font un peu mauvais effet.<br>Le code <abbr lang="en" title="Hypertext PreProcessor">PHP</abbr> fait aussi dans la simplicité. Mais, les variables ne sont pas préparées avec <code>bind_param</code> et le mot de passe n'est pas crypté !</p>
<p>Pour cette seconde partie, c'est ChatGPT qui gagne, suivi de Bard et de Claude 2, même si ce dernier devrait être mis hors-jeu pour ne pas avoir crypté le mot de passe !</p>
<h2>Icônes <abbr lang="en" title="Scalable Vector Graphics">SVG</abbr></h2>
<h3>Icônes <abbr lang="en" title="Scalable Vector Graphics">SVG</abbr> avec Bard</h3>
<pre class="language-markup"><code>&lt;svg width="100" height="100" viewBox="0 0 100 100"&gt;
  &lt;path d="M50 0 L50 100 L0 50 L100 50 Z" stroke="black" stroke-width="10" fill="none"/&gt;
&lt;/svg&gt;</code></pre>
<pre class="language-markup"><code>&lt;svg width="100" height="100" viewBox="0 0 100 100"&gt;
  &lt;g fill="none" stroke="black" stroke-width="2"&gt;
    &lt;path d="M50 0 L50 100 L0 50 L100 50 Z" /&gt;
    &lt;circle cx="50" cy="50" r="30" /&gt;
    &lt;path d="M50 50 L70 80" /&gt;
    &lt;path d="M50 50 L30 80" /&gt;
  &lt;/g&gt;
&lt;/svg&gt;</code></pre>
<p>En l'état, le code est inutilisable, puisqu'il manque l'attribut <code>xmlns</code>. Mais même en le rajoutant, on obtient absolument n'importe quoi !</p>
<p><img class="imgcenter am-img-medium amNonEditable" src="https://www.adilade.fr/media/img/icone-croix-calendrier-bard-medium.png?ver=1689570681" alt="2 icônes qui devraient ressembler à une croix et un calendrier, c'est plutôt de l'art abstrait" width="1200" height="600" sizes="(min-width: 1919px) 100vw, (min-width: 1200px) 1199px, 100vw" decoding="async" srcset="https://www.adilade.fr/media/img/icone-croix-calendrier-bard-thumb.png?ver=1689570681 440w, https://www.adilade.fr/media/img/icone-croix-calendrier-bard-medium.png?ver=1689570681 1200w, https://www.adilade.fr/media/img/icone-croix-calendrier-bard.png?ver=1689570681 2400w" loading="lazy"></p>
<h3>Icônes <abbr lang="en" title="Scalable Vector Graphics">SVG</abbr> avec Claude 2</h3>
<pre class="language-markup"><code>&lt;svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;path d="M18 6L6 18" stroke="black" stroke-width="2"/&gt;
&lt;path d="M6 6L18 18" stroke="black" stroke-width="2"/&gt;
&lt;/svg&gt;</code></pre>
<pre class="language-markup"><code>&lt;svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;rect x="3" y="4" width="18" height="18" rx="2" stroke="#555555" stroke-width="2"/&gt;  
&lt;path d="M16 2V6" stroke="#555555" stroke-width="2" stroke-linecap="round"/&gt;
&lt;path d="M8 2V6" stroke="#555555" stroke-width="2" stroke-linecap="round"/&gt; 
&lt;path d="M3 10H21" stroke="#555555" stroke-width="2" stroke-linecap="round"/&gt;
&lt;path d="M7 6H7.01" stroke="#555555" stroke-width="2" stroke-linecap="round"/&gt;
&lt;path d="M11 6H11.01" stroke="#555555" stroke-width="2" stroke-linecap="round"/&gt;
&lt;path d="M15 6H15.01" stroke="#555555" stroke-width="2" stroke-linecap="round"/&gt;
&lt;path d="M7 18H7.01" stroke="#555555" stroke-width="2" stroke-linecap="round"/&gt; 
&lt;path d="M11 18H11.01" stroke="#555555" stroke-width="2" stroke-linecap="round"/&gt;
&lt;path d="M15 18H15.01" stroke="#555555" stroke-width="2" stroke-linecap="round"/&gt;
&lt;/svg&gt;</code></pre>
<p>Cette fois, c'est mieux, la croix est bonne, et le calendrier ressemble à un calendrier, même s'il est loin d'être parfait !</p>
<p><img class="imgcenter am-img-medium amNonEditable" src="https://www.adilade.fr/media/img/icone-croix-calendrier-claude-2-medium.png?ver=1689570681" alt="2 icônes : à gauche, une croix, à droite, un calendrier" width="1200" height="600" sizes="(min-width: 1919px) 100vw, (min-width: 1200px) 1199px, 100vw" decoding="async" srcset="https://www.adilade.fr/media/img/icone-croix-calendrier-claude-2-thumb.png?ver=1689570681 440w, https://www.adilade.fr/media/img/icone-croix-calendrier-claude-2-medium.png?ver=1689570681 1200w, https://www.adilade.fr/media/img/icone-croix-calendrier-claude-2.png?ver=1689570681 2400w" loading="lazy"></p>
<p>Dans tous les cas de figure, ces vectoriels ne sont pas optimisés et devront obligatoirement être retravaillés manuellement. Pour ce qui est des Icônes <abbr lang="en" title="Scalable Vector Graphics">SVG</abbr>, c'est ChatGPT qui gagne, suivi de Claude 2. Bard est, lui, hors-jeu !</p>
<h2>Et le texte dans tout ça ?</h2>
<p>J'ai aussi testé la génération de texte, même si ce n'est pas le but de cet article. J'ai demandé aux 3 <abbr title="Intelligence Artificielle">IA</abbr> Générative d'écrire une description pour une fiche produit. C'est Claude 2 qui s'en sort le mieux, le texte est quasiment utilisable tel quel. Suit ChatGPT qui a tendance à faire du contenu dupliqué si on lui demande des variantes. Bard est, lui, franchement assez médiocre.</p>]]></description>
<guid>https://www.adilade.fr/blog/bard-vs-claude-2-vs-chatgpt/</guid>
</item>
</channel></rss>
