Skip to content

Commit

Permalink
Add support for 'padding-box' value for 'box-sizing' property (fixes #…
Browse files Browse the repository at this point in the history
…6032)

Spec: http://dev.w3.org/csswg/css-ui/#valdef-box-sizing-padding-box
Currently, only Firefox is supporting this value.
  • Loading branch information
Jinwoo-Song committed May 14, 2015
1 parent b3b9dea commit 945adab
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 1 deletion.
7 changes: 7 additions & 0 deletions components/layout/block.rs
Expand Up @@ -346,8 +346,10 @@ impl CandidateBSizeIterator {
};

// If the style includes `box-sizing: border-box`, subtract the border and padding.
// If the style includes `box-sizing: padding-box`, subtract the border.
let adjustment_for_box_sizing = match fragment.style.get_box().box_sizing {
box_sizing::T::border_box => fragment.border_padding.block_start_end(),
box_sizing::T::padding_box => fragment.padding_width().block_start_end(),
box_sizing::T::content_box => Au(0),
};

Expand Down Expand Up @@ -2049,7 +2051,12 @@ pub trait ISizeAndMarginsComputer {
computed_inline_size =
MaybeAuto::Specified(size - block.fragment.border_padding.inline_start_end())
}
(MaybeAuto::Specified(size), box_sizing::T::padding_box) => {
computed_inline_size =
MaybeAuto::Specified(size - block.fragment.padding_width().inline_start_end())
}
(MaybeAuto::Auto, box_sizing::T::border_box) |
(MaybeAuto::Auto, box_sizing::T::padding_box) |
(_, box_sizing::T::content_box) => {}
}

Expand Down
4 changes: 4 additions & 0 deletions components/layout/fragment.rs
Expand Up @@ -999,6 +999,10 @@ impl Fragment {
}
}

pub fn padding_width(&self) -> LogicalMargin<Au> {
self.border_padding - self.border_width()
}

/// Computes the margins in the inline direction from the containing block inline-size and the
/// style. After this call, the inline direction of the `margin` field will be correct.
///
Expand Down
2 changes: 1 addition & 1 deletion components/style/properties.mako.rs
Expand Up @@ -2171,7 +2171,7 @@ pub mod longhands {
// http://dev.w3.org/csswg/css-ui/
${switch_to_style_struct("Box")}

${single_keyword("box-sizing", "content-box border-box")}
${single_keyword("box-sizing", "content-box padding-box border-box")}

${new_style_struct("Pointing", is_inherited=True)}

Expand Down
1 change: 1 addition & 0 deletions tests/ref/basic.list
Expand Up @@ -70,6 +70,7 @@ flaky_cpu == append_style_a.html append_style_b.html
== box_shadow_paint_order_a.html box_shadow_paint_order_ref.html
== box_shadow_spread_a.html box_shadow_spread_ref.html
== box_sizing_border_box_a.html box_sizing_border_box_ref.html
== box_sizing_padding_box_a.html box_sizing_padding_box_ref.html
== box_sizing_sanity_check_a.html box_sizing_sanity_check_ref.html
== br.html br-ref.html
== canvas_as_block_element_a.html canvas_as_block_element_ref.html
Expand Down
7 changes: 7 additions & 0 deletions tests/ref/box_sizing_padding_box_a.html
@@ -0,0 +1,7 @@
<!DOCTYPE html>
<html>
<body>
<div style="width: 256px; height: 256px; background: purple; border: 8px solid blue; padding: 10px; box-sizing: padding-box;"></div>
<div style="width: 236px; height: 236px; background: purple; border: 8px solid blue; padding: 10px;"></div>
</body>
</html>
7 changes: 7 additions & 0 deletions tests/ref/box_sizing_padding_box_ref.html
@@ -0,0 +1,7 @@
<!DOCTYPE html>
<html>
<body>
<div style="width: 236px; height: 236px; background: purple; border: 8px solid blue; padding: 10px;"></div>
<div style="width: 236px; height: 236px; background: purple; border: 8px solid blue; padding: 10px;"></div>
</body>
</html>

0 comments on commit 945adab

Please sign in to comment.