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.