绝对定位div宽度如何自适应内容。

yeachen
  • 1.6k
.parent {
            width: 500px;
            height: 500px;
            background: red;
            margin: 150px auto;
            position: relative;
        }
        .child {
            left: 300px;
            top: 200px;
            background: yellow;
            position: absolute; 
            width: auto;
            font-size: 16px;
            line-height: 16px;
            max-width: 500px;
        }
<div class="parent">
        <div class="child">
            地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图地图
        </div>
    </div>

clipboard.png

child并没有跟着内容自适应,而是自动换行了。

希望结果是

clipboard.png
想问下这个如何实现。

回复
阅读 16k
6 个回答

在.child新增css属性white-space: nowrap;

.child {
    left: 300px;
    top: 200px;
    background: yellow;
    position: absolute;
    width: auto;
    font-size: 16px;
    line-height: 16px;
    max-width: 500px;
    white-space: nowrap;
}

因为规范的原因默认就这么显示了,解决办法的话你这里给的不够详细,需要具体的场景,外层代码,业务需求都要知道。才能给出我的方案。
解释下不能自适应式的原因:绝对定位不可替换元素的宽度计算中,如果width,rightautoleft不为auto
那么宽度=min(max(首选最小宽度, 可用宽度), 首选宽度)

3个宽度说明:

  1. 首选宽度:按照不自动断行的方式排版,取得的内容宽度(可以理解为不受容器限制自动排列的宽度就是你想要的效果)

  2. 首选最小宽度:calculate the preferred minimum width, e.g.,by trying all possible line breaks(我理解就是在1的情况下你把容器不断缩小到不能换行,一般是单个文字的宽度)

  3. 可用宽度:就是把right设置为0,计算出的width

max-width:500px;改成width:500px;

sjodu
  • 1
新手上路,请多包涵

考虑css3属性吗?
父级添加display:flex;justify-content:center;align-items:center。

定宽,或者改成right:-300px;

佘葛门特
  • 4
新手上路,请多包涵

position值为absolute时,子元素宽度默认自适应父元素,不会越界,要实现你的想法要定宽,不能auto
position值为relative时,子元素宽度默认和父元素宽度一致,即500px,调整定位值即可

宣传栏