gpt4 book ai didi

html - 元素一旦超出父元素的宽度就会失去所有宽度

转载 作者:太空狗 更新时间:2023-10-29 15:07:12 26 4
gpt4 key购买 nike

为什么下例中的元素会自行折叠?

即使该元素设置为 box-sizing: border-box,它的边框仍将保留,但该元素一旦超出其父元素的边界就会失去所有宽度。

这是怎么回事?

CODEPEN

let   t = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at velit commodo, facilisis ex vitae, viverra tellus.'
let c = 0
const e = document.getElementById('statement-container')
const i = setInterval(function(){
if (t[c] !== ' ') e.innerHTML += t[c]
else e.innerHTML += ' '
c++
if (c >= t.length) clearInterval(i)
}, 100)
* {
box-sizing : border-box;
}

body {
width : 100vw;
height : 100vh;
margin : 0;
}

section:first-child {
width : 40vw;
height : 100vh;
position : relative;
left : 30vw;
display : flex;
border : solid blue 1px;
}

#statement-container, #caret {
height : 15%;
position : relative;
top : calc(50% - 7.5%);
}

#statement-container {
z-index : 98;
font-family : beir-bold;
font-size : 6.5vmin;
color : red;
}

#caret {
z-index : 99;
width : 10%;
border : solid green 5px;
background : orange;
}
<body>
<section>
<div id="statement-container"></div>
<div id="caret"></div>
</section>
</body>

最佳答案

Why does the element in the following example collapse in on itself?

当你使用 display: flex 部分 上,它的子项变成 flex 元素。

Flex 元素有一个名为 flex 的属性,它是 flex-grow 的简写, flex-shrinkflex-basis ,它根据可用空间及其内容控制元素本身的大小。

flex-basis,在本例中为 flex row direction ,这是默认值,控制元素宽度。

默认值是 flex: 0 1 auto 这意味着它不会增长 (0) 超出其内容,这是允许的收缩 (1) 及其flex-basis (auto) 根据其内容调整大小。

因为在这种情况下 width and flex-basis 做同样的事情,这里给 caret 一个 3% 的设置宽度,只要有足够的空间,它就会保持这个宽度,并且不会增长,但是当空间变成负数(元素不再适合)它将开始缩小到它的内容宽度,它没有任何内容宽度,因此它的内容区域完全崩溃。


一种解决方案是通过将 flex-shrink 更改为 0 来告诉它不允许收缩。

let   t = 'Nothing is completely perfect.'
let c = 0
const e = document.getElementById('statement-container')
const i = setInterval(function(){
if (t[c] !== ' ') e.innerHTML += t[c]
else e.innerHTML += '&nbsp;'
c++
if (c >= t.length) clearInterval(i)
}, 100)
* {
box-sizing : border-box;
}

body {
width : 100vw;
height : 100vh;
margin : 0;
}

section:first-child {
width : 40vw;
height : 100vh;
position : relative;
left : 30vw;
display : flex;
border : solid blue 1px;
}

#statement-container, #caret {
height : 15%;
position : relative;
top : calc(50% - 7.5%);
}

#statement-container {
font-family : beir-bold;
font-size : 15vmin;
color : red;
}

#caret {
flex-shrink : 0; /* added */
width : 5%;
border : solid green 5px;
background : orange;
}
  <section>
<div id="statement-container"></div>
<div id="caret"></div>
</section>

关于html - 元素一旦超出父元素的宽度就会失去所有宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46640056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com