gpt4 book ai didi

css - SCSS 如何写 CSS 样式既适用于媒体打印又适用于特定案例

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:59 25 4
gpt4 key购买 nike

我有一个特殊情况,我的样式需要同时应用于打印媒体,并且当 <body>有一个特殊的类要检测,我们就称这个类为.is-pdf-mode .

在我的 SCSS 中,我尝试使用 @content为了避免重复 CSS 但不知何故,生成的 CSS 不会为 <body> 生成正确的选择器情况下,我不能使用 &这个mixin里面的选择器。到目前为止,这是我的尝试。

SCSS:

@mixin query-print {
@media print {
@content;
}

.body.is-pdf-mode {
@content;
}
}

.box {
width: 200px;
height: 200px;
background: lightsalmon;
margin: 15px;

@include query-print {
background: green;
}
}

@media print {
// Default styling only apply for print
html,
body,
page[size="A4"] {
padding:0px;
margin:0px;
width: 210mm;
height: 297mm;
}

body {
-webkit-print-color-adjust: exact !important;
zoom: 100%;
}

}

HTML:

<div class="body">
<div class="box">
hello
</div>
</div>

<div class="body is-pdf-mode">
<div class="box">
hello
</div>
</div>

我明白写 .body.is-pdf-mode在那个 mixin 里面,这意味着 .box .body.is-pdf-mode ,应该是.body.is-pdf-mode .box反而。所以,我的问题是在这种情况下编写 CSS 的正确方法是什么?

Codepen 尝试:https://codepen.io/DieByMacro/pen/xoLNpE

更新 1:在 query-print 中重写我的 CSS混合:

如果我这样写:

.box {
width: 200px;
height: 200px;
background: lightsalmon;
margin: 15px;
}

@include query-print {
.box {
background: green;
}
}

显然这会起作用,但在我的实际元素中,我们采用了在选择器中使用 @include mixin。通过应用这种策略,这意味着要重写很多选择器,所以我认为这将是我在没有其他选择时的最后选择。

谢谢,

最佳答案

您可以使用@at-root&:

@mixin query-print {
@media print {
@content;
}

@at-root.body.is-pdf-mode #{&} {
@content;
}
}

以你的例子,它将返回:

@media print {
.box {
background: green;
}
}

.body.is-pdf-mode .box {
background: green;
}

SASS @at-root documentation

关于css - SCSS 如何写 CSS 样式既适用于媒体打印又适用于特定案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56766764/

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