为什么更改元素的宽度会影响其同级?

邮递员

这不是第一次发生,我从来没有找到一个很好的解释。

在这种情况下,我h3p内部内部div更改p的后widthh3的宽度也随之更改,就像将宽度应用于其父对象一样。

  1. 为什么会这样?

  1. 我发现此情况下的修复程序(或至少一种修复程序)适用display: inline-blockh3如果将其删除,则会看到该按钮的段落宽度为95vw这项工作如何进行?

谢谢

let button = document.querySelector('.button')
let body = document.querySelector('.body')
let container = document.querySelector('.container')

button.addEventListener('click', ()=> {
  let colorOne = parseInt((Math.random() * 255) + 1)
  let colorTwo = parseInt((Math.random() * 255) + 1)
  let colorThree = parseInt((Math.random() * 255) + 1)

  let colorOneOne = parseInt((Math.random() * 255) + 1)
  let colorTwoTwo = parseInt((Math.random() * 255) + 1)
  let colorThreeThree = parseInt((Math.random() * 255) + 1)

  let deg = parseInt((Math.random() * 360) + 1)

  body.style.background = 'linear-gradient(' + deg + 'deg' + ', ' + 'rgb(' + colorOne + ', ' + colorTwo + ', ' + colorThree + ')' +  ',' + 'rgb(' + colorOneOne + ',' + colorTwoTwo + ',' + colorThreeThree + '))'
  //linear-gradient(45deg, rgb(28,28,84), rgb(38,58,119))

  document.querySelector('.color').innerText = 'linear-gradient(' + deg + 'deg' + ', ' + 'rgb(' + colorOne + ', ' + colorTwo + ', ' + colorThree + ')' +  ',' + 'rgb(' + colorOneOne + ',' + colorTwoTwo + ',' + colorThreeThree + '))'

  button.style.border = 'none'
  document.querySelector('.scrollto').style.display = 'block'
})

window.addEventListener('touchmove', ()=> {
  body.style.background = 'white'
  document.querySelector('.color').innerText = ''
  document.querySelector('.scrollto').style.display = 'none'
  button.style.border = '1px solid black'
})
.button {
  font-family: 'Poppins', sans-serif;
  border-radius: .5em;
  padding: .3em .7em;
  font-size: 1.1em;
  position: relative;
  background: white;
  mix-blend-mode: screen;
  border: 1px solid black;
  display: inline-block;
}

@media screen and (max-width: 382px) {
  .button {
    width: 10em;
  }
}

body {
  min-height: 100vh;
  margin: 0;
}

.color {
  font-family: 'Poppins', sans-serif;
  color: white;
  text-shadow: 1px 1px 3px black;
  letter-spacing: 1px;
  display: block;
  width: 95vw;
  border: 2px solid black;
}

.container {
  text-align: center;
  position: absolute;
  top: 40vh;
  left: 50vw;
  transform: translate(-50%, -50%);
}

.scrollto {
  position: absolute;
  bottom: 10px;
  left: 50vw;
  transform: translateX(-50%);
  font-family: 'Poppins', sans-serif;
  font-size: .7em;
  display: none;
}
<body class="body">
  
    <div class="container">
      <h3 class="button">Generate Gradient</h3>
      <p class="color"></p>
    </div>
  
    <div class="line">
      <p class="scrollto">swipe on screen to reset</p>
    </div>

陪同Afif

如果除去inline-blockh3它会得到它的默认显示是block,这意味着采取的父元素的整个宽度

现在,诀窍是父元素的宽度为position:absolute1。它的宽度由“缩小适合”算法定义,这意味着该宽度基于其内容。

内容是一个h3block元素和一个pblock元素。您仅定义的宽度,p这样就可以定义position:absolute元素的宽度,然后h3将是其父元素的完整宽度,因此在逻辑上将遵循设置为的宽度p

这里是不同情况的插图,可以更好地理解:

.container {
  position:absolute;
  border:1px solid;
}
.container > * {
  border:1px solid red;
}
<div class="container">
  <h3 class="button">Generate Gradient</h3>
  <p class="color">some text </p>
</div>

<div class="container" style="top:150px">
  <h3 class="button">Generate Gradient</h3>
  <p class="color">a text longer than the above one</p>
</div>

<div class="container" style="left:250px">
  <h3 class="button" style="display:inline-block">Generate Gradient</h3>
  <p class="color">a text longer than the above one</p>
</div>

您可以看到默认情况下两者都应为父宽度的100%,而较长的内容将定义该宽度。如果制作一个元素inline-block,它将仅适合其内容,而不再遵守块元素规则(即父元素宽度的100%)。


这是一个简化的说明,如果您想获得更准确的细节,则需要参考规范并找到每种情况下宽度的计算方式。

块元素:https : //www.w3.org/TR/CSS21/visudet.html#blockwidth

内联块元素:https : //www.w3.org/TR/CSS21/visudet.html#inlineblock-width

绝对定位的元素:https : //www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当以%或px为单位定义块元素的宽度时,为什么布局会更改

来自分类Dev

为什么添加最小/最大属性会更改Chrome中数字HTML5输入元素的宽度?

来自分类Dev

为什么我的范围不包含循环更改元素?

来自分类Dev

为什么Gmail会更改某些元素的id元素?

来自分类Dev

使用引导程序,添加位置绝对会更改元素的宽度

来自分类Dev

为什么在元素上设置填充会影响同一div中的所有同级

来自分类Dev

为什么这些内联块元素会产生额外的宽度?

来自分类Dev

为什么边际子元素会影响身体元素?

来自分类Dev

CSS转换为什么会影响站点宽度?

来自分类Dev

CSS使flex包装的元素不超过其同级元素的宽度

来自分类Dev

包含自身的列表-为什么重置其元素会影响第一级?

来自分类Dev

根据屏幕尺寸更改元素的宽度

来自分类Dev

使用React Hooks更改元素类Name和同级

来自分类Dev

Vega-lite:为什么图形宽度会影响轴标签的格式?

来自分类Dev

为什么更改list [i]会影响列表,但更改元素不会在`for中,对于inputList中的元素呢?

来自分类Dev

如何更改元素innerText而不更改其子元素

来自分类Dev

为什么JavaScript“ style.display ='block'会更改元素的宽度?

来自分类Dev

为什么更改StringBuilder会更改其hashCode?

来自分类Dev

为什么更改新哈希值会影响旧哈希

来自分类Dev

CSS转换为什么会影响站点宽度?

来自分类Dev

javascript设置宽度尺寸更改元素位置

来自分类Dev

为什么此浮动父级在考虑同级之前计算其宽度?

来自分类Dev

为什么添加最小/最大属性会更改Chrome中数字HTML5输入元素的宽度?

来自分类Dev

为什么ajax异步调用不会更改元素的innerHTML?

来自分类Dev

为什么使用固定属性更改元素的大小?

来自分类Dev

为什么更改数组中的复制元素会影响原始元素?

来自分类Dev

jQuery:根据屏幕宽度更改元素位置

来自分类Dev

为什么表格列标题会更改其宽度&

来自分类Dev

为什么inline-block会根据孩子的宽度自动调整其宽度?

Related 相关文章

  1. 1

    当以%或px为单位定义块元素的宽度时,为什么布局会更改

  2. 2

    为什么添加最小/最大属性会更改Chrome中数字HTML5输入元素的宽度?

  3. 3

    为什么我的范围不包含循环更改元素?

  4. 4

    为什么Gmail会更改某些元素的id元素?

  5. 5

    使用引导程序,添加位置绝对会更改元素的宽度

  6. 6

    为什么在元素上设置填充会影响同一div中的所有同级

  7. 7

    为什么这些内联块元素会产生额外的宽度?

  8. 8

    为什么边际子元素会影响身体元素?

  9. 9

    CSS转换为什么会影响站点宽度?

  10. 10

    CSS使flex包装的元素不超过其同级元素的宽度

  11. 11

    包含自身的列表-为什么重置其元素会影响第一级?

  12. 12

    根据屏幕尺寸更改元素的宽度

  13. 13

    使用React Hooks更改元素类Name和同级

  14. 14

    Vega-lite:为什么图形宽度会影响轴标签的格式?

  15. 15

    为什么更改list [i]会影响列表,但更改元素不会在`for中,对于inputList中的元素呢?

  16. 16

    如何更改元素innerText而不更改其子元素

  17. 17

    为什么JavaScript“ style.display ='block'会更改元素的宽度?

  18. 18

    为什么更改StringBuilder会更改其hashCode?

  19. 19

    为什么更改新哈希值会影响旧哈希

  20. 20

    CSS转换为什么会影响站点宽度?

  21. 21

    javascript设置宽度尺寸更改元素位置

  22. 22

    为什么此浮动父级在考虑同级之前计算其宽度?

  23. 23

    为什么添加最小/最大属性会更改Chrome中数字HTML5输入元素的宽度?

  24. 24

    为什么ajax异步调用不会更改元素的innerHTML?

  25. 25

    为什么使用固定属性更改元素的大小?

  26. 26

    为什么更改数组中的复制元素会影响原始元素?

  27. 27

    jQuery:根据屏幕宽度更改元素位置

  28. 28

    为什么表格列标题会更改其宽度&

  29. 29

    为什么inline-block会根据孩子的宽度自动调整其宽度?

热门标签

归档