Ughck, versehentlicher horizontaler Scrollbalken, oder?
Das kann mühsam sein, aber normalerweise finden Sie das problematische Element, indem Sie sich durch die DevTools navigieren und Elemente auswählen, bis Sie etwas finden, das zu weit nach rechts ragt (links ragt es nicht so leicht aus dem Rand und löst einen Scrollbalken aus) und es anpassen.
Manchmal benutze ich die Funktion „Knoten löschen“ der DevTools, um Dinge von der Seite zu entfernen, bis der Scrollbalken verschwindet. Dann weiß ich, welches Element es verursacht hat, und kann von dort aus weiter untersuchen. Hier ist ein superkurzes Video einer solchen Fehlerbehebung
In einigen Fällen gibt es möglicherweise ein Element, das buchstäblich breiter als das Dokument ist, was zu horizontalem Überlauf-Scrolling führen kann. Sie könnten ein wenig JavaScript verwenden, um den Schuldigen zu finden.
var docWidth = document.documentElement.offsetWidth;
[].forEach.call(
document.querySelectorAll('*'),
function(el) {
if (el.offsetWidth > docWidth) {
console.log(el);
}
}
);
Was etwas wie folgendes finden könnte

Ein weiterer kleiner Trick, der mir manchmal hilft, ist, so zu scrollen, dass der überlaufende Bereich sichtbar wird, und dann auf „Element untersuchen“ in diesem Bereich zu klicken, um zu sehen, ob Sie das problematische Element ansprechen können.
Versteckter horizontaler Überlauf
Manchmal ist horizontaler Überlauf schwerer zu fassen. Zum Beispiel, wenn er keinen horizontalen Scrollbalken auslöst, Sie aber den Überlauf trotzdem durch Wischen mit einem Touchpad oder durch Ziehen und Auswählen sichtbar machen können.
Ich habe eine einfache Demo dieses Szenarios erstellt, sehen Sie sich dieses GIF an

Was dort passiert, ist, dass ein Element dort, außerhalb des Bildschirms, mit opacity: 0; positioniert ist, sodass Sie es nicht sehen können. Normalerweise würde das horizontalen Überlauf und einen horizontalen Scrollbalken auslösen, aber wir verstecken ihn explizit
body {
overflow-x: hidden;
}
.hidden-thing {
position: absolute;
left: 100%;
width: 50px;
height: 50px;
opacity: 0;
}
In den meisten Szenarien, wenn ein Element außerhalb der Grenzen eines Elements mit verstecktem Überlauf verborgen ist, ist es einfach aus der visuellen Welt verschwunden. Aber mit dem Dokument selbst können Sie immer noch dorthin scrollen. Seltsam, aber wahr. Es ist wahrscheinlich sogar ein Fehler, denn wenn Sie overflow: hidden; statt overflow-x: hidden; verwenden, stoppt es. Es ist nur üblicher und praktischer, overflow-x zu verwenden.
Beachten Sie, dass dies ein Problem in Desktop-Blink- oder WebKit-basierten Browsern ist. Kein Problem in Gecko oder auf Mobilgeräten, soweit ich das gesehen habe.
Ausgeblendete Offscreen-Elemente sind nicht gerade selten. Ich denke, das wird mit Animationen, Übergängen, 3D-Effekten, Material Design und Übergangs-Interfaces immer häufiger. Ich bin auf dieses Problem gestoßen, als ich das Suchformular auf CodePen entworfen habe, das sich beim Klicken auf etwas herausgleitet. Vereinfacht wäre das so

Die Lösung in diesem Fall ist, *den Überlauf auf einem Elternelement zu verstecken*, anstatt sich auf den versteckten Überlauf des Körpers zu verlassen.
Neato, danke
Inspektor öffnen -> „Neue Stilregel“
Sie können immer hinzufügen:
opacity: 1 !important; visibility: visible !important;, wenn Sie denken, dass Sie ein verstecktes Element haben könnten, aber normalerweise funktioniert das obige sofort für mich.Das. Schnell, einfach, effektiv.
+1 dazu.
Kam hierher, um das zu sagen.
Ich bin irgendwie nie darauf gekommen, das zu tun. Sehr cooler Tipp!
Nun, wenn Sie das ohne das richtige Box-Modell tun, addieren Sie 2px zu jedem Element hinzu, was wiederum die gesamte Seite durcheinander bringt.
Ich würde das selektiv tun, nur bei gefloateten divs oder so.
normalerweise benutze ich *{ border:1px solid #red !important} um das Element zu finden, aber die .js-Lösung sieht sehr nützlich aus
mit einem Bookmarklet ist das großartig :)
danke
Ooh! Oder Sie könnten es modifizieren, um die Schuldigen rot zu umranden. Das Beste aus beiden Welten :)
javascript:void(function () {var docWidth = document.documentElement.offsetWidth;[].forEach.call(document.querySelectorAll(‘*’), function (el) {if (el.offsetWidth%3EdocWidth) el.style.border = “1px solid red”})})();
Das Beste vom Besten :)
javascript:void(function () {var docWidth = document.documentElement.offsetWidth;[].forEach.call(document.querySelectorAll(‘*’), function (el) {if (el.offsetWidth>docWidth) {el.style.outline = “1px solid red”; console.log(el);}})})();
Sie sollten sich wirklich mit Tastenkombinationen beschäftigen. Knoten können mit der Entf-Taste gelöscht werden. Viel schneller.
Es ist etwas schwierig, eine Tastenkombination per Screencast aufzunehmen. Es gibt kleine Apps, die zeigen, welche Taste Sie drücken, wenn Sie sie drücken, aber es ist irgendwie nervig.
Sicher, für den Screencast mag es sichtbarer sein. Aber Sie wollen auch den produktiveren Weg lehren (als Entwickler würden wir auch die Tastatur zum Kopieren/Einfügen oder Löschen von Textzeichen verwenden, nicht durch Auswahl und Entfernung über ein Kontextmenü).
Außerdem müssen Sie die Seite nicht neu laden, um die letzte wiederherzustellen (wenn Sie tiefer gehen), machen Sie einfach die letzte Entfernung rückgängig über das Menü (oder cmd Z).
Ich muss sagen, dass das Fehlen beider Punkte im Video das Anschauen ziemlich schmerzhaft machte. Ich hoffe, Sie können diese beiden Tipps schätzen!
Das ist alles ein bisschen übertrieben... installieren Sie einfach die Webentwicklungs-Toolbar in Firefox... klicken Sie auf „Outline – Outline all block level elements“, das zeigt Ihnen in kürzester Zeit, wo der Schuldige ist.
Rob
die meisten Leute wollen keine veraltete Erweiterung nur dafür installieren.
Ich nutze das immer als Ausrede, um die 3D-Ansicht der FireFox-Entwicklertools zu starten. Ich kann mich dann darin bewegen und sehen, welche unsichtbaren Dinge im Randbereich hängen.
Gleicher Code, nur mit einem TreeWalker: https://gist.github.com/cuth/c1ddf2b1ce2fb07e512a
Warum ein
TreeWalker? Sie gewinnen nichts damit, und Sie verlieren die Kompatibilität mit IE8-.mit einem Bookmarklet ist das großartig :) Danke :)
Ein Element kann den horizontalen Scrollbalken auslösen, auch wenn seine Breite kleiner als
document.documentElement.offsetWidthist. Hier istgetBoundClientRectnützlich, da es die Position eines Elements relativ zum *aktuellen Viewport* angibt.Denken Sie daran, dass die Verwendung von
outlinebesser ist alsborder, da ein Outline keinen Platz bei der DOM-Positionierung einnimmt.Ich mag Ihre Idee, 'getBoundingClientRect' zu verwenden! Aber ich verstehe die If-Anweisung nicht.
Brauchen Sie nicht etwas wie
Übrigens, tuts+ ist ein großartiger Ort, um diesen Code zu testen :)
(PS Sie haben Recht, der TreeWalker ist unnötig.)
Ich glaube, wenn das Problem nicht vom Überlauf herrührt (aber das wäre in GECKO kein Problem!)...
Wir können stattdessen Gecko verwenden. Ich meine, wenn Ihr Grafiktreiber „WEBGL“ unterstützt, können Sie die „3D“-Ansicht des Standard-Inspektionstools von Firefox auf dem PC verwenden!?!
Wenn wir die 3D-Ansicht verwenden, können wir den Stapel perfekt sehen und auch beobachten, was die Abmessungen einer bestimmten Box überschreitet.
Ich bin neulich auf genau dieses Problem auf einer WordPress-Website gestoßen, an der ich arbeitete. Die Behebung war wegen der Art und Weise, wie andere Elemente positioniert waren, eine echte Qual. Nächstes Mal bringen Sie diese Tipps ein paar Tage früher heraus!
Unser Ansatz war, immer ein Div direkt innerhalb des Body-Tags zu haben, mit einem Inline-Stil von overflow:hidden.
Ich finde, ich kann dann alle möglichen Dinge absichtlich links und rechts über den Rand hinausragen lassen, ohne sie einzeln debuggen zu müssen, was hauptsächlich Off-Canvas-Menüs, stilistisch platzierte Bilder, deren versteckten Bereich bei einer anderen Viewportgröße angezeigt werden muss, und verschiedene Elemente sind, die ein- und ausgebjekt werden.
Ich weiß, das ist ein etwas anderer Blickwinkel als der Beitrag, der versucht, unbeabsichtigte Brüche zu diagnostizieren und zu beheben, dachte aber, es könnte jemandem helfen.
+1 für den JS-Schnipsel und das Bookmarklet :)