Ist es falsch, ein Blockelement in CSS zu ändern, wenn es ein anderes Blockelement enthält?

Lesezeit: 4 Minuten

Benutzer-Avatar
Matthäus James Taylor

Ich weiß, dass es falsch ist, ein Blockelement in ein Inline-Element einzufügen, aber was ist mit dem Folgenden?

Stellen Sie sich dieses gültige Markup vor:

<div><p>This is a paragraph</p></div>

Fügen Sie nun dieses CSS hinzu:

div {
   display:inline;
}

Dadurch entsteht eine Situation, in der ein Inline-Element ein Blockelement enthält (das div wird inline und das p ist standardmäßig ein Block).

Sind die Seitenelemente noch gültig?

Wie und wann beurteilen wir, ob der HTML-Code valide ist – bevor oder nachdem die CSS-Regeln angewendet wurden?

AKTUALISIEREN: Ich habe seitdem gelernt, dass es in HTML5 vollkommen gültig ist, Elemente auf Blockebene in Link-Tags einzufügen, z.

<a href="#">
      <h1>Heading</h1>
      <p>Paragraph.</p>
</a>

Dies ist tatsächlich sehr nützlich, wenn Sie möchten, dass ein großer HTML-Block ein Link ist.

  • Ich bin froh, dass HTML5 dies für gültig hält, aber gültiger Code ist nicht das A und O des Webs. Die Googles verwenden Code, der wie eine schrecklich kaputte Tag-Suppe aussieht, aber es funktioniert.

    – JKirchartz

    10. Februar 2012 um 21:06 Uhr

Wenn es eine Logik gibt, der du folgst, und du sie am Ende so umsetzt, ist das NICHT FALSCH. Arbeitende Dinge sind nicht “falsch”, nur weil sie seltsam sind. Ja, es ist ziemlich ungewöhnlich, aber es hilft und es ist kein Fehler. Es ist beabsichtigt. HTML und CSS sollten Ihnen dienen, nicht umgekehrt, also hören Sie niemals auf Kommentare, die Ihnen sagen, es nicht zu tun, nur weil es hässlich ist.

Es ist typisch, eine Lösung als „ungültig“ zu bezeichnen und einen langen Weg um den Block vorzuschlagen. Manchmal kann man überdenken, was man getan hat. Aber es kann viele Gründe für das geben, was Sie getan haben, und sie berücksichtigen sie nicht.

Ich verwende regelmäßig Blöcke innerhalb von Inlines. Es ist gültig und es funktioniert – es ist nur in den meisten Fällen nicht notwendig. Na und. Denken Sie daran, als XHTML uns sagte, wir sollten Eigenschaften immer in Anführungszeichen setzen (und alle haben Sie angeschrien, wenn Sie es nicht getan haben!), erlaubt HTML5 jetzt, sie wegzulassen, wenn darin kein Platz ist. Was ist mit dem letzten Schrägstrich nach Singular-Tags passiert? “
” ? Komm schon. Normen ändern sich. Aber Browser unterstützen weiterhin auch Nicht-Standard-Dinge. CENTER ist veraltet; Wir haben 2013 und es funktioniert immer noch. TISCH für vertikale Zentrierung? Manchmal ist es der einzige Weg. DIV innerhalb von A, damit es wie geplant schwebt? Fahre einfach fort.

Konzentrieren Sie sich auf wichtige Dinge.

  • Das Problem bei der Verwendung von Browsern zur Validierung des Codes besteht darin, dass Sie die Seite für jede neue Version jedes Browsers auf jedem System, auf dem die Seite funktionieren soll, erneut validieren müssen …

    – Gufa

    14. April 2009 um 7:37 Uhr

  • Ja, das ist ein echtes Problem, ich weiß. Browser ist kein Validator 🙂 Und ich denke, die Frage nach der Validierung von HTML+CSS-Ergebnissen ist eine Geschmacksfrage. Menschlicher Faktor.

    – Sergej Kowalenko

    15. April 2009 um 10:33 Uhr

Der HTML-Code wird unabhängig vom CSS validiert, sodass die Seite weiterhin gültig wäre. Ich bin mir ziemlich sicher, dass die CSS-Spezifikation auch nichts darüber aussagt, aber zitieren Sie mich nicht dazu. Ich wäre jedoch sehr vorsichtig mit einer solchen Technik, da sie zwar in einigen Browsern wie beabsichtigt gerendert werden könnte, Sie sie jedoch alle testen müssten – ich sehe nicht, dass viele Garantien gegeben werden.

Nein, es ist keine falsche Wahl. Wir können nach Bedarf verwenden.

Benutzer-Avatar
Guffa

Unabhängig davon, ob es gültig ist oder nicht, die Elementstruktur ist falsch. Blockelemente werden nicht in Inline-Elemente eingefügt, damit der Browser die Elemente auf leicht vorhersagbare Weise rendern kann.

Auch wenn es keine Regeln für HTML oder CSS bricht, erstellt es dennoch Elemente, die nicht wie beabsichtigt gerendert werden können. Der Browser muss die Elemente so behandeln, als wäre der HTML-Code ungültig.

  • Was tun Sie also, wenn eine ganze Zeile in einer Tabelle anklickbar sein soll?

    – mgPePe

    10. März 2012 um 18:57 Uhr

  • @mgPePe: Es gibt mehrere Möglichkeiten. Sie können einen Link in jede Zelle in der Zeile einfügen, Sie können Javascript verwenden, um das Klickereignis in der Zeile abzufangen, oder Sie können etwas anderes als eine Tabelle verwenden.

    – Gufa

    11. März 2012 um 12:42 Uhr

  • Ja, JS ist eine gute Lösung. Was ich am Ende tat, war, eine zu haben a mit verschachtelt span display="block" nach diesem Beispiel: jakpsatweb.cz/css/css-vertical-center-solution.html

    – mgPePe

    12. März 2012 um 8:03 Uhr

  • @Guffa Ich habe abgelehnt, weil es mir seltsam erscheint, einfach zu behaupten, dass etwas „falsch“ ist, obwohl die Spezifikation besagt, dass es gültig ist, und ich Ihrer Antwort nicht entnehmen kann, wann – wenn überhaupt – das richtige Verhalten des Browsers auftreten würde unklar sein. Vielleicht fehlt mir etwas, aber nachdem ich dies gelesen habe, ist mir nicht klar, dass die Behauptung das ist “Es erstellt Elemente, die nicht wie beabsichtigt gerendert werden können” wahr ist, oder sogar was das bedeutet.

    – Mark Amery

    12. April 2015 um 17:35 Uhr

  • @MarkAmery: Die Spezifikation gibt nicht an, dass sie gültig ist.

    – Gufa

    12. April 2015 um 19:28 Uhr

1006820cookie-checkIst es falsch, ein Blockelement in CSS zu ändern, wenn es ein anderes Blockelement enthält?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy