【问题标题】:How to pass parameters to css classes如何将参数传递给css类
【发布时间】:2013-07-27 11:01:45
【问题描述】:

我想知道是否可以通过以下方式为 css 添加一些灵活性:

<div class='round5'></div>

其中.round 是一个带有圆角的类,“5”决定了半径的大小。可能吗?我看过一些地方,但我不知道如何实现。

【问题讨论】:

  • css类必须手动定义。

标签: html css


【解决方案1】:

对于 2018 年遇到此问题的任何人,whilst not fully supported 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 不会影响另一个元素。相当爵士吧!

【讨论】:

  • 有人知道这是否可以与 typestyle 一起使用吗?
  • @Javire 我想你可能要找的是theming。我更熟悉styled-components 中的这些概念,但是您应该能够更改每个组件的主题以使它们以不同的方式呈现。你想达到什么目的?
  • 太棒了!我喜欢!
【解决方案2】:

也许你想要的是这样的

CSS

.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>

【讨论】:

    【解决方案3】:

    这是我想出的一个答案,需要少量的 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

    【讨论】:

    • 你可以使用这种方法,但将新的类名写入 DOM 吗?例如class="round round5"
    【解决方案4】:

    您可以按照您所说的去做,但您必须为此目的保留关键字“round”。如果你看下面的话。

    div[class*="round"] {
        background-color: green;
        color: white;
        padding: 10px;
    }
    

    然后使用...定位它的特定变体

    div[class="round5"] {
        border-radius: 5px;
    }
    

    第一段代码选择所有包含轮子的类名,这可能是好事也可能是坏事。

    【讨论】:

    • 这可能有效,但是已经列出了更清洁且不太可能适得其反的方法.....
    • 是的,但在正确的情况下,此解决方案可能是正确的或唯一的方法。
    【解决方案5】:

    你可以这样做。但您必须在 html 文档中创建 css(未链接,但在 &lt;style&gt; 标签之间)。您可以使用 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>
                ";
    
    }
    
    ?>
    

    希望这会有所帮助! :D

    【讨论】:

    • 如果你想让它动态化(而不是重新加载),你必须使用javascript来制作它。
    【解决方案6】:

    您可以在元素上使用多类。例如:

    HTML:

    <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;
    }
    

    【讨论】:

      【解决方案7】:

      你可以做类似的事情,但不完全按照你说的方式。

      CSS

      .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>
      

      Working Example

      在上面的示例中,红色边框将被保留,但边框半径会发生变化。

      请注意,类名不能以数字开头,因此是r5 而不是5

      【讨论】:

        【解决方案8】:

        您不能将边框半径与其值分开定义,因为它是一个属性。没有办法告诉元素“一般”具有圆角而不指定圆角的多少。

        但是,您可以使用多个类和不同的属性来做一些类似的事情:

        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 类添加背景颜色。

        (我喜欢对类进行命名和排序,以便它们在逻辑上阅读,例如&lt;div class="large box"&gt;&lt;/div&gt; 等)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多