From 09dbf91e7bd2d511c940b28698a5d7051eaf56ac Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Fri, 17 Apr 2020 14:36:03 +0200 Subject: [PATCH] `display: contents` computes to `block` on the root element --- components/layout_2020/flow/root.rs | 16 ++++++++-------- components/style/values/specified/box.rs | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/components/layout_2020/flow/root.rs b/components/layout_2020/flow/root.rs index 7215ebce0e3..9143ef4e89a 100644 --- a/components/layout_2020/flow/root.rs +++ b/components/layout_2020/flow/root.rs @@ -20,7 +20,7 @@ use crate::positioned::AbsolutelyPositionedBox; use crate::positioned::PositioningContext; use crate::replaced::ReplacedContent; use crate::sizing::ContentSizesRequest; -use crate::style_ext::{Display, DisplayGeneratingBox, DisplayInside}; +use crate::style_ext::{Display, DisplayGeneratingBox}; use crate::DefiniteContainingBlock; use app_units::Au; use euclid::default::{Point2D, Rect, Size2D}; @@ -65,22 +65,22 @@ fn construct_for_root_element<'dom>( root_element: impl NodeExt<'dom>, ) -> (ContainsFloats, Vec>) { let style = root_element.style(context); - let replaced = ReplacedContent::for_element(root_element); let box_style = style.get_box(); let display_inside = match Display::from(box_style.display) { Display::None => return (ContainsFloats::No, Vec::new()), - Display::Contents if replaced.is_some() => { - // 'display: contents' computes to 'none' for replaced elements - return (ContainsFloats::No, Vec::new()); + Display::Contents => { + // Unreachable because the style crate adjusts the computed values: + // https://drafts.csswg.org/css-display-3/#transformations + // “'display' of 'contents' computes to 'block' on the root element” + unreachable!() }, - // https://drafts.csswg.org/css-display-3/#transformations - Display::Contents => DisplayInside::Flow, // The root element is blockified, ignore DisplayOutside Display::GeneratingBox(DisplayGeneratingBox::OutsideInside { inside, .. }) => inside, }; - let contents = replaced.map_or(Contents::OfElement, Contents::Replaced); + let contents = + ReplacedContent::for_element(root_element).map_or(Contents::OfElement, Contents::Replaced); if box_style.position.is_absolutely_positioned() { ( ContainsFloats::No, diff --git a/components/style/values/specified/box.rs b/components/style/values/specified/box.rs index 2c63cd4f841..4f767e89bee 100644 --- a/components/style/values/specified/box.rs +++ b/components/style/values/specified/box.rs @@ -354,7 +354,7 @@ impl Display { /// /// Also used for :root style adjustments. pub fn equivalent_block_display(&self, _is_root_element: bool) -> Self { - #[cfg(feature = "gecko")] + #[cfg(any(feature = "servo-layout-2020", feature = "gecko"))] { // Special handling for `contents` and `list-item`s on the root element. if _is_root_element && (self.is_contents() || self.is_list_item()) {