2017-12-24 8 views
1

Ich bin heute etwas sehr merkwürdiges begegnet. Wenn der Stil overflow: hidden zu einem div hinzugefügt wird, wenn sein Inhalt einen Header hat, erhält er zusätzlichen Leerzeichen, der wie Rand oder Padding aussieht. Die Menge ist klein, also hätte ich es normalerweise nicht bemerkt, oder es wäre mir egal, aber das Problem ist, dass ich eine Animation mache, und dieser Rand/Abstand macht es kaputt. Stundenlang dachte ich, dass es die Animation war, die falsch war, aber ich habe es schließlich geschafft, mich darauf zu beschränken.Warum Überlauf: versteckt hinzufügen Polsterung/Marge?

Hier ist der Code mit Überlauf:

<div style="overflow:hidden"> 
    <ng-content select="wizard-step"></ng-content> 
</div> 

Der ng-Gehalt macht dies:

<h5><strong>testing bootstrap header</strong></h5> 
<search-select #select [placeholder]="'Busca audiencias...'" (selected)="onSelected($event); select.text = ''" [template]="template" property="name" [items]="catalogAudiences | filterAudiences:audiences"></search-select> 
<div class="mt-3"> 
    <div *ngIf="!audiences?.length" class="alert alert-primary"> 
     No has agregado audiencias. 
    </div> 
    <audiences-list (remove)="onRemove($event)" [readOnly]="true" [audiences]="audiences"></audiences-list> 
</div> 

Und es sieht wie folgt aus: enter image description here

Ich möchte Sie auf die Pfeile, bemerken, welche den zusätzlichen Raum zeigen, über den ich spreche. Zum Vergleich: das ist, was es sieht aus wie wenn ich entferne style="overflow:hidden":

enter image description here

Ich weiß, es könnte zu sagen, hart sein, aber es ist fast wie wenn der „Prüfung Bootstrap-Header“ wird einigen unerwünschten Spielraum bekommen, wenn das div hat overflow: hidden, was meine Animation vermasselt. Wie kann ich das beheben?

Ich benutze Bootstrap 4 und Angular 5, wenn das hilft.

+0

Wenn Sie Element prüfen, welche anderen CSS-Attribute sehen Sie auf den Container- und inneren divs? Vor allem Position, Anzeige, Float? Meine Vermutung ist, dass das Überlaufattribut den Stapelkontext auf unerwartete Weise durcheinanderbringt. – cheryllium

+0

@cheryllium, ich habe das versucht und ich konnte nichts ungewöhnliches finden. Ich bin nicht der Beste, wenn es um CSS geht, also ist es nicht so, als wüsste ich, wonach ich suchen soll, aber trotzdem. Nach weiteren Tests habe ich auch festgestellt, dass dies nur Auswirkungen hat, Header (

in diesem Fall). Wenn ich dieses Element entferne, passiert nichts Falsches, es wird kein zusätzlicher Platz hinzugefügt. Es könnte auch mit anderen Tags passieren, aber das ist es, was ich bisher habe. – Christian

+0

Können Sie teilen, was anderes CSS auf diesen Attributen gibt? – cheryllium

Antwort

1

Die Chancen stehen gut, die h5 (das „Testen Bootstrap-Header“) hat einen oberen Rand entweder vom Browser defaults oder Bootstrap, durch die die betroffenen, dass Sein div overflow: hidden (die er einen Block-Formatierungskontext schaffen bewirkt, dass die Margen Kind Blöcke aus kollabiert mit ihren Eltern Margen). Siehe collapsing margins in der Spezifikation.

Wenn das Entfernen des oberen Randes dies behebt, ist das Ihre Antwort.

+0

Ich kam zu einem ähnlichen Schluss mit [this jsfiddle] (https://jsfiddle.net/ConnorsFan/43666wwd/). Der obere Rand des "body" -Elements scheint mit dem Rand des 'h5'-Elements zu kollabieren. Das Entfernen des Randes des Körpers löst das Problem, soweit ich in diesem Fall sehen kann. – ConnorsFan

+0

Ja, das hat funktioniert. Gibt es eine Möglichkeit, die Ränder des Inhalts zu blockieren, dass die ganze Zeit ohne Überlauf kollabiert: versteckt? So würde es zumindest nicht auffallen. Im Grunde brauche ich Überlauf: versteckt während einer Slide-In/Out-Animation, aber sobald es entfernt ist, wird der zusätzliche Rand ebenfalls entfernt und Sie erkennen sofort, wie unnatürlich das Ende der Animation aussieht. So, jetzt möchte ich in der Lage sein, die kollabierenden Ränder auch ohne Überlauf zu deaktivieren: versteckt. Das Entfernen des oberen Randes von den Bootstrap-Headern ist nicht wirklich eine Option, da dies eine wiederverwendbare Komponente mit beliebigem Inhalt sein sollte. – Christian

+0

ich es geschafft, es zu beheben, indem das Einfügen vor und nach dem 'ng-content': ' '

.
Es funktioniert und die Animation sieht jetzt gut, aber der Mensch, das ist hässlich und fühlt sich an wie ein Hack. Denkst du, dass es einen besseren Weg gibt? – Christian

Verwandte Themen