Beim Klicken füge ich hinzu, 1px Rand zu div, so dass Div Größe um 2px X 2px erhöht. Ich möchte nicht, dass die Div-Größe erhöht wird. Gibt es eine einfache Möglichkeit, dies zu tun?
Unordentlich Detaillierte Erklärung
Eigentlich füge ich DIVs mit float: left (gleiche Größe, wie Symbole) zu einem Container-Div hinzu, sodass alle nacheinander gestapelt werden und wenn (Container-Div-Breite 300px) kein Platz mehr in der Breite übrig bleibt Untergeordnete DIVs werden in der nächsten Zeile angezeigt, daher ähnelt dies dem Katalog. Da jedoch nur die ausgewählte DIV-Größe des Rahmens erhöht wird, wird die DIV unter der ausgewählten DIV nach rechts verschoben und ein leerer Bereich unter der ausgewählten DIV erstellt.
BEARBEITEN:
Verringern der Höhe / Breite bei der Auswahl, aber wie man sie wieder erhöht. Verwenden Sie ein Framework von Drittanbietern, haben Sie also kein Ereignis, wenn DIV die Auswahl verliert.
Antworten:
Die Eigenschaft border css erhöht alle "äußeren" Elemente, mit Ausnahme von tds in Tabellen. Auf der Registerkarte HTML-> Layout erhalten Sie eine visuelle Vorstellung davon, wie dies in Firebug ( eingestellt ) funktioniert.
Nur als Beispiel hat ein Div mit einer Breite und Höhe von 10 Pixel und einem Rand von 1 Pixel eine äußere Breite und Höhe von 12 Pixel.
In Ihrem Fall können Sie die Breite und Höhe des Elements um das Doppelte Ihrer Rahmengröße reduzieren, um den Eindruck zu erwecken, dass sich der Rand auf der "Innenseite" des div befindet. In Ihrer ausgewählten CSS-Klasse können Sie das Gleiche tun die Elemente Polsterung.
Z.B:
quelle
outline
eines Rahmens mit derselben Farbe wie der Hintergrund (und das Ändern der Farbe in eine andere Farbe bei Auswahl) ist flexibler.border-color: transparent
Dies ist auch in diesem Szenario hilfreich. Sie können damit Rahmen festlegen, ohne die Div-Breite zu ändern
Entnommen aus http://css-tricks.com/box-sizing/
quelle
Legen Sie einen Rahmen fest, bevor Sie auf die gleiche Farbe wie der Hintergrund klicken.
Wenn Sie dann auf klicken, ändern Sie einfach die Hintergrundfarbe und die Breite ändert sich nicht.
quelle
border-color: transparent
Eine andere gute Lösung ist,
outline
anstelle von zu verwendenborder
. Es wird ein Rahmen hinzugefügt, ohne das Box-Modell zu beeinflussen. Dies funktioniert unter IE8 +, Chrome, Firefox, Opera und Safari.( https://stackoverflow.com/a/8319190/2105930 )
quelle
box-shadow
gemäß meiner anderen Antwort eine ähnliche Frage zu verwenden. Es hat nicht die gleiche Browserunterstützung, aber das ist heutzutage weniger ein Problem.box-shadow
kann auch einseitige Grenze unterstützen, Präfektenlösung.border-color: transparent
hat eine bessere browserübergreifende Unterstützung --- siehe meine Antwort ...Versuchen Sie ,
border
zuoutline
:quelle
Nachdem ich viele dieser Lösungen verwendet habe, finde ich den Trick des Einstellens
border-color: transparent
am flexibelsten und am weitesten verbreitet:Warum ist es besser:
outline
können Sie beispielsweise die oberen und unteren Ränder weiterhin separat angebenquelle
transparent
das ist was für ein Bedürfnis!Versuche dies
quelle
Normalerweise verwende ich Polsterung, um dieses Problem zu beheben. Die Polsterung wird hinzugefügt, wenn der Rand verschwindet, und entfernt, wenn der Rand angezeigt wird. Beispielcode:
Sehen Sie sich meinen vollständigen Beispielcode auf JSFiddle an: https://jsfiddle.net/3t7vyebt/4/
quelle
Verringern Sie einfach die Breite und Höhe um das Doppelte der Randbreite
quelle
Sie können einige ausgefallene Dinge mit eingelassenen Schatten tun. Beispiel für das Einfügen eines Rahmens am unteren Rand eines Elements, ohne dessen Größe zu ändern:
quelle
Manchmal möchten Sie nicht, dass Höhe oder Breite beeinflusst werden, ohne dies explizit festzulegen. In diesem Fall finde ich es hilfreich, Pseudoelemente zu verwenden.
Sie können auch viel mehr mit dem Pseudoelement tun, so dass dies ein ziemlich mächtiges Muster ist.
quelle
width
undheight
und das Hinzufügen von einbottom
undleft
Eigentum zusätzlich zu dentop
undleft
, die alle auf der gegenüberliegenden Breite eingestellt werden sollte der ursprüngliche Rand (in meinem Fall -1px). Toller HackVersuchen Sie, die Randgröße zu verringern, wenn Sie den Rand vergrößern
quelle
Ich musste in der Lage sein, jedes Element durch Hinzufügen einer Klasse zu "begrenzen" und ihre Dimensionen nicht zu beeinflussen. Eine gute Lösung für mich war die Verwendung von Box-Shadow. In einigen Fällen war der Effekt jedoch aufgrund anderer Geschwister nicht sichtbar. Also habe ich sowohl typischen Box-Shadow als auch Inset-Box-Shadow kombiniert. Das Ergebnis ist ein Rahmenlook ohne Änderung der Abmessungen.
Durch Komma getrennte Werte. Hier ist ein einfaches Beispiel:
jsfiddle
Passen Sie Ihren bevorzugten Look an und los geht's!
quelle
Wir können auch die Funktion css calc () verwenden
Subtrahieren von 2px für Ränder
quelle
quelle
Sie können das Element mit Rahmen mit derselben Hintergrundfarbe erstellen. Wenn der Rahmen angezeigt werden soll, ändern Sie einfach seine Farbe.
quelle
border-color: transparent
ul li a{border-bottom:2px solid transparent;} ul li a:hover{border-bottom:2px solid red;}
Wenn der Inhalt von Ihnen
div
dynamisch gerendert wird und Sie seine Höhe festlegen möchten, können Sie einen einfachen Trick verwenden mitoutline
:Beispiel hier: https://codepen.io/Happysk/pen/zeQzaZ
quelle
Sie können einen Box-Shadow-Inset ausprobieren
so etwas wie: box-shadow: Einschub 0px -5px 0px 0px #fff
Fügt am unteren Rand des Elements einen weißen 5-Pixel-Rand hinzu, ohne die Größe zu erhöhen
quelle