Hello
\ No newline at end of file
diff --git a/Userland/Libraries/LibWeb/CSS/Properties.json b/Userland/Libraries/LibWeb/CSS/Properties.json
index 5c29a68b26..016d76245c 100644
--- a/Userland/Libraries/LibWeb/CSS/Properties.json
+++ b/Userland/Libraries/LibWeb/CSS/Properties.json
@@ -1265,6 +1265,22 @@
"unitless-length"
]
},
+ "margin-block-start": {
+ "logical-alias-for": [
+ "margin-top",
+ "margin-right",
+ "margin-bottom",
+ "margin-left"
+ ]
+ },
+ "margin-block-end": {
+ "logical-alias-for": [
+ "margin-top",
+ "margin-right",
+ "margin-bottom",
+ "margin-left"
+ ]
+ },
"margin-bottom": {
"inherited": false,
"initial": "0",
@@ -1279,6 +1295,22 @@
"unitless-length"
]
},
+ "margin-inline-start": {
+ "logical-alias-for": [
+ "margin-top",
+ "margin-right",
+ "margin-bottom",
+ "margin-left"
+ ]
+ },
+ "margin-inline-end": {
+ "logical-alias-for": [
+ "margin-top",
+ "margin-right",
+ "margin-bottom",
+ "margin-left"
+ ]
+ },
"margin-left": {
"inherited": false,
"initial": "0",
@@ -1503,6 +1535,22 @@
"unitless-length"
]
},
+ "padding-block-start": {
+ "logical-alias-for": [
+ "padding-top",
+ "padding-right",
+ "padding-bottom",
+ "padding-left"
+ ]
+ },
+ "padding-block-end": {
+ "logical-alias-for": [
+ "padding-top",
+ "padding-right",
+ "padding-bottom",
+ "padding-left"
+ ]
+ },
"padding-bottom": {
"inherited": false,
"initial": "0",
@@ -1514,6 +1562,22 @@
"unitless-length"
]
},
+ "padding-inline-start": {
+ "logical-alias-for": [
+ "padding-top",
+ "padding-right",
+ "padding-bottom",
+ "padding-left"
+ ]
+ },
+ "padding-inline-end": {
+ "logical-alias-for": [
+ "padding-top",
+ "padding-right",
+ "padding-bottom",
+ "padding-left"
+ ]
+ },
"padding-left": {
"inherited": false,
"initial": "0",
diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp
index 20cd281dbb..f7573a668a 100644
--- a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp
+++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp
@@ -283,6 +283,34 @@ static bool contains(Edge a, Edge b)
static void set_property_expanding_shorthands(StyleProperties& style, CSS::PropertyID property_id, StyleValue const& value, DOM::Document& document, CSS::CSSStyleDeclaration const* declaration)
{
+ auto map_logical_property_to_real_property = [](PropertyID property_id) -> Optional
{
+ // FIXME: Honor writing-mode, direction and text-orientation.
+ switch (property_id) {
+ case PropertyID::MarginBlockStart:
+ return PropertyID::MarginTop;
+ case PropertyID::MarginBlockEnd:
+ return PropertyID::MarginBottom;
+ case PropertyID::MarginInlineStart:
+ return PropertyID::MarginLeft;
+ case PropertyID::MarginInlineEnd:
+ return PropertyID::MarginRight;
+ case PropertyID::PaddingBlockStart:
+ return PropertyID::PaddingTop;
+ case PropertyID::PaddingBlockEnd:
+ return PropertyID::PaddingBottom;
+ case PropertyID::PaddingInlineStart:
+ return PropertyID::PaddingLeft;
+ case PropertyID::PaddingInlineEnd:
+ return PropertyID::PaddingRight;
+ default:
+ return {};
+ }
+ };
+
+ auto real_property_id = map_logical_property_to_real_property(property_id);
+ if (real_property_id.has_value())
+ return set_property_expanding_shorthands(style, real_property_id.value(), value, document, declaration);
+
if (value.is_composite()) {
auto& composite_value = value.as_composite();
auto& properties = composite_value.sub_properties();