Verhindern Sie, dass sich flexible Gegenstände dehnen


94

Stichprobe:

div {
  display: flex;
  height: 200px;
  background: tan;
}
span {
  background: red;
}
<div>
  <span>This is some text.</span>
</div>

Ich habe zwei Fragen, bitte:

  1. Warum passiert es im Grunde dem span?
  2. Was ist der richtige Ansatz, um zu verhindern, dass es sich dehnt, ohne andere Flex-Elemente in einem Flex-Container zu beeinträchtigen?

Antworten:


163

Sie möchten die Spannweite nicht in der Höhe dehnen?
Sie haben die Möglichkeit, einen oder mehrere Flex-Artikel so zu beeinflussen, dass sie nicht die gesamte Höhe des Containers ausdehnen.

Um alle Flex-Elemente des Containers zu beeinflussen, wählen
Sie Folgendes: Sie müssen festlegenalign-items: flex-start;, dassdivalle Flex-Elemente dieses Containers die Höhe ihres Inhalts erhalten.

div {
  align-items: flex-start;
  background: tan;
  display: flex;
  height: 200px;
}
span {
  background: red;
}
<div>
  <span>This is some text.</span>
</div>

Um nur ein einzelnes Flex-Element zu beeinflussen, wählen
Sie Folgendes : Wenn Sie ein einzelnes Flex-Element auf dem Container entfernen möchten, müssen Siealign-self: flex-start;dieses Flex-Elementfestlegen. Alle anderen Flex-Elemente des Containers sind nicht betroffen.

div {
  display: flex;
  height: 200px;
  background: tan;
}
span.only {
  background: red;
  align-self:flex-start;
}
span {
    background:green;
}
<div>
  <span class="only">This is some text.</span>
  <span>This is more text.</span>
</div>

Warum passiert das mit dem span?
Der Standardwert der Eigenschaft align-itemsist stretch. Dies ist der Grund, warum spandie Höhe der füllen div.

Unterschied zwischen baselineund flex-start?
Wenn Sie Text auf den Flex-Elementen mit unterschiedlichen Schriftgrößen haben, können Sie die Grundlinie der ersten Zeile verwenden, um das Flex-Element vertikal zu platzieren. Ein Flex-Element mit einer kleineren Schriftgröße hat oben etwas Platz zwischen dem Container und sich selbst. Mit flex-startdem Flex-Item wird auf die Oberseite des Containers gesetzt (ohne Platz).

div {
  align-items: baseline;
  background: tan;
  display: flex;
  height: 200px;
}
span {
  background: red;
}
span.fontsize {
  font-size:2em;
}
<div>
  <span class="fontsize">This is some text.</span>
  <span>This is more text.</span>
</div>

Weitere Informationen zum Unterschied zwischen baselineund finden Sie flex-starthier:
Was ist der Unterschied zwischen Flex-Start und Baseline?


1
Vielen Dank für die Antwort, aber sie betrifft alle Flex-Elemente. Und eine Frage: Was ist der Unterschied zwischen baselineund flex-startWerten? Ihre Ergebnisse scheinen gleich zu sein. Können sie in einer Situation anders sein?
Mori

Scheint großartig! Ich wäre Ihnen dankbar, wenn Sie mir auch den Unterschied zwischen baselineund flex-startWerten mitteilen würden .
Mori


Tipp: Wenn Sie sie horizontal ausrichten möchten, verwenden Sie einfach align-items: center;:)
Ricardo Zea

#Hack: Wickeln Sie Ihr Element mit einem neuen div. Dadurch wird das neue übergeordnete Div gedehnt und Ihr Element bleibt unberührt.
user1948585
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.