pub(crate) struct ContainingBlockManager<'a, T> {
    pub for_non_absolute_descendants: &'a T,
    pub for_absolute_descendants: Option<&'a T>,
    pub for_absolute_and_fixed_descendants: &'a T,
}
Expand description

A data structure used to track the containing block when recursing through the Fragment tree. It tracks the three types of containing blocks (for all descendants, for absolute and fixed position descendants, and for fixed position descendants).

Fields§

§for_non_absolute_descendants: &'a T

The containing block for all non-absolute descendants. “…if the element’s position is ‘relative’ or ‘static’, the containing block is formed by the content edge of the nearest block container ancestor box.” This is also the case for ‘position: sticky’ elements. https://www.w3.org/TR/CSS2/visudet.html#containing-block-details

§for_absolute_descendants: Option<&'a T>

The containing block for absolute descendants. “If the element has ‘position: absolute’, the containing block is established by the nearest ancestor with a ‘position’ of ‘absolute’, ‘relative’ or ‘fixed’, in the following way:

  1. In the case that the ancestor is an inline element, the containing block is the bounding box around the padding boxes of the first and the last inline boxes generated for that element. In CSS 2.1, if the inline element is split across multiple lines, the containing block is undefined.
  2. Otherwise, the containing block is formed by the padding edge of the ancestor.

https://www.w3.org/TR/CSS2/visudet.html#containing-block-details If the ancestor forms a containing block for all descendants (see below), this value will be None and absolute descendants will use the containing block for fixed descendants.

§for_absolute_and_fixed_descendants: &'a T

The containing block for fixed and absolute descendants. “For elements whose layout is governed by the CSS box model, any value other than none for the transform property also causes the element to establish a containing block for all descendants. Its padding box will be used to layout for all of its absolute-position descendants, fixed-position descendants, and descendant fixed background attachments.” https://w3c.github.io/csswg-drafts/css-transforms-1/#containing-block-for-all-descendants See ComputedValues::establishes_containing_block_for_all_descendants for a list of conditions where an element forms a containing block for all descendants.

Implementations§

source§

impl<'a, T> ContainingBlockManager<'a, T>

source

pub(crate) fn get_containing_block_for_fragment( &self, fragment: &Fragment, ) -> &T

source

pub(crate) fn new_for_non_absolute_descendants( &self, for_non_absolute_descendants: &'a T, ) -> Self

source

pub(crate) fn new_for_absolute_descendants( &self, for_non_absolute_descendants: &'a T, for_absolute_descendants: &'a T, ) -> Self

source

pub(crate) fn new_for_absolute_and_fixed_descendants( &self, for_non_absolute_descendants: &'a T, for_absolute_and_fixed_descendants: &'a T, ) -> Self

Auto Trait Implementations§

§

impl<'a, T> Freeze for ContainingBlockManager<'a, T>

§

impl<'a, T> RefUnwindSafe for ContainingBlockManager<'a, T>
where T: RefUnwindSafe,

§

impl<'a, T> Send for ContainingBlockManager<'a, T>
where T: Sync,

§

impl<'a, T> Sync for ContainingBlockManager<'a, T>
where T: Sync,

§

impl<'a, T> Unpin for ContainingBlockManager<'a, T>

§

impl<'a, T> UnwindSafe for ContainingBlockManager<'a, T>
where T: RefUnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> Downcast<T> for T

source§

fn downcast(&self) -> &T

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

impl<T> MaybeBoxed<Box<T>> for T

source§

fn maybe_boxed(self) -> Box<T>

Convert
source§

impl<T> MaybeBoxed<T> for T

source§

fn maybe_boxed(self) -> T

Convert
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> Upcast<T> for T

source§

fn upcast(&self) -> Option<&T>

source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> ErasedDestructor for T
where T: 'static,

source§

impl<T> MaybeSendSync for T

source§

impl<T> WasmNotSend for T
where T: Send,

source§

impl<T> WasmNotSendSync for T

source§

impl<T> WasmNotSync for T
where T: Sync,