Meine Fragen)
Wird eine dieser Methoden von einem professionellen Webdesigner bevorzugt?
Wird eine dieser Methoden beim Zeichnen der Website von einem Webbrowser bevorzugt?
Ist das alles nur eine persönliche Präferenz?
Gibt es andere Techniken, die mir fehlen?
Hinweis: Die obigen Fragen beziehen sich auf das Entwerfen eines mehrspaltigen Layouts
float: left;
Dies ist die Methode, die ich immer beim Erstellen von Spaltenlayouts verwende, und sie scheint gut zu funktionieren. Der Elternteil kollabiert jedoch auf sich selbst, sodass Sie sich danach nur noch daran erinnern müssen clear:both;
. Ein weiterer Nachteil , den ich gerade gefunden habe, war die Unfähigkeit, Text vertikal auszurichten.
Anzeige: Inline;
Dies scheint das Problem des zusammenbrechenden übergeordneten Elements zu beheben, fügt jedoch Leerzeichen hinzu.
Das Entfernen von Leerzeichen aus HTML scheint die einfachste Lösung für dieses Problem zu sein, ist jedoch nicht erwünscht, wenn Sie in Bezug auf Ihr HTML wirklich wählerisch sind.
Anzeige: Inline-Block;
Scheint sich genau so zu verhalten display:inline;
.
Anzeige: Tabellenzelle;
Funktioniert perfekt.
Meine Gedanken:
Ich bin mir sicher, dass mir eine Menge Dinge fehlen, wie bestimmte Ausnahmen, die das Layout beschädigen, display:table-cell;
aber am besten zu funktionieren scheinen, und ich denke, ich werde anfangen zu ersetzen, float:left;
da ich immer durcheinander zu sein scheine clear:both;
. Ich habe viele Artikel und Blogs darüber im Internet gelesen, aber keiner von ihnen gibt mir eine eindeutige Antwort darauf, was ich beim Layout meiner Website verwenden sollte.
display: inline
Eigenschaft zu verwenden, und festgestellt, dass das Auffüllen der untergeordneten Elemente nicht korrekt ist. Aber wenn ich das benutze, wirddisplay: inline-block
dies automatisch erledigt. Bitte sehen Sie den Link - codepen.io/prashdeep/pen/rVOyvd Bitte teilen Sie mir Ihre Eingaben auf dem gleichenAntworten:
Von den Optionen, nach denen Sie gefragt haben:
float:left;
Ich mag Floats nicht, weil ich zusätzliche Markups brauche, um den Float zu löschen. Für mich war das gesamte
float
Konzept in den CSS-Spezifikationen schlecht gestaltet. Daran können wir jetzt aber nichts ändern. Wichtig ist jedoch, dass es funktioniert und in allen Browsern (auch in IE6 / 7) funktioniert. Verwenden Sie es also, wenn Sie es mögen.Das zusätzliche Markup zum Löschen ist möglicherweise nicht erforderlich, wenn Sie
:after
die Floats mit dem Selektor löschen. Dies ist jedoch keine Option, wenn Sie IE6 oder IE7 unterstützen möchten.display:inline;
Dies sollte nicht für das Layout verwendet werden, mit Ausnahme von IE6 / 7, wo
display:inline; zoom:1
ein Fallback-Hack für die defekte Unterstützung für istinline-block
.display:inline-block;
Dies ist meine Lieblingsoption. Es funktioniert gut und konsistent in allen Browsern, mit einer Einschränkung für IE6 / 7, die es für einige Elemente unterstützt. Aber siehe oben für die hackige Lösung, um dies zu umgehen.
Die andere große Einschränkung
inline-block
ist, dass aufgrund des Inline-Aspekts die Leerzeichen zwischen Elementen genauso behandelt werden wie Leerzeichen zwischen Textwörtern, sodass Lücken zwischen Elementen auftreten können. Es gibt Workarounds, aber keine davon ist ideal. (Das Beste ist einfach, keine Leerzeichen zwischen den Elementen zu haben.)display:table-cell;
Eine andere, bei der Sie Probleme mit der Browserkompatibilität haben. Ältere IEs funktionieren damit überhaupt nicht. Aber auch für andere Browser ist es erwähnenswert, dass
table-cell
sie in einem Kontext verwendet werden, in dem sie sich in Elementen befinden, die alstable
und gestaltet sindtable-row
. Dietable-cell
isolierte Verwendung ist nicht die beabsichtigte Methode, daher kann es vorkommen, dass verschiedene Browser sie unterschiedlich behandeln.Andere Techniken, die Sie vielleicht verpasst haben? Ja.
Da Sie sagen, dass dies für ein mehrspaltiges Layout gilt, gibt es eine CSS -Spaltenfunktion, über die Sie möglicherweise Bescheid wissen möchten. Es ist jedoch nicht die am besten unterstützte Funktion (wird vom IE selbst in IE9 nicht unterstützt und ein Herstellerpräfix wird von allen anderen Browsern benötigt), sodass Sie sie möglicherweise nicht verwenden möchten. Aber es ist eine andere Option, und Sie haben gefragt.
Es gibt auch die CSS FlexBox-Funktion, mit der Text von Feld zu Feld fließen kann. Es ist eine aufregende Funktion, die einige komplexe Layouts ermöglicht, die sich jedoch noch in der Entwicklung befindet - siehe http://html5please.com/#flexbox
Hoffentlich hilft das.
quelle
inline-block
weil es genau für diese Fälle gemacht ist.em
s verwenden. Dies bedeutet, dass dies möglicherweise nicht in allen Fällen eine geeignete Lösung ist. Vielleicht möchten Sie auch diese Antwort sehen, die ich separat gepostet habe und die diesen Punkt abdeckt, sowie andere Optionen für die Behandlung des Leerraumproblems.Normalerweise verwende
float: left;
und füge ich hinzuoverflow: auto;
, um das zusammenbrechende übergeordnete Problem zu lösen (warum dies funktioniert,overflow: auto
wird das übergeordnete Problem erweitert, anstatt Bildlaufleisten hinzuzufügen, wenn Sie ihm keine explizite Höhe geben,overflow: hidden
funktioniert auch). Die meisten vertikalen Ausrichtungsanforderungen, die ich hatte, beziehen sich auf eine Textzeile in Menüleisten , die mithilfe vonline-height
Eigenschaften gelöst werden kann . Wenn ich ein Blockelement wirklich vertikal ausrichten muss, würde ich eine explizite Höhe für das übergeordnete Element und das vertikal ausgerichtete Element festlegen, die Position absolut, die oberen 50% und den negativen Rand.Der Grund, den ich nicht verwende,
display: table-cell
ist die Art und Weise, wie es überläuft, wenn Sie mehr Elemente haben, als die Breite der Site verarbeiten kann. Die Tabellenzelle zwingt den Benutzer zum horizontalen Scrollen, während Floats das Überlaufmenü umschließen, sodass es weiterhin verwendet werden kann, ohne dass horizontales Scrollen erforderlich ist.Das Beste an float: left und overflow: auto ist, dass es ohne Hacks bis zum IE6 zurückkehrt, wahrscheinlich sogar noch weiter.
quelle
Ich würde sagen, es hängt davon ab, wofür Sie es brauchen:
Wenn Sie es nur benötigen, um ein 3-Spalten-Layout zu erhalten, würde ich vorschlagen, es mit zu tun
float
.Wenn Sie es für das Menü benötigen, können Sie es verwenden
inline-block
. Für das Leer Problem, können Sie einige Tricks verwenden , wie von Chris Coyier hier beschrieben http://css-tricks.com/fighting-the-space-between-inline-block-elements/ .Wenn Sie eine Multiple-Choice-Option auswählen müssen, bei der die Breite innerhalb eines bestimmten Felds gleichmäßig verteilt sein muss, würde ich es vorziehen
display: table
. Dies funktioniert in einigen Browsern nicht richtig, daher hängt es von der Unterstützung Ihres Browsers ab.Schließlich ist die vielleicht beste Methode die Verwendung
flexbox
. Die Spezifikation hierfür hat sich einige Male geändert, daher ist sie noch nicht stabil. Aber sobald es fertig ist, wird dies die beste Methode sein, die ich denke.quelle
Ich bevorzuge Inline-Block, obwohl Float auch nützlich ist. Tabellenzellen werden von alten IEs nicht korrekt gerendert (Inline-Block auch nicht, aber es gibt den
zoom: 1; *display: inline
Hack, den ich häufig verwende). Wenn Sie Kinder haben, die eine geringere Größe als ihre Eltern haben, bringen Floats sie nach oben, während Inline-Block manchmal Fehler macht.Meistens interpretiert der Browser alles richtig, es sei denn natürlich, es ist IE. Sie müssen immer überprüfen, ob der IE nicht saugt - zum Beispiel das Tabellenzellenkonzept.
In Wirklichkeit läuft es auf persönliche Vorlieben hinaus.
Eine Technik, die Sie verwenden könnten, um Leerzeichen zu entfernen, wäre
font-size
, dem Elternteil eine 0 zu setzen und dannfont-size
den Kindern das Zurück zu geben , obwohl dies mühsam und grob ist.quelle
Nur für den Datensatz, um Spudleys Antwort zu ergänzen, gibt es auch die Möglichkeit,
position: absolute
und Ränder zu verwenden, wenn Sie die Spaltenbreiten kennen.Für mich ist das Hauptproblem beim Chossing einer Methode, ob Sie die Spalten benötigen, um die gesamte Höhe (gleiche Höhen) auszufüllen, wobei Tabellenzellen die einfachste Methode sind (wenn Sie ältere Browser nicht besonders mögen).
quelle
Ich bevorzuge
inline-block
, aberfloat
es ist immer noch eine nützliche Möglichkeit, HTML-Elemente zusammenzustellen, insbesondere wenn wir Elemente haben, die man links und rechts halten sollte. Float funktioniert besser, wenn weniger Zeilen geschrieben werden, während Inline-Block in vielen anderen Fällen gut funktioniert .quelle