diff options
Diffstat (limited to 'components/style/values/specified/length.rs')
-rw-r--r-- | components/style/values/specified/length.rs | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/components/style/values/specified/length.rs b/components/style/values/specified/length.rs index 27f6f5d6f1f..e37aad81f0e 100644 --- a/components/style/values/specified/length.rs +++ b/components/style/values/specified/length.rs @@ -14,11 +14,11 @@ use parser::{Parse, ParserContext}; use std::{cmp, fmt, mem}; use std::ascii::AsciiExt; use std::ops::Mul; -use style_traits::ToCss; +use style_traits::{HasViewportPercentage, ToCss}; use style_traits::values::specified::{AllowedLengthType, AllowedNumericType}; use stylesheets::CssRuleType; use super::{AllowQuirks, Number, ToComputedValue}; -use values::{Auto, CSSFloat, Either, FONT_MEDIUM_PX, HasViewportPercentage, None_, Normal}; +use values::{Auto, CSSFloat, Either, FONT_MEDIUM_PX, None_, Normal}; use values::ExtremumLength; use values::computed::{ComputedValueAsSpecified, Context}; use values::specified::calc::CalcNode; @@ -620,7 +620,8 @@ impl Length { Token::Dimension(ref value, ref unit) if num_context.is_ok(value.value) => Length::parse_dimension(context, value.value, unit), Token::Number(ref value) if num_context.is_ok(value.value) => { - if value.value != 0. && !context.parsing_mode.allows_unitless_lengths() && + if value.value != 0. && + !context.parsing_mode.allows_unitless_lengths() && !allow_quirks.allowed(context.quirks_mode) { return Err(()) } @@ -805,9 +806,14 @@ impl LengthOrPercentage { NoCalcLength::parse_dimension(context, value.value, unit).map(LengthOrPercentage::Length), Token::Percentage(ref value) if num_context.is_ok(value.unit_value) => Ok(LengthOrPercentage::Percentage(Percentage(value.unit_value))), - Token::Number(value) if value.value == 0. || - (num_context.is_ok(value.value) && allow_quirks.allowed(context.quirks_mode)) => - Ok(LengthOrPercentage::Length(NoCalcLength::from_px(value.value))), + Token::Number(value) if num_context.is_ok(value.value) => { + if value.value != 0. && + !context.parsing_mode.allows_unitless_lengths() && + !allow_quirks.allowed(context.quirks_mode) { + return Err(()) + } + Ok(LengthOrPercentage::Length(NoCalcLength::from_px(value.value))) + } Token::Function(ref name) if name.eq_ignore_ascii_case("calc") => { let calc = try!(input.parse_nested_block(|i| { CalcNode::parse_length_or_percentage(context, i, num_context) @@ -942,7 +948,8 @@ impl LengthOrPercentageOrAuto { Token::Percentage(ref value) if num_context.is_ok(value.unit_value) => Ok(LengthOrPercentageOrAuto::Percentage(Percentage(value.unit_value))), Token::Number(ref value) if num_context.is_ok(value.value) => { - if value.value != 0. && !context.parsing_mode.allows_unitless_lengths() && + if value.value != 0. && + !context.parsing_mode.allows_unitless_lengths() && !allow_quirks.allowed(context.quirks_mode) { return Err(()) } |