1 回答
TA贡献2019条经验 获得超9个赞
问题
这很可能是因为您已将抽屉和导航栏(左侧导航和顶部导航)的可见性设置为隐藏。当某些内容的可见性设置为 时hidden
,它仍然在布局中并保留其高度、宽度、边距和填充。这就是为什么您会看到抽屉和导航栏的空间,分别导致左侧和顶部的空间。
您可以运行并尝试打印以下屏幕。你会看到我提到的问题(由保留的尺寸[高度、宽度、填充、边距]引起的空间)。
@media print {
body,
html,
#wrapper {
width: 100%;
margin: 0px;
padding: 0px;
border: 1px solid red;
}
#drawer {
visibility: hidden;
}
#navbar {
visibility: hidden;
}
.no-print {
display: none;
}
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html,
body {
position: relative;
width: 100%;
height: 100%;
}
#wrapper {
display: flex;
flex-direction: row;
height: 100%;
width: 100%;
}
#navbar {
width: 100%;
background: blue;
color: white;
padding: 20px;
}
#section--right {
flex-grow: 1;
}
#drawer {
height: 100%;
width: 100px;
background: red;
color: white;
padding: 20px;
}
#navbar .text {
display: inline-block;
height: 50px;
background: #121212;
}
<div id="wrapper">
<div id="drawer">Some drawer</div>
<div id="section--right">
<div id="navbar"><span class="text">Some navbar</span></div>
<div id="print__section">
test
</div>
<button id="print__button" class="no-print" onclick="window.print()">Print now</button>
</div>
</div>
解决方案
我的建议是为可打印区域设置一个特殊的 id 或类。body
然后,将内部没有此类特殊 id 或类的所有其他元素的可见性设置为隐藏。此外,由于将可见性设置为隐藏仍然允许元素保留其尺寸,因此也将其尺寸(高度、宽度、边距和填充)设置为 0。请注意,您无法使用display: none
,因为您的可打印区域也不会显示。
这是一个可以解决您的问题的工作示例。
@media print {
body,
html,
#wrapper {
width: 100%;
margin: 0px;
padding: 0px;
border: 1px solid red;
}
/* Makes all divs that are not inside the print region invisible */
/* Then, set the size to 0 by setting everything (height, width, margin, and padding) to 0 */
body *:not(#print__section) {
visibility: hidden;
height: 0;
width: 0;
margin: 0;
padding: 0;
}
/* Parents' visibility cascade to children's visibility */
/* Make the print region visible again to override parent's visibility */
#print__section {
visibility: visible;
}
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html,
body {
position: relative;
width: 100%;
height: 100%;
}
#wrapper {
display: flex;
flex-direction: row;
height: 100%;
width: 100%;
}
#navbar {
width: 100%;
background: blue;
color: white;
padding: 20px;
}
#section--right {
flex-grow: 1;
}
#drawer {
height: 100%;
width: 100px;
background: red;
color: white;
padding: 20px;
}
#navbar .text {
display: inline-block;
height: 50px;
background: #121212;
}
<div id="wrapper">
<div id="drawer">Some drawer</div>
<div id="section--right">
<div id="navbar"><span class="text">Some navbar</span></div>
<div id="print__section">
test
</div>
<button id="print__button" class="no-print" onclick="window.print()">Print now</button>
</div>
</div>
- 1 回答
- 0 关注
- 190 浏览
添加回答
举报