Bulbizarre
Bulbizarre est un petit quadrupède vert avec une tête large. Il porte un bulbe sur son dos.
Rémi Pachet
Lead Front
Specs HTML & CSS méconnue
JS utilisé à outrance
Tooltip
Accordion
Validation de formulaire
Nouveautés CSS
Switch
Dark-mode
Un grand nombre des fonctionnalités abordées ce soir ne sont pas compatibles avec les navigateurs plus anciens. |
<div class="tooltip-js">
<p>Pokemons</p>
<ul>
<li class="pokemon">Germignon</li>
<li class="pokemon">Héricendre</li>
<li class="pokemon">Kaiminus</li>
</ul>
</div>
<div class="tooltip-js">
<p>Pokemons</p>
<ul>
<li class="pokemon">Germignon
<span class="tooltip">Plante</span>
</li>
<li class="pokemon">Héricendre
<span class="tooltip">Feu</span>
</li>
<li class="pokemon">Kaiminus
<span class="tooltip">Eau</span>
</li>
</ul>
</div>
document.querySelectorAll(".pokemon").forEach(elem => {
elem.addEventListener("mouseover", showTooltip);
elem.addEventListener("mouseout", hideTooltip);
}
);
function showTooltip(event) {
const tooltip = event.target.querySelector(".tooltip");
tooltip.style.display = "block";
}
function hideTooltip(event) {
const tooltip = event.target.querySelector(".tooltip");
tooltip.style.display = "none";
}
Pokemons
Data attributes Use_data_attributes
data-*
<div class="tooltip-example">
<h4>Pokemons</h4>
<ul>
<li data-tooltip="Plante">Germignon</li>
<li data-tooltip="Feu">Héricendre</li>
<li data-tooltip="Eau">Kaiminus</li>
</ul>
</div>
li::after {
content: 'Type : ' attr(data-tooltip);
transition: 0.5s opacity;
...
}
li:hover:after {
opacity: 1;
}
li::after {
content: 'Type : ' attr(data-tooltip);
transition: 0.5s opacity;
...
}
li:hover:after {
opacity: 1;
}
li::after {
content: 'Type : ' attr(data-tooltip);
transition: 0.5s opacity;
...
}
li:hover:after {
opacity: 1;
}
.tooltip-example {
& li[data-tooltip="Eau"]::after {
background: blue;
}
& li[data-tooltip="Feu"]::after {
background: red;
}
& li[data-tooltip="Plante"]::after {
background: green;
}
}
<details>
<summary>
Who's that pokemon ?
</summary>
<p>Pikachu</p>
</details>
Pikachu
summary::marker {
font-size: 1.5em;
content: "📁";
}
[open] summary::marker {
font-size: 1.5em;
content: "📂";
}
Pikachu
details {
padding: 10px;
transition:
height .6s ease-in;
overflow: hidden;
}
details:not([open]) {
height: 50px;
}
details[open] {
height: 150px;
}
Pikachu
<form>
<label for="starter">
Ton starter préféré de la Gen 1 (Bulbizarre, Salamèche, Carapuce)
</label>
<input
id="starter"
required
pattern="[Bb]ulbizarre|[Ss]alam[èe]che|[Cc]arapuce">
</form>
<form>
<label for="starter">
Ton starter préféré de la Gen 1 (Bulbizarre, Salamèche, Carapuce)
</label>
<input
id="starter"
required
pattern="[Bb]ulbizarre|[Ss]alam[èe]che|[Cc]arapuce">
</form>
form {
& input:invalid {
border: 2px solid red;
}
& input:valid {
border: 2px solid green;
}
}
form {
& input:user-invalid {
border: 2px solid red;
}
& input:user-valid {
border: 2px solid green;
}
}
ul {
& li {
}
}
<div class="wrapper">
<article class="pokemon">
<h2>Bulbizarre</h2>
<p>...</p>
</article>
<article class="pokemon choix">
<h2>Salamèche</h2>
<p>...</p>
</article>
<article class="pokemon">
<h2>Carapuce</h2>
<p>...</p>
</article>
</div>
<div class="wrapper">
<article class="pokemon">
<h2>Bulbizarre</h2>
<p>...</p>
</article>
<article class="pokemon choix">
<h2>Salamèche</h2>
<p>...</p>
</article>
<article class="pokemon">
<h2>Carapuce</h2>
<p>...</p>
</article>
</div>
<div class="wrapper">
<article class="pokemon">
<h2>Bulbizarre</h2>
<p>...</p>
</article>
<article class="pokemon choix">
<h2>Salamèche</h2>
<p>...</p>
</article>
<article class="pokemon">
<h2>Carapuce</h2>
<p>...</p>
</article>
</div>
.pokemon {
padding: 0.5rem;
border: 1px solid black;
border-radius: 0.5rem;
& h2 {
/* équivalent à `.pokemon h2` */
color: slateblue;
.choix & {
/* équivalent à `.pokemon.choix h2` */
color: tomato;
}
}
}
.pokemon {
padding: 0.5rem;
border: 1px solid black;
border-radius: 0.5rem;
& h2 {
/* équivalent à `.pokemon h2` */
color: slateblue;
.choix & {
/* équivalent à `.pokemon.choix h2` */
color: tomato;
}
}
}
.pokemon {
padding: 0.5rem;
border: 1px solid black;
border-radius: 0.5rem;
& h2 {
/* équivalent à `.pokemon h2` */
color: slateblue;
.choix & {
/* équivalent à `.pokemon.choix h2` */
color: tomato;
}
}
}
Bulbizarre est un petit quadrupède vert avec une tête large. Il porte un bulbe sur son dos.
Salamèche est un Pokémon bipède et reptilien avec un corps principalement orange, à l'exception de son ventre et de ses plantes de pieds qui sont beige
Carapuce est une petite tortue bipède de couleur bleue. Il possède une carapace brune au pourtour blanc, beige au niveau du ventre.
<form>
<legend>Qui est le meilleur starter ?</legend>
<div class="form-input">
<input type="radio" id="starter" value="Salamèche">
<label for="starter" class="form-label">Salamèche</label>
</div>
...
</form>
.form-input:has(input:checked) {
background: red;
}
.form-input:has(input:checked) > label {
font-weight: 700;
color: white;
}
body:has(:checked) {
backdrop-filter: brightness(0.5);
}
<div class="has-exemple blur-exemple">
<label>
<input name="jour-nuit" id="jour-nuit" type="checkbox" />
Jour / Nuit
</label>
</div>
#jour-nuit {
appearance: none;
position: relative;
display: inline-block;
background: lightgrey;
height: 1.65rem;
width: 2.75rem;
vertical-align: middle;
border-radius: 2rem;
box-shadow: 0px 1px 3px #0003 inset;
transition: 0.25s linear background;
}
#jour-nuit {
appearance: none;
position: relative;
display: inline-block;
background: lightgrey;
height: 1.65rem;
width: 2.75rem;
vertical-align: middle;
border-radius: 2rem;
box-shadow: 0px 1px 3px #0003 inset;
transition: 0.25s linear background;
}
#jour-nuit {
appearance: none;
position: relative;
display: inline-block;
background: lightgrey;
height: 1.65rem;
width: 2.75rem;
vertical-align: middle;
border-radius: 2rem;
box-shadow: 0px 1px 3px #0003 inset;
transition: 0.25s linear background;
}
#jour-nuit {
appearance: none;
position: relative;
display: inline-block;
background: lightgrey;
height: 1.65rem;
width: 2.75rem;
vertical-align: middle;
border-radius: 2rem;
box-shadow: 0px 1px 3px #0003 inset;
transition: 0.25s linear background;
}
#jour-nuit::before {
content: "";
display: block;
width: 1.25rem;
height: 1.25rem;
background: #fff;
border-radius: 1.2rem;
position: absolute;
top: 0.2rem;
left: 0.2rem;
box-shadow: 0px 1px 3px #0003;
transition: 0.25s linear transform;
transform: translateX(0rem);
}
#jour-nuit::before {
content: "";
display: block;
width: 1.25rem;
height: 1.25rem;
background: #fff;
border-radius: 1.2rem;
position: absolute;
top: 0.2rem;
left: 0.2rem;
box-shadow: 0px 1px 3px #0003;
transition: 0.25s linear transform;
transform: translateX(0rem);
}
#jour-nuit::before {
content: "";
display: block;
width: 1.25rem;
height: 1.25rem;
background: #fff;
border-radius: 1.2rem;
position: absolute;
top: 0.2rem;
left: 0.2rem;
box-shadow: 0px 1px 3px #0003;
transition: 0.25s linear transform;
transform: translateX(0rem);
}
#jour-nuit:checked {
background: green;
}
#jour-nuit:checked::before {
transform: translateX(1rem);
}
body:has(#dark-mode:checked) {
--r-background-color:#1b1b1b;
--r-heading-color:#e43;
--r-main-color: #eee;
}
body:has(#dark-mode:checked) {
--theme: dark;
}
body:has(#dark-mode:checked) {
--theme: dark;
}
@container style(--theme: dark) {
body {
background-color: #1b1b1b;
color: #e43;
}
}
HTML et CSS évolue de plus en plus
Est-ce possible en HTML et CSS ?
Query Container - CSS
Fonction trigonométriques - CSS
Declarative Shadow DOM - HTML
API Popover - HTML - CSS
contrast-color - CSS