Ich habe CSS auf den Code innerhalb des pre code
选择器,以便制作样式代码块,就像您在 GitHub 或其他地方看到的那样。我使用 Flexbox 进行布局,并且在“框”div 内并排有两个“面板”div,其中一个有一个代码块(这只是 <pre><code>
-Tags angewendet und das „Box“-Div befindet sich innerhalb des Haupt-„Container“-Div.
Das grundlegende CSS, das ich habe, ist...
.*, *:before, *:after { margin: 0; padding: 0; box-sizing: inherit; } html { box-sizing: border-box; } body { display: flex; align-items: center; justify-content: center; } pre code { display: inline-block; overflow: auto; white-space: pre; padding: 1rem; margin: 1rem; } .container { display: flex; flex-direction: column; margin: 1rem; gap: 1rem; } .box { display: flex; flex-direction: row; gap: 1rem; } .panel { display: flex; flex-direction: column; flex: 0.5; padding: 1rem; }
Aufgrund von flex: 0.5
sollten beide Platten gleich breit sein, aber die rechte Platte dehnt sich aus, um in den Block zu passen, anstatt dass der Block schrumpft, um in die Platte zu passen.
Wenn ich es in pre code
上设置 white-space: pre-wrap
mache, erhalte ich das gewünschte Layoutverhalten, aber natürlich ist der Code in Wortumbrüche unterteilt, was ich nicht möchte.
white-space: pre
并向 pre 代码
eine dedizierte Breite hinzufüge, erhalte ich natürlich das gewünschte Verhalten, bei dem der Codeblock eine horizontale Bildlaufleiste hat. Ich kann keine spezielle Breite verwenden, da ich den Block so benötige, dass alle darin enthaltenen Paneele hineinpassen.
Aus irgendeinem Grund macht das pre 代码
上设置 width: 100%
überhaupt nichts.
Um sicherzustellen, dass ich nicht irgendwo etwas anderes getan habe, das diesen Fehler verursacht hat, habe ich diesen Code zusammengestellt, um mein Problem zu bestätigen (ich habe einige Hintergrundfarben und Ränder hinzugefügt, um den Container sichtbar zu machen):
https://codepen.io/evprkr/pen/poKQXJr
CSS 问题导致您遇到问题:
.*, *:before, *:after { }
中,有一个很容易错过的初始.
(点)。因此border-box
模型仅适用于:before
和:after
伪元素。显然,margin
和padding
也是如此。.panel
祖先都没有设置width
值,这样 flexbox 就无法约束子元素,并且会增长到无穷大。flex: 0.5
(默认为flex: 0.5 1 0%
)显然没有效果,因为它没有宽度flex-basis: 50%
。在这两种情况下,pre 代码
都不会被触发溢出,因此不会显示可滚动框。我无法解释原因,但这一定是由于某些 W3C 规范造成的。不过,您声明的.panel width: 50%
最终解决了这个问题。margin
s 与各种元素和gap
结合使用会产生看似意外的元素重叠。即使删除了上述初始.
解决方案
.
(点).container 宽度:100%
为 flexbox 提供一个可使用的约束。.panel flex: 0.5
并指定.panel 宽度: calc(50% - 0.5rem)
。calc(..)
是必需的,因为gap
会增加.panel
s 的总宽度,可能导致它们在调整大小时重叠。由于您的ngap: 1rem
将0.5rem
添加到两列中的每一列,因此需要从每列的width
中减去该值。ngap
一样,margin
会增加元素的总宽度,这需要您从元素宽度中减去左和/或右边距,以防止它们与其他元素重叠。避免在 CSS 中添加额外calc(..)
的最简单方法是将元素的margin
移动到其直接父元素的padding
。并非在所有情况下都是如此,但在这种情况下,它在不改变整体布局的情况下效果很好。奖金
对于响应行为:
.box
包裹其子元素.panel 宽度
以强制.box
包裹其子.panel
s。在本例中我选择了300px
。.panel
元素增长到完整的50%
。还有
hyphen
ate 文本以提高可读性...片段