gpt4 book ai didi

css - SASS:在相同的样式表想法中混合 REM 到 PX

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

我一直在使用来自 David Walsh 博客的 REM 到 PX 混合功能 - http://davidwalsh.name/rem-px-browser-function-sass - 见下文:

$px-only:false;  

$pixelBase : 16; /* 1 */

@function parseInt($n) {
@return $n / ($n * 0 + 1); /* 2 */
}

@function u($values){ /* 3 */

$list: (); /* 4 */

@each $value in $values { /* 5 */

$unit : unit($value); /* 6 */
$val : parseInt($value); /* 2 */

@if ($px-only) and ($unit == 'rem') { /* 7 */
$list: append($list, ($val * $pixelBase) + px); /* 7 */
}

@else if($unit == 'px') or ($unit == 'rem'){ /* 8 */
$list: append($list, $value); /* 8 */
}

@else {
@warn 'There is no unit conversion for #{$unit}'; /* 9 */
}

}

@return $list(); /* 10 */

}

这允许您编写以下内容:

.style {
margin:u(1rem 2rem 20px 3rem);
padding-bottom:u(0.25rem);
font-size:u(0.875rem);
}

如果 $px-only = false,输出如下:

.style {
margin: 1rem 2rem 20px 3rem;
padding-bottom: 0.25rem;
font-size: 0.875rem;
}

如果 $px-only = true,则 IE 样式表中的以下内容:

.style {
margin: 16px 32px 20px 48px;
padding-bottom: 4px;
font-size: 14px;
}

我想避免必须创建一个单独的样式表来输出 IE 特定的像素回退并定位 body 类,如下所示:

<!--[if lt IE 7 ]> <body class="ie6 "> <![endif]-->
<!--[if IE 7 ]> <body class="ie7 "> <![endif]-->
<!--[if IE 8 ]> <body class="ie8 "> <![endif]-->
<!--[if !IE]><!--> <body> <!--<![endif]-->

是否有人对如何实现这一点有任何想法,以便在同一样式表中输出类似于以下代码的内容?

.style {
margin: 1rem 2rem 20px 3rem;
padding-bottom: 0.25rem;
font-size: 0.875rem;
}

.ie8 .style {
margin: 16px 32px 20px 48px;
padding-bottom: 4px;
font-size: 14px;
}

任何帮助都会很棒!

最佳答案

您不能只使用函数来完成您的要求。函数用于返回单个值。您必须使用 mixins 才能获得所需的效果。此外,当您可以利用浏览器解析 CSS 的方式时,拥有像这样的单独选择器的好处绝对为零(此外,完成您要求的工作所付出的努力根本不值得)。

你想要的输出应该是这样的:

.style {
margin: 16px 32px 20px 48px;
margin: 1rem 2rem 20px 3rem;
padding-bottom: 4px;
padding-bottom: 0.25rem;
font-size: 14px;
font-size: 0.875rem;
}

这意味着你需要这样的 mixin:

@mixin rem($propertie, $value) {
#{$propertie}: $value;
#{$propertie}: calculateRem($value);
}
// To convert px to rem
@mixin toRem($property, $value) {
#{$property}: ($value / 16) + rem;
}

参见:Automate pixel fallback using REM units throughout a project

关于css - SASS:在相同的样式表想法中混合 REM 到 PX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24650285/

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