首页 > 其他分享 >子元素使用transform旋转后没有撑起父元素

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

时间:2023-03-24 17:55:59浏览次数:87  
标签:rotateDeg const 撑起 元素 transform 旋转 width containerRef

问题:

子元素使用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(${rotateDeg}deg)` }} />
            </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;
  }
}

标签:rotateDeg,const,撑起,元素,transform,旋转,width,containerRef
From: https://www.cnblogs.com/ZerlinM/p/17252919.html

相关文章

  • Openlayers中使用Cluster实现点位元素重合时动态聚合与取消聚合
    场景Openlayers中使用Cluster实现缩放地图时图层聚合与取消聚合:Openlayers中使用Cluster实现缩放地图时图层聚合与取消聚合_BADAO_LIUMANG_QIZHI的博客-上面实现缩放地图时......
  • Transformer论文精读(李沐)
    摘要序列转录模型:给你一个序列,生成一个序列simplenetworkarchitecture:“简单的模型”不再也不应该是一个贬义词,简单高效应当是值得提倡的BLEU:机器翻译中的衡量标准 ......
  • CSS 伪元素
    CSS 伪元素CSS伪元素是用来添加一些选择器的特殊效果。语法伪元素的语法:selector:pseudo-element{property:value;}CSS类也可以使用伪元素:selector.class:pseud......
  • css基础 CSS 组合选择符、CSS 伪类、CSS 伪元素
    阅读目录CSS组合选择符后代选择器子元素选择器相邻兄弟选择器后续兄弟选择器CSS伪类(Pseudo-classes)伪类和CSS类CSS:first-child伪类匹配第一个``元素匹配所有......
  • 内层图片元素高度自适应,外层盒子高度如何保持跟图片高度一致?
    在开发的过程中,外层盒子高度不确定的情况下,想要跟内层图片高度保持一致,内层图片高度设为width:100%;height:auto;外层box高度也是width:100%;height:auto.为什么会比图片本......
  • 俩个数组中找出相同的元素,并添加样式
    result.Tags.tags.forEach((item,index)=>{letidx1=result.Tags.lightHighArr.indexOf(item)letidx2=result.Tags.wordArr......
  • CSS中的transform(2D转换)
    transform是元素转换属性,其属性值为转换函数,使用该属性可以让元素向指定方向移动、缩放大小、旋转等变化。有以下三种转换函数:旋转函数(rotate)移动函数(translate)缩放......
  • Debunking Rumors on Twitter with Tree Transformer
    Article:l 论文标题:DebunkingRumorsonTwitterwithTreeTransformer(利用树状Transformer模型揭露Twitter中的谣言)l 论文作者:JingMa、WeiGaol 论文来源:2020......
  • Adaptive ship-radiated noise recognition with learnable fine-grained wavelet tra
    摘要分析海洋声环境是一项棘手的任务。背景噪声和可变信道传输环境使舰船辐射噪声的准确识别变得复杂。现有的识别系统在处理多变的水下环境方面能力较弱,在实际应用中表现......
  • xpath元素定位常用的几种方法
    元素定位有8种方式,但是在工作中一般都用css、xpath定位。id定位需要开发配合,而且项目迭代很快,大多都是用的框架,不会单独去定义id。css定位语法比较简洁,运行速度稍快,但总......