我想知道是否可以通过这种方式为CSS添加一些灵活性:
<div class='round5'></div>
.round
是一个拥有圆角的 class,并且 '5' 决定了圆角的半径。这是否可能?我曾在某处看到过,但不知道实现是如何进行的。
如果你在2018年偶然发现了这篇文章,尽管还没有完全支持, 但CSS变量现在已经让你可以直接传递变量到你的类中。
<div class="round" style="--radius: 100%;"></div>
<style>
.round {
display: block;
height: 40px;
width: 40px;
border: 1px solid #BADA55;
border-radius: var(--radius);
}
</style>
你也可以定义根变量并将它们传入
<div class="round" style="--radius: var(--rad-50);"></div>
<style>
:root {
--rad-0: 0%;
--rad-50: 50%;
--rad-100: 100%;
}
.round {
display: block;
height: 40px;
width: 40px;
border: 1px solid #BADA55;
border-radius: var(--radius);
}
</style>
这也适用于元素范围。如果您在一个元素中设置--radius
,它不会影响另一个元素。非常棒,对吧!
因为边框半径是一个属性,所以您无法将其定义与值分开。没有办法告诉元素“一般”地拥有圆角而不指定圆角程度。
但是,您可以使用多个类和不同的属性来实现类似的效果:
HTML:
<div class="rounded blue"></div>
<div class="rounded green"></div>
CSS:
.rounded {
border-radius: 5px;
}
.blue {
background: blue;
}
.green {
background: green;
}
.rounded
类为元素添加圆角边框,而 .blue
和 .green
类则添加背景颜色。
(我喜欢按逻辑顺序命名和排列类,例如 <div class="large box"></div>
等)。
这里是我想到的一个答案,需要少量的jQuery和对正则表达式的基本了解。
$(function() {
var number = $("div").attr("class").match(/\d+$/);
$("div").css({
"width": "100px",
"height": "100px",
"background-color": "green",
"border-radius": number + "px"
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='round54'>hello</div>
.match()
函数使用正则表达式。正则表达式用于检测字符串的部分。 \d
可以检测任何数字。 +
匹配前面选择器1次或多次。换句话说,该数字可以是多位数。而$
表示它必须在结尾处。
所以,jQuery稍后将在border-radius
属性中使用它。您只需要添加px
,就可以了。
Fiddle
class="round round5"
- limitlessloopHTML:
<div class="round">Box without border radius</div>
<div class="round rounded-5">Box with 5px border radius</div>
<div class="round rounded-10">Box with 10px border radius</div>
CSS:
.round {
border: 1px solid #000;
width: 100px;
height: 100px;
}
.round.rounded-5 {
border-radius: 5px;
}
.round.rounded-10 {
border-radius: 10px;
}
.radius{
border-radius: 10px;
border: 1px solid red;
}
.r5{
border-radius:5px;
}
HTML
<div class="radius">Hello World</div>
<br/>
<div class="radius r5">Hello World</div>
在上面的示例中,红色边框将保留,但边框半径会改变。
请注意,您不应以数字开头命名类名,因此使用r5
而不是5
.round {
border-radius: 4px; /*it's default when you juse using .round*/
}
.round.five {
border-radius: 5px;
}
.round.ten {
border-radius: 10px;
}
HTML
<div class="round five">something</div>
你可以这样做。但是你需要在HTML文档中创建CSS(不是链接,而是在<style>
标签之间)。你可以使用PHP或JavaScript来制作循环。例如,尝试以下代码:
<style>
<?php
$round = 5;
for ($round = 50; $round <= 150; $round+=25){
echo "#round$round{
height: 300px;
width: 300px;
background: #f00;
border-radius : ".$round."px;
margin: 2px;
}
";
}
?>
</style>
<?php
for ($round=50;$round<=150; $round+=25){
echo "<div id='round$round'>
</div>
";
}
?>
div[class*="round"] {
background-color: green;
color: white;
padding: 10px;
}
然后针对特定变体使用...
div[class="round5"] {
border-radius: 5px;
}
.round{
border-radius: var(--radius, 10px);
/* 10px as default value */
}
然后可以像这样使用
<div class="round">Hello</div>
<div class="round" style="--radius: 20px">Hello</div>
可以设置全局值,而不是默认值
:root{
--radius: 30px;
}