Rolf B: Positionierung des details Button!

Beitrag lesen

Hallo anko,

da gibt's ein Grundsatzproblem. <p> ist ein Element mit Inhaltskategorie "phrasing content" (schwer zu übersetzen, "Stil-Elemente". Im Prinzip Inline-Text mit Gestaltungs-Markup).

Aber <details> hat diesen Inhaltstyp nicht. Es ist allgemein vom Inhaltstyp "flow content" und gehört demnach in ein <p> Element nicht hinein. Der Browser weiß das. Wenn Du sowas formuliertst:

<p>Textkörper 1. <details>...</details> </p>

dann beendet der Browser das <p> vor dem <details>.

Man muss die Darstellung schon ziemlich vergewaltigen.

<style>
p.pre-details {
   display: inline-block;
}
details:not([open]) {
   display: inline-block;
   margin-left: 1em;
}
</style>
...
<p class="pre-details">Absatz vor Details.</p>
<details>
   <summary>Klapptext</summary>
   <p>Detailstext 1.</p>
   <p>Detailstext 2.</p>
<details>
<p>Absatz nach Details.</p>

Wichtig: die eckigen Klammern in :not([open]). Es geht darum, die Nichtexistenz des open-Attributs zu prüfen. Das margin-left: 1em lässt es etwas besser aussehen. Ist vielleicht schon zu viel.

Allerdings stimmt da der Abstand zwischen den Absätzen vor und nach Details nicht, weil bei zwei aufeinander folgenden <p> die Margins zusammenfallen. Diese <p> hier haben aber unterschiedliches display und darum passiert das nicht. Du brauchst noch einen Style mehr:

details + p {
   margin-top: 0;
}

aber da musst Du je nach Anwendungsfall aufpassen, das wird nicht unbedingt immer das Richtige sein.

Rolf

--
sumpsi - posui - clusi