Sollte der Inhalt meines Containers nicht abgeschnitten werden, wenn der Container hat border-radius
?
Beispiel für HTML und CSS:
.progressbar { height: 5px; width: 100px; border-radius: 5px; }
.buffer { width: 25px; height: 5px; background: #999999; }
<div class="progressbar">
<div class="buffer"></div>
</div>
Wie Sie sehen können, verwende ich border-radius
auf dem Container ( .progressbar
), aber der Inhalt ( .buffer
) geht 'außerhalb' des Containers . Ich sehe das auf Google Chrome.
Ist das das erwartete Verhalten?
PS Hier geht es nicht darum, wie man es behebt, sondern darum, ob es so funktionieren soll.
Antworten:
Ja, so verrückt es auch klingt, es ist es tatsächlich. Hier ist der Grund:
Die Standardeinstellung
overflow
für<div>
Elemente (und die meisten anderen Dinge) istvisible
, und die Spezifikation sagt Folgendes ausoverflow: visible
:In §5.3 Eckausschnitt im Modul Hintergründe und Rahmen heißt es wiederum:
Der Satz , dass ich ausdrücklich erwähnt betonte , dass der
overflow
Wert der Box etwas anderes sein muss alsvisible
(das bedeutetauto
,hidden
,scroll
und andere) , um für die Ecken ihrer Kinder zu befestigen.Wenn für das Feld ein sichtbarer Überlauf definiert ist, der, wie gesagt, die Standardeinstellung für die meisten visuellen Elemente ist, sollte der Inhalt überhaupt nicht abgeschnitten werden. Und deshalb gehen die quadratischen Ecken von
.buffer
über die abgerundeten Ecken von.progressbar
.Folglich ist der einfachste Weg, um
.buffer
innerhalb.progressbar
der abgerundeten Ecken zu schneiden, das Hinzufügen einesoverflow: hidden
Stils.progressbar
, wie in dieser aktualisierten Geige gezeigt .quelle
<img src="...">
), muss abgeschnitten werden, da diese Elemente nur den ersetzten Inhalt enthalten können. Wenn nicht, können Sie sich nichtborder-radius
auf Bilder usw. bewerben .Für alle, die sich fragen, was eine Lösung wäre. Am einfachsten wäre es, das CSS zu bearbeiten.
In dem angegebenen Beispiel wäre dies eine geeignete Lösung:
.progressbar { height: 5px; width: 100px; border-radius: 5px; overflow: hidden; }
quelle
Semantisch gesehen ist es am besten, dem inneren Div einfach eine Eigenschaft zum Erben eines Randradius hinzuzufügen, daher die neue Klassenaddition:
.buffer { border-radius: inherit; }
Infolgedessen können Sie für andere Situationen die Verwendung von Überlauf beibehalten: Auto, wenn der Inhalt über Ihre Grenzen hinausgeht und Sie alles sehen möchten.
quelle
overflow: hidden
- viel sauberer als das Festlegen des Randradius für die Kinder nach Zahlen, was ich zu vermeiden gehofft hatte.border-radius
Eigenschaft deckt manchmal nicht den übergeordneten Hintergrund ab. Versuchen Sie es mit einem blutroten Elternhintergrund, und Sie werden es sehen.Diese Frage scheint auf denselben Fehler hinzuweisen, anscheinend handelt es sich um einen Fehler.
Probleme beim Abschneiden des CSS3-Rahmenradius
Bearbeiten
Eek! BoltClock hat erwähnt, dass dies indiziert ist, daher werde ich diese andere SO-Frage zum Thema posten, während ich auch nach einem speziellen Zitat zu diesem Thema suche. Wie verhindere ich mit CSS3, dass ein Bild über ein Feld mit abgerundeten Ecken läuft?
Spezifikationslink
Nur als Referenz werde ich den entsprechenden Link einfügen - aber ich kann nichts explizites zu dem Beispiel finden, das Sie gegeben haben.
CSS-Hintergründe - Abgerundete Ecken
quelle
overflow
Wert, der nicht vorhanden istvisible
, was hier nicht der Fall ist.The content of replaced elements is always trimmed to the content edge curve.
Was bedeuten würde, dass es den Inhalt abschneiden sollte. Oder lese ich es falsch: Pdiv
ist kein ersetztes Element, daher ist dieses Bit irrelevant.replaced elements
?Dies ist, was die Spezifikationen sagen, so sollte es funktionieren. Das heißt aber nicht, dass Chrome das so macht.
http://www.w3.org/TR/css3-background/#border-radius
quelle
Die Kanten und Ecken des übergeordneten Containers sind von Quilt-Elementen bedeckt, sodass der Inhalt des übergeordneten Elements zugeschnitten werden muss, solange der
overflow
Wert nicht festgelegtvisible
ist. Beispiel:.parent { overflow: hidden; border-radius: 5px; }
quelle