代码之家  ›  专栏  ›  技术社区  ›  Hadi

如何在无效和有效输入中选择用于更改样式的psoudo元素(after)

  •  0
  • Hadi  · 技术社区  · 1 年前

    我在输入之后添加*, 我想选这个换颜色 input:valid invalid , 但是通过这个CSS不工作为什么?

    form::after {
        content: "*";
    }
    
    #fname:invalid~::after {
        background: red;
        border-color: yellow;
    }
    
    #fname:valid~::after {
        background: rgb(3, 183, 168);
        border-color: rgb(9, 9, 0);
    }
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
         <form action="/action_page.php" id="frm">
            <label for="fname">First name:</label><br>
            <input required type="text" id="fname" value=""><br><br>
            <input type="submit" value="Submit">
        </form>
    </body>
    </html>
    2 回复  |  直到 1 年前
        1
  •  1
  •   imhvost    1 年前

    您可以使用 :has() (在layout.css.has-selectro.enabled标志后面的Firefox中支持):

    #frm:after {
      content: "*";
    }
    
    #frm:has(#femail:invalid):after {
      background: red;
    }
    
    #frm:has(#femail:valid):after {
      background: rgb(3, 183, 168);
    }
    <form action="?" id="frm">
      <label for="fname">Email:</label><br>
      <input required type="email" id="femail"><br><br>
      <input type="submit" value="Submit">
    </form>

    或者简单地更换 :after 在里面 <form> 比如说, <span>*</span> 以下为:

    #femail:invalid ~ span {
      background: red;
    }
    
    #femail:valid ~ span {
      background: rgb(3, 183, 168);
    }
    <form action="?" id="frm">
      <label for="fname">Email:</label><br>
      <input required type="email" id="femail"><br><br>
      <input type="submit" value="Submit">
      <span>*</span>
    </form>
        2
  •  1
  •   Mohamed Elsayed    1 年前

    代替 ::after 带跨度

    <form action="/action_page.php" id="frm">
        <label for="fname">First name:</label><br>
        <input required type="text" id="fname" value=""><br><br>
        <span>span</span>
        <input type="submit" value="Submit">
    </form>
    
    input:valid + span::after {
      content: "";
      background: red;
    }