/* This Source Code Form is subject to the terms of the Mozilla Public *License,v.2.0.IfacopyoftheMPLwasnotdistributedwiththis
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
/// Implements a method that checks if the position is centered. pubtrait PositionComponent { /// Returns if the position component is 50% or center. /// For pixel lengths, it always returns false. fn is_center(&self) -> bool;
}
/// A generic type for representing an `Auto | <position>`. /// This is used by <offset-anchor> for now. /// https://drafts.fxtf.org/motion-1/#offset-anchor-property #[derive(
Animate,
Clone,
ComputeSquaredDistance,
Copy,
Debug,
Deserialize,
MallocSizeOf,
Parse,
PartialEq,
Serialize,
SpecifiedValueInfo,
ToAnimatedZero,
ToAnimatedValue,
ToComputedValue,
ToCss,
ToResolvedValue,
ToShmem,
)] #[repr(C, u8)] pubenum GenericPositionOrAuto<Pos> { /// The <position> value.
Position(Pos), /// The keyword `auto`.
Auto,
}
pubuseself::GenericPositionOrAuto as PositionOrAuto;
/// Returns the integer value if it is an integer, or `auto`. #[inline] pubfn integer_or(self, auto: Integer) -> Integer { matchself {
ZIndex::Integer(n) => n,
ZIndex::Auto => auto,
}
}
}
/// Ratio or None. #[derive(
Animate,
Clone,
ComputeSquaredDistance,
Copy,
Debug,
MallocSizeOf,
PartialEq,
SpecifiedValueInfo,
ToAnimatedValue,
ToComputedValue,
ToCss,
ToResolvedValue,
ToShmem,
)] #[repr(C, u8)] pubenum PreferredRatio<N> { /// Without specified ratio #[css(skip)]
None, /// With specified ratio
Ratio( #[animation(field_bound)] #[css(field_bound)] #[distance(field_bound)]
Ratio<N>,
),
}
/// A generic value for the `aspect-ratio` property, the value is `auto || <ratio>`. #[derive(
Animate,
Clone,
ComputeSquaredDistance,
Copy,
Debug,
MallocSizeOf,
PartialEq,
SpecifiedValueInfo,
ToAnimatedValue,
ToComputedValue,
ToCss,
ToResolvedValue,
ToShmem,
)] #[repr(C)] pubstruct GenericAspectRatio<N> { /// Specifiy auto or not. #[animation(constant)] #[css(represents_keyword)] pub auto: bool, /// The preferred aspect-ratio value. #[animation(field_bound)] #[css(field_bound)] #[distance(field_bound)] pub ratio: PreferredRatio<N>,
}
/// Specified type for `inset` properties, which allows /// the use of the `anchor()` function. /// Note(dshin): `LengthPercentageOrAuto` is not used here because /// having `LengthPercentageOrAuto` and `AnchorFunction` in the enum /// pays the price of the discriminator for `LengthPercentage | Auto` /// as well as `LengthPercentageOrAuto | AnchorFunction`. This increases /// the size of the style struct, which would not be great. /// On the other hand, we trade for code duplication, so... :( #[derive(
Animate,
Clone,
ComputeSquaredDistance,
Debug,
MallocSizeOf,
PartialEq,
ToCss,
ToShmem,
ToAnimatedValue,
ToAnimatedZero,
ToComputedValue,
ToResolvedValue,
)] #[repr(C)] pubenum GenericInset<P, LP> { /// A `<length-percentage>` value.
LengthPercentage(LP), /// An `auto` value.
Auto, /// Inset defined by the anchor element. /// /// <https://drafts.csswg.org/css-anchor-position-1/#anchor-pos>
AnchorFunction( #[animation(field_bound)] #[distance(field_bound)] Box<GenericAnchorFunction<P, LP>>,
), /// Inset defined by the size of the anchor element. /// /// <https://drafts.csswg.org/css-anchor-position-1/#anchor-pos>
AnchorSizeFunction( #[animation(field_bound)] #[distance(field_bound)] Box<GenericAnchorSizeFunction<LP>>,
),
}
impl<P, LP> SpecifiedValueInfo for GenericInset<P, LP> where
LP: SpecifiedValueInfo,
{ fn collect_completion_keywords(f: style_traits::KeywordsCollectFn) {
LP::collect_completion_keywords(f);
f(&["auto"]); if static_prefs::pref!("layout.css.anchor-positioning.enabled") {
f(&["anchor", "anchor-size"]);
}
}
}
/// Anchor function used by inset properties. This resolves /// to length at computed time. /// /// https://drafts.csswg.org/css-anchor-position-1/#funcdef-anchor #[derive(
Animate,
Clone,
ComputeSquaredDistance,
Debug,
MallocSizeOf,
PartialEq,
SpecifiedValueInfo,
ToShmem,
ToAnimatedValue,
ToAnimatedZero,
ToComputedValue,
ToResolvedValue,
Serialize,
Deserialize,
)] #[repr(C)] pubstruct GenericAnchorFunction<Percentage, LengthPercentage> { /// Anchor name of the element to anchor to. /// If omitted, selects the implicit anchor element. #[animation(constant)] pub target_element: DashedIdent, /// Where relative to the target anchor element to position /// the anchored element to. pub side: AnchorSide<Percentage>, /// Value to use in case the anchor function is invalid. pub fallback: Optional<LengthPercentage>,
}
impl<Percentage, LengthPercentage> GenericAnchorFunction<Percentage, LengthPercentage> { /// Resolve the anchor function. On failure, return reference to fallback, if exists. pubfn resolve<'a>(
&'a self,
side: PhysicalSide,
position_property: PositionProperty,
) -> AnchorResolutionResult<'a, LengthPercentage> { if !position_property.is_absolutely_positioned() { return AnchorResolutionResult::new_anchor_invalid(self.fallback.as_ref());
}
if !self.side.valid_for_side(side) { return AnchorResolutionResult::new_anchor_invalid(self.fallback.as_ref());
}
// TODO(dshin): Do the actual anchor resolution here.
AnchorResolutionResult::new_anchor_invalid(self.fallback.as_ref())
}
}
/// Keyword values for the anchor positioning function. #[derive(
Animate,
Clone,
ComputeSquaredDistance,
Copy,
Debug,
MallocSizeOf,
PartialEq,
SpecifiedValueInfo,
ToCss,
ToShmem,
Parse,
ToAnimatedValue,
ToAnimatedZero,
ToComputedValue,
ToResolvedValue,
Serialize,
Deserialize,
)] #[repr(u8)] pubenum AnchorSideKeyword { /// Inside relative (i.e. Same side) to the inset property it's used in.
Inside, /// Same as above, but outside (i.e. Opposite side).
Outside, /// Top of the anchor element.
Top, /// Left of the anchor element.
Left, /// Right of the anchor element.
Right, /// Bottom of the anchor element.
Bottom, /// Refers to the start side of the anchor element for the same axis of the inset /// property it's used in, resolved against the positioned element's containing /// block's writing mode.
Start, /// Same as above, but for the end side.
End, /// Same as `start`, resolved against the positioned element's writing mode.
SelfStart, /// Same as above, but for the end side.
SelfEnd, /// Halfway between `start` and `end` sides.
Center,
}
/// Anchor side for the anchor positioning function. #[derive(
Animate,
Clone,
ComputeSquaredDistance,
Copy,
Debug,
MallocSizeOf,
PartialEq,
Parse,
SpecifiedValueInfo,
ToCss,
ToShmem,
ToAnimatedValue,
ToAnimatedZero,
ToComputedValue,
ToResolvedValue,
Serialize,
Deserialize,
)] #[repr(C)] pubenum AnchorSide<P> { /// A keyword value for the anchor side.
Keyword(AnchorSideKeyword), /// Percentage value between the `start` and `end` sides.
Percentage(P),
}
impl<P> AnchorSide<P> { /// Is this anchor side valid for a given side? pubfn valid_for_side(&self, side: PhysicalSide) -> bool { matchself { Self::Keyword(k) => k.valid_for_side(side), Self::Percentage(_) => true,
}
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.21 Sekunden
(vorverarbeitet am 2026-06-19)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.