CSS BEM - Class 用于 SVG
CSS BEM - Class for SVG
我正在尝试为我的 SASS/CSS 文件使用 BEM 样式。一切正常,但我在设置 SVG 文件样式时遇到问题。
BEM 说不应该有标签或 ID 选择器,只有 class 选择器。但是,我想为我的 SVG 提供不同的颜色,有时还需要不同的宽度和高度。
目前我只能使用这样的标签选择器来做到这一点:
block__icon {
height: 36px;
width: 36px;
svg {
width: 100%;
height: 100%;
fill: #fff;
fill-opacity: .8;
}
}
HTML:
<div class="block__icon">
<svg ...></svg>
</div>
你知道更好的方法吗?
好吧...对于这种特殊情况,您可以删除元素级别 css....
width: 100%, height: 100%
可以移动到 normalize.css/reset.css 你写元素级别 css.
此外,在 normalize.css/reset.css.[=15= 中,fill: #fff; fill-opacity: .8;
可以替换为 color: currentColor;
]
Normalize.css
svg {
color: currentColor;
width: 100%;
height: 100%;
}
现在您可以在 .block__icon.
中添加 color: rgba(255, 255, 255, 0.8)
您还可以在 svg 中使用 viewbox 属性,以防您需要调整要渲染的图标的大小。
我的建议是:如果 svg 标签不在您的控制范围内,则使用元素级别 css 完全可以向其添加 class。无论方法论多么强大,凡事都有例外。 :)
您可以删除 div 并直接设置 svg 的样式。使用修饰符,您可以更改 svg 的外观,例如颜色或大小:
<svg class="block__icon block__icon--large"></svg>
我会这样构建 css:
.block {
&__icon {
height: 36px;
width: 36px;
fill: #fff;
fill-opacity: .8;
&--color-blue {
color: blue;
}
&--large {
height: 72px;
width: 72px;
}
}
}
我正在尝试为我的 SASS/CSS 文件使用 BEM 样式。一切正常,但我在设置 SVG 文件样式时遇到问题。
BEM 说不应该有标签或 ID 选择器,只有 class 选择器。但是,我想为我的 SVG 提供不同的颜色,有时还需要不同的宽度和高度。
目前我只能使用这样的标签选择器来做到这一点:
block__icon {
height: 36px;
width: 36px;
svg {
width: 100%;
height: 100%;
fill: #fff;
fill-opacity: .8;
}
}
HTML:
<div class="block__icon">
<svg ...></svg>
</div>
你知道更好的方法吗?
好吧...对于这种特殊情况,您可以删除元素级别 css....
width: 100%, height: 100%
可以移动到 normalize.css/reset.css 你写元素级别 css.
此外,在 normalize.css/reset.css.[=15= 中,fill: #fff; fill-opacity: .8;
可以替换为 color: currentColor;
]
Normalize.css
svg {
color: currentColor;
width: 100%;
height: 100%;
}
现在您可以在 .block__icon.
中添加color: rgba(255, 255, 255, 0.8)
您还可以在 svg 中使用 viewbox 属性,以防您需要调整要渲染的图标的大小。
我的建议是:如果 svg 标签不在您的控制范围内,则使用元素级别 css 完全可以向其添加 class。无论方法论多么强大,凡事都有例外。 :)
您可以删除 div 并直接设置 svg 的样式。使用修饰符,您可以更改 svg 的外观,例如颜色或大小:
<svg class="block__icon block__icon--large"></svg>
我会这样构建 css:
.block {
&__icon {
height: 36px;
width: 36px;
fill: #fff;
fill-opacity: .8;
&--color-blue {
color: blue;
}
&--large {
height: 72px;
width: 72px;
}
}
}