LibWeb: Use computed display value for ::first-letter layout wrappers
Previously, `::first-letter` elements were always wrapped in an inline box, meaning these elements were not correctly blockified when floated.
This commit is contained in:
parent
2f84f89874
commit
0ec95a606f
3 changed files with 45 additions and 1 deletions
|
|
@ -447,7 +447,9 @@ void TreeBuilder::create_first_letter_wrapper_if_needed(DOM::Element& element, B
|
|||
first_letter_slice = make_ref_counted<GeneratedTextNode>(document, Utf16String::from_utf16(text.utf16_view().substring_view(0, letter_end)));
|
||||
}
|
||||
|
||||
auto first_letter_wrapper = make_ref_counted<InlineNode>(document, nullptr, *first_letter_style);
|
||||
auto first_letter_wrapper = DOM::Element::create_layout_node_for_display_type(document, first_letter_style->display(), *first_letter_style, nullptr);
|
||||
if (!first_letter_wrapper)
|
||||
return;
|
||||
first_letter_wrapper->set_generated_for(CSS::PseudoElement::FirstLetter, element);
|
||||
first_letter_wrapper->set_children_are_inline(true);
|
||||
first_letter_wrapper->append_child(*first_letter_slice);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
<!doctype html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Reference File</title>
|
||||
<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org">
|
||||
<p>Pass if no space between "A", space between "B".</p>
|
||||
<div><span style="float:left">A</span>A</div>
|
||||
<div><span style="float:left">A</span>A</div>
|
||||
<div>B B</div>
|
||||
<div>B B</div>
|
||||
<div>AAB B</div>
|
||||
<div>AAB B</div>
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
<!doctype html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Test: White-spaces around floated ::first-letter</title>
|
||||
<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org">
|
||||
<link rel="match" href="../../../../expected/wpt-import/css/css-pseudo/first-letter-and-whitespace-ref.html">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-letter-styling">
|
||||
<meta name="assert" content="Test checks that white-spaces are correctly rendered for floated ::first-letter changes">
|
||||
<style>
|
||||
div::first-letter {
|
||||
color: black;
|
||||
}
|
||||
.floatLetter::first-letter {
|
||||
float: left;
|
||||
}
|
||||
</style>
|
||||
<p>Pass if no space between "A", space between "B".</p>
|
||||
<div id="t1"> <!---->AA</div>
|
||||
<div id="t2"> <!---->A<!----> <!---->A</div>
|
||||
<div id="t3" class="floatLetter"> <!---->B<!----> <!---->B</div>
|
||||
<div id="t4" class="floatLetter"> <!---->B <!---->B</div>
|
||||
<div id="t5" class="floatLetter"> <!---->AAB<!----> <!---->B</div>
|
||||
<div id="t6" class="floatLetter"> <!---->AAB<!----> B</div>
|
||||
<script>
|
||||
document.body.offsetTop;
|
||||
t1.className = "floatLetter";
|
||||
t2.className = "floatLetter";
|
||||
t3.className = "";
|
||||
t4.className = "";
|
||||
t5.className = "";
|
||||
t6.className = "";
|
||||
</script>
|
||||
Loading…
Reference in a new issue