英文:
Axis of rotate() of css
问题
我参考了其他地方的代码,根据这个代码,它正在创建一个绿色的正方形。但我认为代码应该创建一个十字架。
如果我运行代码,它会像下面的图片一样制作一个正方形。
看起来所有的线都有不同的旋转轴。
你能告诉我为什么它不是制作十字架而是正方形吗?
代码:
import styled from "styled-components";
export default function App() {
const array = [0, 1, 2, 3];
return (
<Wrap>
<div className="container">
<div className="square">
{array.map((idx) => {
return <Line number={idx} />;
})}
</div>
</div>
</Wrap>
);
}
const Wrap = styled.div`
margin: 0;
padding: 0;
box-sizing: border-box;
min-height: 100vh;
justify-content: center;
align-items: center;
background: #111;
.container {
border: 3px solid orange;
position: relative;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.container .square {
top: 200px;
left: 200px;
border: 1px solid blue;
position: absolute;
width: 200px;
height: 200px;
}
`;
const Line = styled.span`
border: 1px solid red;
position: absolute;
inset: 10px;
transform: ${(props) => `rotate(calc(90deg * ${props.number}))`};
&::before {
content: "";
position: absolute;
width: 100%;
height: 4px;
background: #0f0;
}
`;
CodeSandBox
https://codesandbox.io/s/zigzag-f2uybc?file=/src/App.js:0-1864
英文:
I refered the code elsewhere and following the code, it's making a green line square.
But I think the code has to make a cross not the square.
If I run the code it makes the squre lik the picture below
It seems that all lines have different rotation axis.
Can you let me know why it's not making a cross but square?
code:
import styled from "styled-components";
export default function App() {
const array = [0, 1, 2, 3];
return (
<Wrap>
<div className="container">
<div className="square">
{array.map((idx) => {
return <Line number={idx} />;
})}
</div>
</div>
</Wrap>
);
}
const Wrap = styled.div`
margin: 0;
padding: 0;
box-sizing: border-box;
min-height: 100vh;
justify-content: center;
align-items: center;
background: #111;
.container {
border: 3px solid orange;
position: relative;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.container .square {
top: 200px;
left: 200px;
border: 1px solid blue;
position: absolute;
width: 200px;
height: 200px;
}
`;
const Line = styled.span`
border: 1px solid red;
position: absolute;
inset: 10px;
transform: ${(props) => `rotate(calc(90deg * ${props.number}))`};
&::before {
content: "";
position: absolute;
width: 100%;
height: 4px;
background: #0f0;
}
`;
CodeSandBox
https://codesandbox.io/s/zigzag-f2uybc?file=/src/App.js:0-1864
答案1
得分: 1
你的 Line
组件是一个正方形:
position: absolute;
inset: 10px;
因为没有明确的宽度和高度,一个绝对定位的盒子将从 left
和 right
属性推断宽度,从 top
和 bottom
属性推断高度,相对于第一个具有 absolute
、relative
、fixed
或 sticky
定位的父元素。
-> Line
的父元素是 <div className="square">
元素。
所以 Line
将是一个正方形。
卷轴线是 Line
的伪元素之前的部分:
position: absolute;
width: 100%;
height: 4px;
并且没有定位属性 (top
, bottom
, left
, right
),它将从第一个定位父元素的左上角开始。
-> 所以每个 Line
组件是一个透明的正方形,顶部有一条绿线。
当你将正方形旋转90度时,线条会跟随,保持相对于正方形的相同位置。
如果你想要它形成一个十字:
你可以将伪元素居中在 Line
组件中,例如只需添加:
display: flex;
justify-content: center;
align-items: center;
在 Line
组件的 CSS 中。
英文:
Your Line
component is a square :
position: absolute;
inset: 10px;
Because without a explicit width and a height, a box in a absolute position with have inferred width from left
and right
properties, and inferred height from the top
and bottom
properties, so relative to the first parent with a absolute
, relative
, fixed
or sticky
positioning.
-> Line
parent is the <div className="square">
element.
So Line
will be square.
The reel line is the Line
before pseudo element :
position: absolute;
width: 100%;
height: 4px;
And without positioning (top
, bottom
, left
, right
), it will start from the top left corner of the first positioned parent.
-> So Every Line
component is a transparent square with a green line on top.
When you rotating the square by 90°, the line follows, keeping the same position relative to the square.
If you want it to form a cross :
You can center the speudo element in the Line
component, for exemple just add :
display: flex;
justify-content: center;
align-items: center;
In the CSS of the Line
component.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论