import React, { useEffect, useState, useCallback } from 'react'; import styles from './index.less'; import _ from 'lodash'; export default () => { const [xCount, setX] = useState(0); const [yCount, setY] = useState(0); useEffect(() => { const rule = document.getElementById('rule'); const resizeObserver = new ResizeObserver((entries) => { entries.forEach((item) => { const { width, height } = item.contentRect; setX(Math.ceil(width / 100)); setY(Math.ceil(height / 100)); }); }); resizeObserver.observe(rule); return () => { resizeObserver.unobserve(rule); }; }, []); const getScale = useCallback((count, prop) => { let compontents = []; for (let i = 0; i <= count; i++) { compontents.push( <span key={`${prop}_${i}`} style={{ [prop]: i * 100, transform: `translate(-50%, -50%)`, position: 'absolute', }} > {i * 100} </span>, ); } return compontents; }, []); return ( <div className={styles.box} id="rule"> <div className={styles.xRules}> <div style={{ position: 'relative', paddingTop: 20 }}> {getScale(xCount, 'left')} </div> </div> <div className={styles.yRules}> <div style={{ position: 'relative', paddingLeft: 20 }}> {getScale(yCount, 'top')} </div> </div> <div className={styles.left}></div> <div className={styles.right}> <div id="test" className={styles.player}></div> </div> </div> ); };
.box { width: 100%; height: 100%; background: rgb(121, 242, 157); display: flex; justify-content: space-between; align-items: center; position: relative; overflow: hidden; .xRules { position: absolute; width: 100%; white-space: nowrap; height: 20px; left: 0; top: 0; background-image: repeating-linear-gradient( to right, #000000 0, #000000 0.05em, transparent 0, transparent 100px ), repeating-linear-gradient( to right, #000000 0, #000000 0.05em, transparent 0, transparent 50px ), repeating-linear-gradient( to right, #000000 0, #000000 0.05em, transparent 0, transparent 10px ); background-size: 100% 16px, 100% 8px, 100% 4px; background-repeat: no-repeat; } .yRules { position: absolute; width: 20px; height: 100%; left: 0; top: 0; background-image: repeating-linear-gradient( to bottom, #000000 0, #000000 0.05em, transparent 0, transparent 100px ), repeating-linear-gradient( to bottom, #000000 0, #000000 0.05em, transparent 0, transparent 50px ), repeating-linear-gradient( to bottom, #000000 0, #000000 0.05em, transparent 0, transparent 10px ); background-size: 16px 100%, 8px 100%, 4px 100%; background-repeat: no-repeat; } .left { width: 300px; height: 100%; background-color: red; } .right { flex: 1; height: 100%; background-color: blue; display: flex; justify-content: center; align-items: center; .player { width: 50%; height: 50%; background-color: white; z-index: 99; } } }
标签:浏览器,000000,100%,标尺,height,width,background,简单,transparent From: https://www.cnblogs.com/shi2310/p/16661672.html