Prism 代码块破坏了响应式设计(使用 flexbox)
Prism code block breaks responsive design (using flexbox)
我设计了一个响应式页面布局,可以很好地适应较小的屏幕,但是当我添加代码块(并使用 prism.js 对其进行格式化)时,响应性中断了。代码框和文本内容都超出了设备的宽度,您必须来回滚动。理想情况下,代码块应该有自己的滚动条来查看代码,但内容仍然适应。我试过使用包含内容的 flexbox 的不同属性,但它仍然破坏了布局。
为了缩小范围,我将页面精简为:
<!DOCTYPE html>
<head>
<link rel='stylesheet' href='page.css' />
<link href="./external/prism.css" rel="stylesheet" />
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0' />
</head>
<body>
<script src="./external/prism.js"></script>
<div class="article-container">
<article>
<h1 class="title">Test</h1>
<p>Dolorem neque quiquia dolor. Est dolor dolor dolorem adipisci consectetur. Adipisci ipsum velit dolore
consectetur quisquam eius. Non velit est ipsum adipisci adipisci quaerat.</p>
<pre><code class="language-python">def some_code(file_name):
with open("some_path/" + file_name + ".md", "r", encoding="utf-8") as input_file:
return input_file.read()
</code></pre>
</article>
</div>
</body>
</html>
与page.css包含:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.article-container {
width: 100%;
display: flex;
justify-content: center;
}
article {
width: 800px;
}
如果我同时注释掉 .article-container 和 article 页面调整正常,但如果其中任何一个存在,它就会中断。此外,如果我将 CSS 保持原样并注释掉它响应的代码块。
任何有关这些组件如何交互的类型都将不胜感激,谢谢!
编辑:澄清一下,当响应式设计不起作用时,页面宽度不会适应屏幕尺寸。请参阅下面的屏幕截图:
The content in fullscreen mode
How mobile looks without CSS - 代码框会像它应该的那样滚动,但页面的其余部分会适应
How mobile looks with CSS
请注意,2 也是使用 CSS 和不使用代码块时网站的外观。所以关于他们互动方式的一些事情正在发生变化。
我认为你的问题在于这条规则:
article {
width: 800px;
}
这就是为什么代码顶部的文本不会自行调整以适应屏幕的原因。
code 标签本身必须隐含一些 CSS 规则,以防止代码包装或“响应”到屏幕,因为缩进在该元素内很重要,不应受屏幕尺寸的太大影响。
也许您需要向元素添加 overflow-x:auto;,这样当屏幕不够宽时您可以滚动查看更多代码。
如果你也想在代码中向下滚动,这也适用于 overflow-y。
我只需将 overflow: auto;
添加到文章部分的 CSS 即可解决问题。
https://gist.github.com/grahamjpark/0cb9d2cfbe7a972bc20320781806e284#file-test-css-L15
我在这里找到了答案:
虽然这看起来很有用,但如果不能解决您的问题:
https://weblog.west-wind.com/posts/2016/feb/15/flexbox-containers-pre-tags-and-managing-overflow
我设计了一个响应式页面布局,可以很好地适应较小的屏幕,但是当我添加代码块(并使用 prism.js 对其进行格式化)时,响应性中断了。代码框和文本内容都超出了设备的宽度,您必须来回滚动。理想情况下,代码块应该有自己的滚动条来查看代码,但内容仍然适应。我试过使用包含内容的 flexbox 的不同属性,但它仍然破坏了布局。
为了缩小范围,我将页面精简为:
<!DOCTYPE html>
<head>
<link rel='stylesheet' href='page.css' />
<link href="./external/prism.css" rel="stylesheet" />
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0' />
</head>
<body>
<script src="./external/prism.js"></script>
<div class="article-container">
<article>
<h1 class="title">Test</h1>
<p>Dolorem neque quiquia dolor. Est dolor dolor dolorem adipisci consectetur. Adipisci ipsum velit dolore
consectetur quisquam eius. Non velit est ipsum adipisci adipisci quaerat.</p>
<pre><code class="language-python">def some_code(file_name):
with open("some_path/" + file_name + ".md", "r", encoding="utf-8") as input_file:
return input_file.read()
</code></pre>
</article>
</div>
</body>
</html>
与page.css包含:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.article-container {
width: 100%;
display: flex;
justify-content: center;
}
article {
width: 800px;
}
如果我同时注释掉 .article-container 和 article 页面调整正常,但如果其中任何一个存在,它就会中断。此外,如果我将 CSS 保持原样并注释掉它响应的代码块。
任何有关这些组件如何交互的类型都将不胜感激,谢谢!
编辑:澄清一下,当响应式设计不起作用时,页面宽度不会适应屏幕尺寸。请参阅下面的屏幕截图:
The content in fullscreen mode
How mobile looks without CSS - 代码框会像它应该的那样滚动,但页面的其余部分会适应
How mobile looks with CSS
请注意,2 也是使用 CSS 和不使用代码块时网站的外观。所以关于他们互动方式的一些事情正在发生变化。
我认为你的问题在于这条规则:
article {
width: 800px;
}
这就是为什么代码顶部的文本不会自行调整以适应屏幕的原因。
code 标签本身必须隐含一些 CSS 规则,以防止代码包装或“响应”到屏幕,因为缩进在该元素内很重要,不应受屏幕尺寸的太大影响。
也许您需要向元素添加 overflow-x:auto;,这样当屏幕不够宽时您可以滚动查看更多代码。 如果你也想在代码中向下滚动,这也适用于 overflow-y。
我只需将 overflow: auto;
添加到文章部分的 CSS 即可解决问题。
https://gist.github.com/grahamjpark/0cb9d2cfbe7a972bc20320781806e284#file-test-css-L15
我在这里找到了答案:
虽然这看起来很有用,但如果不能解决您的问题:
https://weblog.west-wind.com/posts/2016/feb/15/flexbox-containers-pre-tags-and-managing-overflow