Mike Slinn
Mike Slinn

Reputation: 8403

HTML5 Meter Styling in Chrome

I want to style a password strength meter implemented via . It works fine in Firefox, but not in Chrome.

Here is the relevant CSS, taken from the GitHub project CSS file:

meter {
    /* Reset the default appearance */
    -webkit-appearance: none;
       -moz-appearance: none;
            appearance: none;

    margin: 0 auto 1em;
    width: 100%;
    height: .5em;

    /* Applicable only to Firefox */
    background: none;
    background-color: rgba(0,0,0,0.1);
}

meter::-webkit-meter-bar {
    background: none;
    background-color: rgba(0,0,0,0.1);
}

meter[value="0"]::-webkit-meter-optimum-value,
meter[value="1"]::-webkit-meter-optimum-value { background: red; }
meter[value="2"]::-webkit-meter-optimum-value { background: yellow; }
meter[value="3"]::-webkit-meter-optimum-value { background: orange; }
meter[value="4"]::-webkit-meter-optimum-value { background: green; }

meter[value="1"]::-moz-meter-bar,
meter[value="1"]::-moz-meter-bar { background: red; }
meter[value="2"]::-moz-meter-bar { background: yellow; }
meter[value="3"]::-moz-meter-bar { background: orange; }
meter[value="4"]::-moz-meter-bar { background: green; }

The last bit is important, the ability to style based on the meter's value.

Upvotes: 4

Views: 3333

Answers (1)

int32_t
int32_t

Reputation: 6150

It's an intentional behavior change. https://www.chromestatus.com/feature/5668635896971264

So, you need to remove -webkit-appearance:none, or need to build a meter value box yourself.

<style>
meter {
  -webkit-appearance: none;
  background: gray;
}
meter > div {
  height: 100%;
}
meter[value="1"] > div {
  width: 25%;
  background: red;
}
meter[value="2"] > div {
  width: 50%;
  background: yellow;
}
meter[value="3"] > div {
  width: 75%;
  background: orange;
}
meter[value="4"] > div {
  width: 100%;
  background: green;
}
</style>
<meter value=3><div></div></meter>

Upvotes: 3

Related Questions