Wie geht das mit CSS?

1 Antwort

Outline wurde ja schon genannt und dann ist es ja nicht so schwierig. Hier ein einfaches Beispiel:

HTML

<section>
  <div>
    <h2>Bestellung</h2>
    <button class="order-button">Hier bestellen</button>
  </div>
</section>

CSS

.order-button:hover {
  outline: 3px dotted black;
  outline-offset: 20px;
}

Link:

https://jsfiddle.net/Babelfisch/5d4szwhp/4/

Woher ich das weiß:Berufserfahrung – Entwickle Webseiten seit über 25 Jahren.

Zebra321 
Beitragsersteller
 07.08.2024, 12:14

Ach nochwas: Mein Div hat einen Border-radius für abgerundete Ecken. Jetzt hat die Outline natürlich auch abgerundete Ecken. Kann ich die Outline wieder gerade machen? Also dass sie nur ein Rechteck ist?

0
Babelfish  07.08.2024, 12:29
@Zebra321

Um den border-radius wegzubekommen muss man tricksen (zumindest kenne ich keinen besseren Weg). Du kannst es bspw. mit dem Pseudoelement ::before machen.

CSS

.order-button {
  position: relative;
  margin: 0;
  border-radius: 12px;  
}

.order-button:hover::before {
  content: " ";
  display: block;
  position: absolute;
  width: 100%;
  height: 100%;
  outline: 3px dotted black;
  outline-offset: 20px;
  border-radius: none;
}

Beispiel

https://jsfiddle.net/Babelfisch/5d4szwhp/14/

1
Zebra321 
Beitragsersteller
 07.08.2024, 12:49
@Babelfish

Interessant. Und wie geht das bei onClick? Also nicht mit :hover sondern bei Klick? Weil momentan hast du ja :hover::before rein CSS, aber Click ist JS.

0
Babelfish  07.08.2024, 13:34
@Zebra321

Da gibt es verschiedene Wege. Ein Weg ist halt für den Button mittels Javascript eine extra Klasse für den Status (z.B. button-active) zu setzen und das dann im CSS mit abzubilden.

Javascript

document.addEventListener("DOMContentLoaded", () => {
  document.querySelectorAll(".order-button").forEach((button) => {
  	button.addEventListener("click", (e) => {
    	e.target.classList.toggle("button-active");
    })
  });
});

CSS

.order-button.button-active::before,
.order-button:hover::before {
  …
}

Beispiel

https://jsfiddle.net/Babelfisch/5d4szwhp/20/

1
Zebra321 
Beitragsersteller
 07.08.2024, 13:43
@Babelfish

Ah ja das macht Sinn. Also einfach der Klasse das ::before Pseudoelement anhängen. Trotzdem ganz schön kompliziert eig. für sowas einfaches ^^ Danke dir

0
Zebra321 
Beitragsersteller
 07.08.2024, 12:12

Jup hatte deine Antwort leider erst danach gelesen, nachdem ich die Frage gestellt habe. Das ist genau was ich gesucht habe, danke.

0