gpt4 book ai didi

javascript - 如何使用带样式的组件来设置组件打印的样式?

转载 作者:行者123 更新时间:2023-11-28 14:03:10 27 4
gpt4 key购买 nike

我试图在使用样式化组件打印组件时控制尺寸/方向。我的问题是:如何使用 @page CSS at 规则或其他方法来为带有样式组件的打印组件设置样式?

CSS @page 文档:

https://developer.mozilla.org/en-US/docs/Web/CSS/@page

我试过:

const PrintSchedulesContainer = styled.div`
display: none;
@media print and (min-width: 480px) {
padding: none;
margin: none;
}
`;

和:

const PrintSchedulesContainer = styled.div`
display: none;
@page {
size: landscape;
}
`;

最佳答案

您不能针对单个组件进行打印。
您需要隐藏其他元素,以便您的组件成为唯一打印的组件。

@page仅适用于更改打印规则。
@media print让您定义其他类样式,就像@media 屏幕一样。

您可以在包装器样式的组件内使用@media print,使其全屏显示,固定为白色背景。

例子:

const PrintableBodyWrapper = styled.div`
@media print {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: white;
display: flex;
justify-content: center;
align-items: center;
}
`;

function App() {
return (
<div className="App">
<PrintableBodyWrapper>
<div style={{ width: 100, height: 100, background: "grey" }}>
I will be printed
</div>
</PrintableBodyWrapper>
</div>
);
}

要更改打印规则,您需要将@page 添加到global style 中并渲染全局样式组件。

import styled, { createGlobalStyle } from "styled-components";

const GlobalStyle = createGlobalStyle`
@page {
size: landscape;
margin: 5cm;
`;

const PrintableBodyWrapper = styled.div`
@media print {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: black;
display: flex;
justify-content: center;
align-items: center;
}
`;

function App() {
return (
<div className="App">
<GlobalStyle />
<PrintableBodyWrapper>
<div style={{ width: 100, height: 100, background: "grey" }}>
I will be printed
</div>
</PrintableBodyWrapper>
</div>
);
}

关于javascript - 如何使用带样式的组件来设置组件打印的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57501406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com