Beispiel:CSS3 filter-grayscale.html

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<link rel="stylesheet" media="screen" href="./Beispiel:Grundlayout.css">
	<title>filter:grayscale</title>
	<style>
:root {
    --grayness: 0.5;   /* Wird vom Script verändert und von den Filtern genutzt */
}
/* figure-Element hat grayscale- oder saturate-Klasse zur Auswahl des Verfahrens */
.grayscale img {
	filter: grayscale(var(--grayness));
}
.saturate img {
	/* Zeige: Sättigung ist "1 minus Graustärke" */
	filter: saturate(calc(1 - var(--grayness)));
}
/* Bilder zu zweit nebeneinander. Ist Platz genug, dann vier */
.gallery {
    display: grid;
    gap: 1em;
    grid-template-columns: repeat(2, 1fr);
    justify-content: center;
}
@media (width > 40em) {
    .gallery {
	    grid-template-columns: repeat(4, 1fr);
    }
}
/* Bild und figcaption am unteren Rand des Grid-Items anordnen */
figure {
    display: flex;
    flex-flow: column;
    justify-content: end;
	align-items: center;
	margin: 0;
}
figure img {
    max-width: 10em;
    width: 100%;
}
figure figcaption {
	white-space: pre-line;
}
body {
	padding: 0 8px;
}
#settings {
    display: grid;
    grid-template-columns: 1fr;
    gap:  0.2em 1em;
    margin: 1em 0;
}
#settings output {
    justify-self: center;
}
#settings output::after {
    content: ' %';
}
@media (width > 25em) {
    #settings {
        grid-template-columns: auto 1fr;
    }
    #settings output {
        grid-column-start: 2;
    }
}
  </style>
<script>
document.addEventListener("DOMContentLoaded", function() {
    const graynessCtrl = document.querySelector("#grayness");
    graynessCtrl.addEventListener("input", updateGrayness);
    updateGrayness();
    function updateGrayness() {
        const grayness = graynessCtrl.valueAsNumber;
        document.querySelector("#settings output").value=grayness;
        document.body.style.setProperty("--grayness", grayness/100);

        document
            .querySelectorAll(".grayscale figcaption")
            .forEach(el => el.textContent = `filter:\ngrayscale(${grayness}%);`)
        document
            .querySelectorAll(".saturate figcaption")
            .forEach(el => el.textContent = `filter:\nsaturate(${100-grayness}%);`)
    }
});
</script>
</head>
<body>
  <h1>Auswirkung von <code>filter:grayscale</code></h1>
  <main>
    <p>Spielen Sie mit dem Graustufenwert und vergleichen Sie grayscale und saturate</p>
    <fieldset id="settings">
      <legend>Einstellung</legend>
      <label for="grayness">Graustufenwert: </label>
      <input id="grayness" type="range" min="0" max="100" step="1" value="50">
      <output>0</output>
    </fieldset>
    <div class="gallery">
      <figure class="grayscale">
        <img src="https://wiki.selfhtml.org/images/2/21/Burg.svg" alt="Burg">
	    <figcaption></figcaption>
      </figure>
      <figure class="saturate">
        <img src="https://wiki.selfhtml.org/images/2/21/Burg.svg" alt="Burg">
        <figcaption></figcaption>
      </figure>
      <figure class="grayscale">
        <img src="https://wiki.selfhtml.org/images/2/24/Lauf-3.jpg" alt="Lauf a. d. Pegnitz">
        <figcaption></figcaption>
      </figure>
      <figure class="saturate">
        <img src="https://wiki.selfhtml.org/images/2/24/Lauf-3.jpg" alt="Lauf a. d. Pegnitz">
        <figcaption></figcaption>
      </figure>
    </div>
  </main>
</body>
</html>