فهرست منبع

LibWeb: Implement `currentcolor` special value

The `currentcolor` identifier represents the current value of the
`color` property. This is the default value for `border-color` and
`text-decoration-color`, and is generally useful to have. :^)
Sam Atkins 3 سال پیش
والد
کامیت
17bb913625

+ 2 - 0
Base/res/html/misc/colors.html

@@ -12,6 +12,7 @@
             #g { background-color: rgba(0%, 100%, 0%, 1); }
             #h { background-color: hsl(120, 100%, 50%); }
             #i { background-color: hsla(120, 100%, 50%, 1); }
+            #j { color: lime; background-color: currentColor; }
         </style>
     </head>
     <body>
@@ -25,5 +26,6 @@
         <div id="g">This is green, using rgba(0%, 100%, 0%, 1).</div>
         <div id="h">This is green, using hsl(120, 100%, 50%).</div>
         <div id="i">This is green, using hsla(120, 100%, 50%, 1).</div>
+        <div id="j"><span style="color: black;">This is green, using currentcolor.</span></div>
     </body>
 </html>

+ 1 - 0
Userland/Libraries/LibWeb/CSS/Identifiers.json

@@ -82,6 +82,7 @@
   "context-menu",
   "copy",
   "crosshair",
+  "currentcolor",
   "cursive",
   "dashed",
   "decimal",

+ 6 - 0
Userland/Libraries/LibWeb/CSS/StyleValue.cpp

@@ -33,6 +33,12 @@ String IdentifierStyleValue::to_string() const
 
 Color IdentifierStyleValue::to_color(Layout::NodeWithStyle const& node) const
 {
+    if (id() == CSS::ValueID::Currentcolor) {
+        if (!node.has_style())
+            return Color::Black;
+        return node.computed_values().color();
+    }
+
     auto& document = node.document();
     if (id() == CSS::ValueID::LibwebLink)
         return document.link_color();