javascript - 如何防止父元素的宽度影响子元素的宽度?
问题描述
我有一个<div>
作为父母和一个<p>
作为孩子。以<p>
为中心,<div>
并且有一个max-width
,650px
而 的<div>
宽度为800px
。
以前,我<body>
养育了<p>
并且max-width
按预期工作 - 当有一点文字时,它<p>
会非常小。当有很多文本时,<p>
宽度会上升650px
并形成一个新行。
现在,<div>
作为父母,<p>
似乎有max-width
父母宽度的一半,这是我不想要的。
此代码段包含一个滑块来调整父级的width
. 您会注意到<p>
根据父级自动更改大小,这是我不想要的。我希望在没有明确设置的情况下<p>
拥有独立的宽度。我试图修复这个没有效果的使用(正如预期的那样,但值得一试)。!important
document.querySelector("input").oninput = event => {
document.querySelector("div").style.width = event.target.value + "px";
}
@import url("https://fonts.googleapis.com/css2?family=Cinzel&display=swap");
p {
position: absolute;
left: 50%;
transform: translate(-50%, 0%);
background-color: rgba(80, 80, 80, 0.75);
text-align: center;
font-size: 25px;
max-width: 650px !important;
width: auto !important;
}
div {
position: absolute;
background-color: #98765432;
width: 1000px;
height: 200px;
}
<div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<input type="range" min="700" max="1000">
</div>
我可能会尝试的一种解决方案是使用 Javascript 并<canvas>
计算我要设置的文本的宽度并以这种方式设置宽度。但是,我想知道这是否可以在 CSS 中完成。
解决方案
这里重要的信息是任何块级元素将自动采用其父级的全宽(如果提供了值,直到它们达到最大宽度)。
这意味着,如果您的父级 (div) 为 600px,而子级 (p) 的最大宽度为 650 像素,它仍将占用完整的 600 像素,因为这小于它定义的最大宽度,并且因为它是块级,它想占据整个宽度
要记住的另一件有用的事情是,如果您的布局开始变得复杂,有很多 css 规则,请花点时间先做一个简化版本(如我下面的示例),然后在此基础上构建
你可以这样做:
div {
border: 1px dashed #ddd;
text-align: center;
}
p {
max-width: 650px;
display: inline-block;
border: 1px dashed #ddd;
}
<div>
<p>
text
</p>
</div>
<div>
<p>
lots of text lots of text lots of text
lots of text lots of text lots of text
lots of text lots of text lots of text
</p>
</div>
或者像这样使用 flexbox
div {
border: 1px dashed #ddd;
display: flex;
justify-content: center;
}
p {
max-width: 650px;
border: 1px dashed #ddd;
}
<div>
<p>
text
</p>
</div>
<div>
<p>
lots of text lots of text lots of text
lots of text lots of text lots of text
lots of text lots of text lots of text
</p>
</div>
推荐阅读
- python - 为什么选择查询将数据返回为元组,我需要 python 中的关联数组
- javascript - 使用 Javascript 从选择下拉列表中禁用某些选项字段的问题
- javascript - 如何在 React js 中格式化日期
- arduino - ESP32 的无线访问中断了 MPU9250 的读取
- python - Sympy解决引发一个元素不明确的错误
- android - 将 Gradle 插件更新到 3.4.0 后引发 Resources$NotFoundException
- javascript - 显示自动完成的干净结果
- javascript - Apollo writeFragment 返回未定义但 readFragment 有效
- angular - 角度材料对话框未正确显示数据
- java - 传递给函数并用作字符串映射时,Java 对象映射不会将对象隐式转换为字符串