子元素使用transform旋转后没有撑起父元素

Posted ZerlinM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了子元素使用transform旋转后没有撑起父元素相关的知识,希望对你有一定的参考价值。

问题:

子元素使用transform:rotate(90deg) 旋转90度,并没有如愿的自动将父元素撑开宽高,那么,如何正常的撑开父元素(高宽对应)

思路:

在旋转后,我们可通过获取子元素当前的宽高,来赋值给父元素,那么,代码如下:
注意:需要注意的是,我们需要判断当前是否为已旋转,如果已旋转,那么就需要将子元素的宽赋值给父元素的高,因为子元素已经做了旋转,宽高互调。

js:

import React,  useState, useEffect, useRef  from \'react\';
import  Button  from \'antd\';
import styles from \'./index.less\';

export default function RotateBox() 
    const [rotateDeg, setRotateDeg] = useState(0)
    const [viewWidth, setViewWidth] = useState()
    const [viewHeight, setViewHeight] = useState()

    const containerRef = useRef(null);

    const rotatePage = (type) => 
        console.log(\'typp\', type)
        if (type === \'LEFT\') 
            setRotateDeg(rotateDeg - 90)
         else 
            setRotateDeg(rotateDeg + 90)
        
    

    useEffect(() => 
        // const width = Math.abs(rotateDeg % 180) === 90 ? containerRef.current.offsetHeight : containerRef.current.offsetWidth
        const height = Math.abs(rotateDeg % 180) === 90 ? containerRef.current.offsetWidth : containerRef.current.offsetHeight
        // setViewWidth(width);
        setViewHeight(height);
    , [rotateDeg])

    return (
        <div className=styles.content>
            <div className=styles.box style=
                // width: viewWidth,
                height: viewHeight
            >
                <div ref=containerRef className=styles[\'box-rotate\'] style= transform: `rotate($rotateDegdeg)`  />
            </div>
            <div className=styles.btns>
                <Button onClick=() => rotatePage(\'LEFT\')>向左旋转</Button>
                <Button onClick=() => rotatePage(\'RIGHT\')>向右旋转</Button>
            </div>
        </div>
    )

css:

.content 
  width: 100%;

  .box 
    width: 100%;
    min-width: 100px;
    min-height: 100px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    background-color: #eee;
    overflow: hidden;

    &-rotate 
      width: 100%;
      height: 30px;
      background-color: #aaa;
    
  

  .btns 
    width: 100%;
    text-align: center;
  

以上是关于子元素使用transform旋转后没有撑起父元素的主要内容,如果未能解决你的问题,请参考以下文章

如何解决高度塌陷

浮动+清除浮动

高度塌陷BFCclear

Web前端之高度塌陷与BFC

CSS中几种解决高度坍塌方式分析

清除浮动原理