/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ //! CSS handling for the computed value of //! [`position`][position] values. //! //! [position]: https://drafts.csswg.org/css-backgrounds-3/#position use crate::values::computed::{Integer, LengthPercentage, NonNegativeNumber, Percentage}; use crate::values::generics::position::GenericAnchorFunction; use crate::values::generics::position::Position as GenericPosition; use crate::values::generics::position::PositionComponent as GenericPositionComponent; use crate::values::generics::position::PositionOrAuto as GenericPositionOrAuto; use crate::values::generics::position::ZIndex as GenericZIndex; use crate::values::generics::position::{AspectRatio as GenericAspectRatio, GenericInset}; pub use crate::values::specified::position::{ AnchorName, AnchorScope, DashedIdentAndOrTryTactic, PositionAnchor, PositionArea, PositionAreaKeyword, PositionTryFallbacks, PositionTryOrder, PositionVisibility, }; pub use crate::values::specified::position::{GridAutoFlow, GridTemplateAreas, MasonryAutoFlow}; use crate::Zero; use std::fmt::{self, Write}; use style_traits::{CssWriter, ToCss}; /// The computed value of a CSS `` pub type Position = GenericPosition; /// The computed value of an `auto | ` pub type PositionOrAuto = GenericPositionOrAuto; /// The computed value of a CSS horizontal position. pub type HorizontalPosition = LengthPercentage; /// The computed value of a CSS vertical position. pub type VerticalPosition = LengthPercentage; /// The computed value of an `anchor()` function. pub type AnchorFunction = GenericAnchorFunction; /// A computed type for `inset` properties. pub type Inset = GenericInset; impl Position { /// `50% 50%` #[inline] pub fn center() -> Self { Self::new( LengthPercentage::new_percent(Percentage(0.5)), LengthPercentage::new_percent(Percentage(0.5)), ) } /// `0% 0%` #[inline] pub fn zero() -> Self { Self::new(LengthPercentage::zero(), LengthPercentage::zero()) } } impl ToCss for Position { fn to_css(&self, dest: &mut CssWriter) -> fmt::Result where W: Write, { self.horizontal.to_css(dest)?; dest.write_char(' ')?; self.vertical.to_css(dest) } } impl GenericPositionComponent for LengthPercentage { fn is_center(&self) -> bool { match self.to_percentage() { Some(Percentage(per)) => per == 0.5, _ => false, } } } /// A computed value for the `z-index` property. pub type ZIndex = GenericZIndex; /// A computed value for the `aspect-ratio` property. pub type AspectRatio = GenericAspectRatio;