我一直在尝试一种方法,让一个页面元素与它两边的元素重叠,并保持在它们之间的完美中心,我的解决方案是声明position:relative
,并将margin
的负值设置为大约等于元素宽度的50%,但我所能得到的最接近的值是元素宽度占其父元素宽度的一半:
<!DOCTYPE html>
<html>
<head>
<style>
.clap {
position:relative;
margin:auto -16.66%; // This element's share of the entire parent's width = 33.33%
color:#f00
}
</style>
</head>
<body>
<center>
<span style="display:inline-block">1234567890<span class="clap">1234567890</span>1234567890</span>
</center>
</body>
</html>
我试图找到一个只使用CSS的解决方案,它将使用元素本身的宽度,而不是容器的宽度。我不能使用JavaScript来做这件事,因为我计划通过将其嵌入到\style
命令中来将其用作MathJaX的修复。(据我所知,MathJaX不提供在其公式中嵌入HTML或JavaScript代码,所以你明白为什么这必须是CSS的。我知道这是可能的脚本。这是可能的CSS,还是我的奋进是没有希望的?
- 更新:感谢@ Daiwi的建议,我想我已经走上了正确的解决方案之路。感谢大家的回答。以下是修改后的代码:*
.clap {
position:absolute;
display:inline-block;
transform: translate(-50%,0);
color:#f00 // for contrast
}
- 我很乐意向您展示结果,但无法上传图片,抱歉 *
- 另一项更新:我上面介绍的解决方案在HTML/CSS上下文中效果最好,但在MathJaX
array
、matrix
或类似的表格环境中会出现问题。具体来说,如果元素太长,它会在左侧剪切。相对定位会将元素向左移动一半,但会在原来的位置留下一个空白!有什么想法可以修补它吗?*
6条答案
按热度按时间ygya80vv1#
一个纯粹的CSS解决方案是使用
transform
。1.您可以使用
top: 50%;
表示垂直方向,使用left: 50%;
表示水平方向。1.然后使用
translateY(-50%)
进行垂直居中,使用translateX(-50%)
进行水平居中。1.你也可以使用这个技巧将元素对齐到其父元素的底部或右侧,就像在
table-cell
中使用100%
代替css中的50%
。1.如果你想支持旧的浏览器,那么你需要使用
transform
的前缀,我强烈推荐在你的工作流程中使用autoprefixer。nwlls2ji2#
由于元素的大小只有在样式化之后才知道,样式应该如何使用它呢?想象一下:某些元素的宽度是其自身宽度的200(=两倍于“normal”的大小)。它的一个子级的宽度设置为父级的100%(=我们的元素)。元素的默认宽度由它的内容决定。我们元素的内容和元素本身一样宽。但是我们元素还没有宽度,因为我们在等它得到默认值,所以我们可以把它翻倍。结果:什么都不会有宽度。
所以:你想做的事情是不可能的,但是CSS3有它的
calc
,也许你可以用它来接近你想达到的目标?qyzbxkaa3#
我不知道这是不是你想做的,但这里有一个演示:http://cdpn.io/bgkDf
超文本标记语言
中央支助系统
2cmtqfgy4#
“使用元素自身的宽度进行计算或百分比”一般情况下:
(可能不是您问题的最佳解决方案,但却是您问题的答案)
目前,attr函数在Chrome中不起作用。如果那样就好了。但是你可以使用变量,如果你自己设置父属性,或者能够使用预定义的父属性。这样你就可以使用calc()函数来计算你的子属性。
以下是使用浏览器定义的视口大小计算元素宽度的示例:
这可以用在很多有趣的方面,来简化你的CSS。例如@media风格...
bnl4lu3b5#
如果有人(像我一样)试图将元素放在其父元素的中心,请使用以下简单的样式:
643ylb086#
将内容转换为div并将每个div包含在另一个div中以使用
margin: auto
怎么样?示例(每个超级div都有自己的颜色,并在高度上移动了一点以保持清晰):