Skip to main content

whisker_css/prop/
transform.rs

1//! Transform-related properties.
2
3use crate::css::Css;
4use crate::data_type::Length;
5use crate::data_type_ext::Position;
6use crate::keyword::{BackfaceVisibility, TransformBox, TransformStyle};
7
8impl Css {
9    /// Sets `transform-origin`.
10    /// <https://lynxjs.org/api/css/properties/transform-origin>
11    pub fn transform_origin(self, v: Position) -> Self {
12        self.push("transform-origin", v)
13    }
14
15    /// Sets `transform-box`.
16    /// <https://lynxjs.org/api/css/properties/transform-box>
17    pub fn transform_box(self, v: TransformBox) -> Self {
18        self.push("transform-box", v)
19    }
20
21    /// Sets `transform-style`.
22    /// <https://lynxjs.org/api/css/properties/transform-style>
23    pub fn transform_style(self, v: TransformStyle) -> Self {
24        self.push("transform-style", v)
25    }
26
27    /// Sets `backface-visibility`.
28    /// <https://lynxjs.org/api/css/properties/backface-visibility>
29    pub fn backface_visibility(self, v: BackfaceVisibility) -> Self {
30        self.push("backface-visibility", v)
31    }
32
33    /// Sets `perspective` — distance from the viewer to the z=0 plane.
34    /// <https://lynxjs.org/api/css/properties/perspective>
35    pub fn perspective(self, v: Length) -> Self {
36        self.push("perspective", v)
37    }
38
39    /// Sets `perspective-origin`.
40    /// <https://lynxjs.org/api/css/properties/perspective-origin>
41    pub fn perspective_origin(self, v: Position) -> Self {
42        self.push("perspective-origin", v)
43    }
44}
45
46#[cfg(test)]
47mod tests {
48    use crate::data_type_ext::{Position, PositionKeyword};
49    use crate::ext::*;
50    use crate::keyword::*;
51    use crate::Css;
52
53    #[test]
54    fn transform_origin_keywords() {
55        let s = Css::new().transform_origin(Position::Keyword(PositionKeyword::Center));
56        assert_eq!(s.to_string(), "transform-origin: center;");
57    }
58
59    #[test]
60    fn transform_box_styles() {
61        let s = Css::new()
62            .transform_box(TransformBox::BorderBox)
63            .transform_style(TransformStyle::Preserve3d)
64            .backface_visibility(BackfaceVisibility::Hidden);
65        assert_eq!(
66            s.to_string(),
67            "transform-box: border-box; transform-style: preserve-3d; backface-visibility: hidden;"
68        );
69    }
70
71    #[test]
72    fn perspective_props() {
73        let s = Css::new()
74            .perspective(500.px())
75            .perspective_origin(Position::Keyword(PositionKeyword::Center));
76        assert_eq!(
77            s.to_string(),
78            "perspective: 500px; perspective-origin: center;"
79        );
80    }
81}