Comment et pourquoi dessiner en CSS ?
Aujourd’hui je suis très heureux de recevoir Dorian pour cet Article invité ! Merci à lui de continuer la danse avec cette excellente lecture sur le CSS.
Dorian est un développeur web et un mentor à OpenClassrooms. Sur son blog, Il parle de code, de CSS, de design et d’autres trucs. Tu retrouveras des séries d’articles, des astuces, des tutoriels, plein d’expériences et des ressources intéressantes.
Dans cet article on va détourner une technologie de son usage initial et on va faire de la magie noire. 🧙♂️
On va parler à 200% de CSS car je vais te montrer comment dessiner en CSS.
Mais pourquoi dessiner en CSS ? Personnellement j’y attache deux raisons : apprendre et passer un bon moment. Personnellement c’est comme ça que j’en ai appris autant sur le CSS. En réalisant des challenges créatifs avec uniquement du CSS et en les partageant.
Je vais reproduire une illustration de Marko Stupic dans le but de te faire découvrir cette « discipline » où l’on peut créer, apprendre et passer un bon moment en même temps.
J’aimerais préciser que pour l’article je vais uniquement reproduire une illustration. Mais rien ne t’empêche d’utiliser le dessin en CSS comme un moyen de t’exprimer et d’allier l’apprentissage à la création.
Au passage dans tout l’article quand je parlerais d’un nouvel élément, j’écrirais entre parenthèses les classes CSS liées à celui-ci. Comme ça il te sera plus facile de comprendre le code en le lisant.
Définir une « scène »
Je commence par définir le fond de notre scène (.scene). C’est assez simple, je vais tout simplement créer un dégradé circulaire en partant du centre, le tout en donnant à la première couleur plus d’importance.
background: radial-gradient(circle, #1d1440 300px, #0e0b29);
J’en profite pour définir toute ma scène en display: flex; en centrant les éléments verticalement et horizontalement. Cela m’évitera de devoir le faire pour chaque élément.
L’avantage c’est aussi que je pourrais gérer la taille et le positionnement de toute ma création simplement en agissant sur cette scène.
Dessiner la fenêtre
Maintenant on va dessiner la fenêtre, c’est l’élément central de l’illustration.
Je vais d’abord créer un élément (.window) qui me servira de container pour tous les éléments de ma fenêtre et de cadre. Pour le cadre c’est tout simplement un rond en CSS avec une bordure assez épaisse.
Ensuite je crée un nouvel élément (.glass) et j’utilise les pseudos-éléments after et before pour créer deux nouveaux éléments (.glass::before et .glass::after) qui vont composer nos supports de fenêtres.
Petite astuce, j’utilise des rectangles avec des bordures sur les axes X et Y pour réaliser les supports de fenêtres plus simplement. Comme ça je peux régler leur taille juste en modifiant les propriétés height ou width.
Pour terminer je vais définir un effet de lumière bleue sur la vitre. Pour cela j’utilise un ombrage orienté vers l’intérieur de mon élément, un peu comme si je voulais créer un effet néon.
box-shadow: inset 0px 5px 36px 8px rgba(72,148,247,1);
Et hop on arrive au résultat suivant.
Ajouter des ombres et de la lumière en CSS
Maintenant que j’ai une fenêtre, je vais devoir représenter les ombres et la lumière émise à travers la fenêtre.
Quand on dessine en CSS, il n’est pas possible de créer une source de lumière et de générer des ombres comme par magie. Il va donc falloir jouer avec les ombrages et les couleurs pour créer ces effets.
Lumière émise
Je vais commencer par les effets de lumière. Cette lumière va permettre de donner du relief à ma fenêtre.
Grâce au dégradé défini dans notre scène, nous avons déjà créé notre premier effet de lumière.
Pour créer le deuxième effet de lumière (présent sous la fenêtre), je vais créer un élément (.light), dans lequel je vais définir un ovale.
J’utilise un ovale pour créer un effet de relief simple, le bas de mon effet sera plus large que ses côtés, comme si la lumière se propageait vers l’avant.
Je vais ensuite lui définir un dégradé qui part de la couleur de fond vers une couleur plus claire.

Avant et après. On distingue maintenant plus clairement la fenêtre.
Ombres
“You need the dark in order to show the light.” Bob Ross
Comme on peut le voir sur l’illustration, les supports de la fenêtre vont créer des ombres qui indirectement définissent la lumière produite par la fenêtre.
Pour dessiner ces ombres, on va d’abord créer un nouvel élément (.shadow) qui sera un enfant de l’élément de la lumière (.light).
Afin de créer les ombres, je vais utiliser la même astuce que pour mes supports de fenêtres. After et before + deux carrés.
Premièrement, j’applique une rotation de 45 degrés au premier carré (.shadow::after) afin de créer un losange. Il me suffit ensuite de le positionner au centre et de lui ajouter deux bordures pour réaliser les ombres.
Pour le deuxième carré, c’est le même principe, sauf que je vais utiliser la fonction skew() qui permet de créer une distorsion en étirant l’élément.
Je vais, grâce à cette fonction, pouvoir créer un losange plus large que le précédent et donc l’utiliser pour créer une ombre qui suit la trajectoire de la lumière.
Ça peut-être difficile à comprendre je le conçois, c’est pourquoi j’ai ajouté des commentaires et j’ai laissé les bordures colorées sur le Codepen afin que tu puisses mieux appréhender le concept.
Créer l’extérieur et la vue sur l’espace.
Je vais maintenant me charger de créer le décor extérieur. Je vais dessiner en CSS des nuages et des étoiles.
Ciel et étoiles
Pour le fond de mon décor je vais utiliser un élément (.sky) avec deux dégradés de couleurs, un pour le ciel et un autre pour le fond des nuages. Passons aux étoiles.
Je pense que je t’apprends rien mais un développeur c’est feignant, du coup pour les étoiles je vais tout simplement utiliser SCSS. Ça me permet d’utiliser une boucle for pour créer le style de mes étoiles et créer de l’aléatoire dans leur positionnement.
Une boucle, des valeurs aléatoires, un peu de maths pour générer plus d’étoiles en haut de ma fenêtre qu’en bas, du CSS. Et.. voici un ciel avec des étoiles qui changent de place à chaque rendu.

Nuages
Pour les nuages, je ne vais pas devoir faire le feignant. Surtout si je veux que ça ressemble à peu près à l’image. Je n’ai pas le choix, je vais devoir les placer à la main. 😬
Je vais donc créer deux wrappers (.white-clouds et .gray-clouds) dans lesquels je vais créer des éléments (.cloud) qui composeront les nuages. Ça me permet de décrire le style des nuages dans les wrappers et d’avoir uniquement à positionner mes bouts de nuages dans le reste du CSS. J’aère le code et je fais moins de répétitions.
Pour les bouts des nuages, je fais simple et je vais créer des carrés blancs ou gris avec une bordure arrondie au maximum. J’utilise en plus les pseudos-éléments after et before pour créer 3 bouts de nuages par élément (.cloud).
Pour finir je vais utiliser la pseudo-classe :nth-child pour positionner tous mes bouts de nuages. Voici un petit extrait du code SCSS pour un nuage.
&:nth-child(1) { left: 25%; bottom: -5%; width: 70px; height: 70px; &::before { bottom: 50%; right: 120%; width: 60px; height: 60px; } &::after { top: 10%; right: 50%; width: 90px; height: 90px; } }
Comme tu peux le voir dans le code, je vais uniquement gérer le positionnement de mes nuages. On pourrait même encore l’optimiser avec du SCSS pour simplifier et réduire la quantité de code.
Bonus avant de finir
Un petit plus avant de finir. En effet j’ai décidé de ne pas dessiner en CSS les astronautes car sinon l’article aurait été trop long (en plus c’est moins intéressant à expliquer). J’ai donc créé un casque vide inspiré de l’image pour habiller un peu la scène.
Voici le résultat en image du schéma jusqu’à l’implémentation.

5 éléments CSS pour un « casque »
Je vais rapidement détailler les étapes et les techniques utilisées :
1 – Je crée un élément et j’arrondis les angles.
2 – J’ajoute le derrière du casque avec la même technique, en arrondissant à 80% un côté.
3 – Je clone le premier élément et j’utilise un linear-gradient pour n’afficher que la partie de devant.
linear-gradient(to right, #271a51 0px, #271a51 25px, transparent 25px);
Avec ce code je n’affiche que 25% de l’élément.
4 – Je crée un élément en arrière-plan, je l’arrondi au maximum, j’utilise un linear-gradient pour créer un effet fumé puis un box-shadow pour créer du relief.
5 – Pour finir j’utilise et je positionne un élément en forme de cercle avec seulement la bordure droite de visible afin d’arrondir le casque au niveau de la visière.
Résultat final
Pour la touche finale, j’ai animé le casque avec une simple animation de rotation et je l’ai positionné derrière la fenêtre, prêt à dériver dans l’espace.
Et voici le résultat, que je te conseille au passage de regarder en plein écran.
Conclusion
Bon ok c’est sympa, mais sinon ça sert à quoi de dessiner en CSS ? Pourquoi ajouter 500 lignes de CSS alors que je peux utiliser du SVG ?
C’est effectivement ce que l’on pourrait se dire à la suite de cet article et c’est vrai. Cependant tu as surement remarqué que j’ai utilisé une pléthore de propriétés CSS comme par exemple des box-shadow, des gradients, des transformations, des positionnements, des pseudos-éléments, mais aussi du SCSS et un peu de maths.
Et c’est là que dessiner en CSS prend tout son sens. C’est selon moi un excellent moyen de progresser en CSS tout en créant.
Au final il ne faut pas oublier que le métier de développeur c’est avant tout un métier créatif, alors autant apprendre en créant.
c’est génial ce qu’il a fait ! Cela donne pas mal envie de se lancer à faire des choses comme ça (ce qui change des maquettes de sites internet)
Merci pour ton retour 😊
Si tu veux te lancer dans la création d’illustration en CSS, et que tu manques de sujets, tu peux essayer de suivre les challenges Codepen :
https://codepen.io/challenges
L’avantage c’est que tu as un sujet par semaine + une deadline pour éviter d’aller trop loin.
Merci pour cet article et surtout le détail d’explication Dorian ! Très agréable à lire 🙂
Merci pour vos retours 👀
Un projet assez sympa aussi pour se donner des idées de tricks CSS : CSS flags https://pixelastic.github.io/css-flags/ (j’ai un paquet d’idées simples mais géniales : genre l’utilisation des gradients, etc.)
c’est grave bien
Très joli et ca donne envie de se lancer !
J’aime beaucoup le site CSS Battle où le but est de reproduire une image en CSS. Il y a une phase de minification du code qui te fait gagner plus de points (mais pas obligé).
https://cssbattle.dev/
incroyable
# Harvard University: A Legacy of Excellence and Innovation
## A Brief History of Harvard University
Founded in 1636, **Harvard University** is the oldest and
one of the most prestigious higher education institutions in the United States.
Located in Cambridge, Massachusetts, Harvard has built a global reputation for academic excellence,
groundbreaking research, and influential alumni.
From its humble beginnings as a small college established to educate clergy, it
has evolved into a world-leading university that shapes the future
across various disciplines.
## Harvard’s Impact on Education and Research
Harvard is synonymous with **innovation and intellectual leadership**.
The university boasts:
– **12 degree-granting schools**, including the renowned **Harvard Business School**, **Harvard Law School**,
and **Harvard Medical School**.
– **A faculty of world-class scholars**, many of whom are
Nobel laureates, Pulitzer Prize winners, and pioneers
in their fields.
– **Cutting-edge research**, with Harvard leading initiatives in artificial intelligence,
public health, climate change, and more.
Harvard’s contribution to research is immense, with billions of dollars allocated to scientific discoveries and technological advancements
each year.
## Notable Alumni: The Leaders of Today and Tomorrow
Harvard has produced some of the **most influential figures**
in history, spanning politics, business, entertainment, and science.
Among them are:
– **Barack Obama & John F. Kennedy** – Former U.S. Presidents
– **Mark Zuckerberg & Bill Gates** – Tech visionaries (though Gates did not graduate)
– **Natalie Portman & Matt Damon** – Hollywood icons
– **Malala Yousafzai** – Nobel Prize-winning activist
The university continues to cultivate future leaders who shape industries and
drive global progress.
## Harvard’s Stunning Campus and Iconic Library
Harvard’s campus is a blend of **historical charm
and modern innovation**. With over **200 buildings**, it features:
– The **Harvard Yard**, home to the iconic **John Harvard Statue** (and the famous “three lies” legend).
– The **Widener Library**, one of the largest university libraries in the world, housing
**over 20 million volumes**.
– State-of-the-art research centers, museums, and performing arts venues.
## Harvard Traditions and Student Life
Harvard offers a **rich student experience**, blending academics with vibrant traditions,
including:
– **Housing system:** Students live in one of 12 residential houses,
fostering a strong sense of community.
– **Annual Primal Scream:** A unique tradition where
students de-stress by running through Harvard Yard before finals!
– **The Harvard-Yale Game:** A historic football rivalry that unites
alumni and students.
With over **450 student organizations**, Harvard students engage in a diverse range
of extracurricular activities, from entrepreneurship to performing arts.
## Harvard’s Global Influence
Beyond academics, Harvard drives change in **global policy,
economics, and technology**. The university’s research impacts healthcare, sustainability,
and artificial intelligence, with partnerships across industries worldwide.
**Harvard’s endowment**, the largest of any
university, allows it to fund scholarships, research, and public initiatives, ensuring
a legacy of impact for generations.
## Conclusion
Harvard University is more than just a school—it’s a
**symbol of excellence, innovation, and leadership**.
Its **centuries-old traditions, groundbreaking discoveries, and transformative education**
make it one of the most influential institutions in the world.
Whether through its distinguished alumni, pioneering research, or vibrant student life, Harvard continues to shape the
future in profound ways.
Would you like to join the ranks of Harvard’s legendary scholars?
The journey starts with a dream—and an application!
https://www.harvard.edu/
Разоблачение мифов об онлайн-казино: правда и
вымысел
Прежде всего, стоит понимать: азартные игры
в сети подчинены строгим правилам.
Законодательство различных стран регламентирует подобные платформы,
что обеспечивает защиту игроков и их интересов.
Согласно данным, предоставленным исследовательскими
организациями, более 70% пользователей обращают внимание на лицензии и репутацию заведения перед тем, как делать
ставку.
Отказ от предвзятых суждений о больших выигрышах также является необходимым шагом.
Многие новые игроки мечтают о
мгновенном обогащении,
однако вероятность таких событий значительно ниже, чем предполагается.
Статистические данные показывают, что средний выигрыш составляет около 5-10%
от общего объема ставок. Это говорит о том, что разумный
подход к игре должен основываться на осмысленных
стратегиях, а не на слепой вере
в удачу.
Имя заведения и его отзывы также играют важную роль в выборе места для игры.
Основанные на опыте других членов
сообщества рекомендации порой могут
стать решающими при принятии
решения. Исследования показывают,
что 65% игроков предпочитают выбирать платформы, основываясь на личных рекомендациях и независимых рецензиях.
Как работают RNG и честность игровых автоматов онлайн?
Игровые автоматы используют генераторы случайных чисел (RNG) для обеспечения честности результатов.
RNG представляет собой программное обеспечение,
которое производит последовательности чисел,
не имеющих предсказуемого порядка.
Каждый спин на автомате генерирует уникальное значение, что гарантирует случайность игры.
Лицензированные онлайн-казино регулярно проводятся аудиты сторонними организациями,
такими как eCOGRA или iTech Labs. Эти проверки подтверждают,
что алгоритмы RNG функционируют корректно и результаты игр
не поддаются манипуляциям. Программные тесты проверяют, соответствует ли распределение выигрышей заявленным процентам возврата игрокам (RTP).
Следует учитывать, что RNG не означает, что все игроки выигрывают одинаково.
При длительном игровом процессе результаты могут
варьироваться, что связано с случайным характером игр.
Важно изучать данные о проценте
возврата, прежде чем выбирать аппарат для игры.
Кроме того, многие провайдеры программного обеспечения внедряют защита
от мошенничества и случайных
ошибок, что увеличивает уровень прозрачности.
Все заведения, работающие на законных основаниях, открыты
к публикации данных о своих RNG
и RTP, что также способствует формированию доверия среди игроков.
В результате, знание о работе RNG и честности игровых автоматов позволяет принять
более осознанное решение при выборе платформы для игры.
Какие факторы влияют на вероятность выигрыша в азартных играх онлайн?
Качество программного обеспечения также играет значительную роль.
Игры от известных поставщиков часто имеют продуманные механизмы генерации случайных чисел, что повышает честность игры.
Изучайте отзывы о разработчиках и выбирайте платформы с проверенными провайдерами.
Понимание стратегии является
неотъемлемой частью успешной игры.
Использование базовых
стратегий в блэкджеке или покере может существенно повысить
ваши шансы на выигрыш. Исследуйте различные подходы к игре и применяйте их в зависимости от ситуации.
Уровень риска и управление банкроллом
тоже непосредственно влияют
на итоговую вероятность выигрыша.
Установите лимиты на ставки и
следуйте им. Это поможет избежать чрезмерных потерь и
даст возможность дольше оставаться в
игре.
Кроме того, бонусные предложения и акции казино могут обеспечить дополнительные шансы на выигрыш.
Изучайте условия соревнований
и бонусов, чтобы использовать их
с максимальной выгодой.
Не забывайте о важности анализа статистики.
Отслеживайте свои выигрыши и проигрыши, чтобы оптимизировать свою игру в
будущем. Это позволит лучше понять, какие стратегии работают наилучшим образом.
jozz casino
Влияние RTP на шансы на выигрыш в онлайн-казино
Выбирайте автоматы с высоким значением возвращаемой
процентной ставки. Исследования показывают, что игровые автоматы
с коэффициентом 96% могут обеспечить лучшие результаты
при длительной игре. Это значит, что на каждые 1000 рублей, вложенные в
игру, 960 рублей возвращается игроку в виде выигрышей.
Обратите внимание на разнообразие типов игр.
Некоторые настольные игры, как
блэкджек или баккара, часто имеют более высокие статистические показатели возврата по сравнению с слотами.
Например, блэкджек может достигать 99%
возврата. Сделайте выбор в пользу
игр с лучшими шансами.
Изучайте доступные бонусы и акции.
Они могут существенно увеличить ваши проигрыши и предоставить дополнительные возможности для игры.
Однако не забывайте читать условия, чтобы избежать
неожиданных ограничений.
Рассматривайте долгосрочную
перспективу. Даже если вы выигрываете в краткосрочной перспективе, статистика всегда возвращается к
среднему значению. Игры с высокими значениями возврата потребуют от вас
больше времени для определения их реальной эффективности.
Как правильно интерпретировать RTP при выборе слотов для игры
Выбирайте слоты с коэффициентом возврата к игроку не ниже 95%.
Это минимальный уровень, который рекомендуется для обеспечения приемлемого соотношения риска и потенциальной отдачи.
Изучите таблицы выплат. Они дают представление о том,
как устроена игра и какие комбинации могут привести к выплатам.
Внимание к символам и их стоимости поможет лучше понять, как
могут сложиться события в процессе игры.
Сравните разные игры. Один и тот же показатель
возврата может проявляться в разных
слотах по-разному. Не полагайтесь только на цифры – обратите внимание на игровые
механики, бонусные раунды и волатильность.
Протестируйте демо-версии. Запустив слоты в бесплатном режиме, вы получите представление о механике игры и сможете оценить, как часто происходят payouts.
Не забывайте про волатильность.
Она показывает, насколько велики
могут быть выплаты и как часто
они происходят. Высокий уровень волатильности может
привести к редким, но крупным победам, в то время как низкая – к частым,
но скромным.
Следите за обновлениями.
Игры могут получать новые версии с изменяющимися параметрами.
Будьте в курсе последних релизов и изменений
в механике слотов, чтобы принимать обоснованные решения.
Не действуйте только по
интуиции. Используйте аналитические данные, собирая информацию о разных слотах и
формируя свои стратегии на их основе.
Это позволит минимизировать риски и повысить вероятность результативной игры.
Как RTP влияет на долгосрочную стратегию игры в онлайн-казино
Выбирайте автоматы с более высоким процентом возвращаемости.
Это приведет к большей вероятности возврата вложенных средств за
длительный срок. Например, аппараты с показателем 96% означают,
что в среднем на 1000 рублей вы можете рассчитывать на 960 рублей в течение длительного времени.
Изучайте таблицы выплат и особенности
игр. Понимание механики и особенностей того или иного слота поможет избежать невыгодных ставок и выбрать наиболее
прибыльные предложения.
Не забывайте о волатильности.
Высокая волатильность может
привести к большему количеству крупных, но редких выигрышей.
Если ваша цель – частые небольшие вознаграждения, выбирайте аппараты с низкой волатильностью.
Учитывайте свою bankroll. Установите лимиты на свои ставки исходя из выделенного бюджета.
Даже с высокими коэффициентами необходимо подходить к игре
расчетливо, чтобы избежать крупных потерь.
Играйте на дремучем запасе бонусов.
Часто доступны акции, позволяющие увеличить сумму для
ставок, что даст вам больше шансов на
возврат вложений.
Регулярно пересматривайте свою стратегию.
Убедитесь, что ваш подход остается
актуальным, следя за изменениями в условиях на платформах.
Это поможет сохранять интерес к процессу и повысить шансы на успех в долгосрочной игре.
jozz casino зеркало
кухня інтер єр
It’s a shame you don’t have a donate button! I’d without a doubt donate to this outstanding blog!
I suppose for now i’ll settle for book-marking and adding your RSS feed to my Google account.
I look forward to fresh updates and will share this site with my Facebook group.
Talk soon!
« https://ai-db.science/wiki/Maxstresser_35N »
I’d like to thank you for the efforts you’ve put in penning this website.
I really hope to view the same high-grade blog posts by you later on as well.
In truth, your creative writing abilities has encouraged me to get my own, personal site
now 😉
« https://wifidb.science/wiki/User:ZackBourgeois74 »
I am not positive where you are getting your information, however good topic.
I needs to spend some time finding out much more or working
out more. Thank you for magnificent information I was in search of
this information for my mission.
« https://wildjackets.com/jurnal-58hrandom/ »
You’re so awesome! I don’t suppose I’ve read anything like this before.
So wonderful to find somebody with a few original thoughts on this topic.
Really.. thanks for starting this up. This website
is one thing that is needed on the internet, someone with a little originality!
« https://wiki.snooze-hotelsoftware.de/index.php?title=Jurnal_24Y_random »
Выигрыш пришел на карту за
несколько минут, впечатлен!
Vovan Casino
Выигрыши приходят даже быстрее, чем обещано.
Зеркало Pinco Casino
Высокие коэффициенты и быстрые выплаты.
казино Pinco вход