mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
layout: Implement border-spacing
per CSS 2.1 § 17.6.1 and the legacy
`cellspacing` attribute per HTML5 § 14.3.9. Table layout code has been refactored to push the spacing down to rowgroups and rows; this will aid the implementation of `border-collapse` as well. This commit also fixes two nasty issues in table layout: * In fixed layout, extra space would not be divided among columns that had auto width but had nonzero minimum width. * In automatic layout, extra space would be distributed to constrained columns as well even if unconstrained columns with percentage equal to zero were present.
This commit is contained in:
parent
e8f1a046c6
commit
586c12ccc4
26 changed files with 690 additions and 208 deletions
|
@ -14,7 +14,7 @@ use values::specified::CSSColor;
|
|||
use values::{CSSFloat, specified};
|
||||
use properties::DeclaredValue::SpecifiedValue;
|
||||
use properties::PropertyDeclaration;
|
||||
use properties::longhands;
|
||||
use properties::longhands::{self, border_spacing};
|
||||
use selector_matching::Stylist;
|
||||
|
||||
use cssparser::Color;
|
||||
|
@ -43,6 +43,8 @@ pub enum IntegerAttribute {
|
|||
pub enum UnsignedIntegerAttribute {
|
||||
/// `<td border>`
|
||||
Border,
|
||||
/// `<table cellspacing>`
|
||||
CellSpacing,
|
||||
/// `<td colspan>`
|
||||
ColSpan,
|
||||
}
|
||||
|
@ -143,6 +145,21 @@ impl PresentationalHintSynthesis for Stylist {
|
|||
element,
|
||||
matching_rules_list,
|
||||
shareable);
|
||||
match element.get_unsigned_integer_attribute(
|
||||
UnsignedIntegerAttribute::CellSpacing) {
|
||||
None => {}
|
||||
Some(length) => {
|
||||
let width_value = specified::Length::Absolute(Au::from_px(length as int));
|
||||
matching_rules_list.vec_push(from_declaration(
|
||||
PropertyDeclaration::BorderSpacing(
|
||||
SpecifiedValue(
|
||||
border_spacing::SpecifiedValue {
|
||||
horizontal: width_value,
|
||||
vertical: width_value,
|
||||
}))));
|
||||
*shareable = false
|
||||
}
|
||||
}
|
||||
}
|
||||
name if *name == atom!("body") || *name == atom!("tr") || *name == atom!("thead") ||
|
||||
*name == atom!("tbody") || *name == atom!("tfoot") => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue