今天看到自己的问题,感到羞愧为什么不能正确地思考它?基本上,自动边距是左边距50%减去div宽度。在此基础上,我们可以像这样布局元素:
margin-left: calc(50% + 5px);
transform: translateX(-50%);
使用前面的代码等同于
calc(auto + 5px);
。由于calc不支持auto,我们需要使用实际的转换概念进行欺骗。这意味着我们也可以使用绝对位置布局并采用
50% - half of width
的概念,但我喜欢在这里使用
transform
以保持简单。
请查看下面的演示:
.parent{
position: relative;
}
.child{
border: 2px solid green;
width: 25%;
height: 50px;
margin: 10px auto;
}
.right{
margin-left: calc(50% + 20px);
transform: translateX(-50%);
}
.left{
margin-left: calc(50% - 20px);
transform: translateX(-50%);
}
#border{
height: 100%;
border: 1px solid yellow;
width: 25%;
margin: auto;
position: absolute;
z-index: -1;
top: 0;
left: 0;
right: 0;
}
<div class="parent">
<div id="auto" class="child">
auto margin
</div>
<div id="auto-right" class="child right">
auto + pushed to right
</div>
<div class="child left">
auto + pushed to left
</div>
<div id="border"></div>
</div>
增加或减少左右加减值以正确理解。
注意:使用以下代码:
.right{
margin-left: calc(50% + 20px);
transform: translateX(-50%);
}
与使用相同:
.right{
margin-right: calc(50% - 20px);
transform: translateX(-50%);
}
就这个概念而言。
还要注意,问题与一些百分比计算加减所需的偏移量有关。因此在这个答案中,既使用了calc又使用了transform。如果您确切地需要在中间进行偏移,则可以只使用(无需margin-left或margin-right):
transform: translateX(-20px)
答案是使用50%的计算,但问题要求使用类似于calc(20% - 20px)
的一些百分比。