我需要并排对齐两个<textarea>个元素,以便每个文本区域应该占据窗口的整个高度和宽度的一半.

以下方法很好用,但是...

body {
  display: flex;
}

textarea {
  width: 50%;
}
<textarea></textarea>
<textarea readonly></textarea>

但我不明白为什么50%如果我用display: flex就可以了,但没有就太多了.

这就引出了另一个问题:这真的是完成这项任务的"适当"方式吗?这看起来像是一个"速战速决"的解决方案.有没有一种更"恰当"的方式来调整它们?

推荐答案

默认的flex值为0 1 auto,相当于:

flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;

因此,当您将您的文本作为flex父对象,但不对其应用任何特定的flex条规则时,它们将自动应用flex-shrink: 1;条规则.当你给他们width: 50%;的时候,他们都会试着扩大到父母宽度的50%,但also会明白他们应该根据需要缩小以适应.

因为没有理由让一个文本区比另一个文本区宽,所以它们最终是等宽的.但是,如果您给它们一个更大的宽度(如100%;),您实际上可能会得到相同的行为,如本例所示:

body {
  display: flex;
}

textarea {
  width: 100%;
}
<textarea></textarea>
<textarea readonly></textarea>

我个人最喜欢的一种方法是,将许多项目放在弹性容器中,无论它们的内容如何,都占据相同的宽度,这就是使用以下规则的组合:

.flex {
  display: flex;
}

.flex-child {
  outline: 2px solid red;
  
  width: 0;
  flex: 1 1 auto;
}
<div class="flex">
  <div class="flex-child">One</div>
  <div class="flex-child">Two</div>
  <div class="flex-child">Three</div>
  <div class="flex-child">Four</div>
</div>

将元素的宽度设置为0基本上会告诉FlexBox在考虑元素相对于其sibling 元素的宽度时不考虑其内容,这有助于确保相等的列宽.然后,flex: 1 1 auto;告诉每个项目根据需要展开和折叠,它们将try 沿FLEX轴填充相同数量的空间.

当涉及到理解Flexbox如何在如下情况下工作时,您可能会发现这篇关于CSS技巧的文章很有帮助:Equal Columns With Flexbox: It’s More Complicated Than You Might Think


对于可以获得类似结果的替代方法,您可能有兴趣阅读更多关于如何使用the fr ("fraction") unit在使用CSS网格构建布局时使用the fr ("fraction") unit的信息,该网格可用于定义具有相等宽度的列以及它们之间的间隙.Css Tricks有a useful cheat sheet for working with grid个.

下面是一个使用此方法的示例:

.grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-gap: 1rem;
}

.grid textarea {
  /* Disallow horizontal resizing */
  resize: vertical;
  /* This isn't ideal for how it affects vertical resizing,
  but it does ensure both textareas stay the same height */
  min-height: 100%;
}
<div class="grid">
  <textarea></textarea>
  <textarea readonly></textarea>
</div>

Html相关问答推荐

CSS动画积分计数器

单表单和多个提交(具有多个值)

带有多种 colored颜色 的HTML按钮

需要关于HTML的建议

在iOS中调整HTML邮箱内容的大小

小虫?CSS Flexbox间隙应用于两个内联文本块之间,因为它们之间存在绝对定位的元素

有没有一种方法可以很容易地将这个div从底部:0转换到顶部:0?

如何在VB.NET中用打印预览和直接打印的方式在Html中打印数据表的内容,包括页眉/设置纸张/方向/适合页面/总计

为什么 Select 元素在带有数据绑定的Blazor上行为怪异?

可以';t使我的导航栏在HTML/CSS中正确对齐

有没有一种方法可以提高代码中tailwind 类名的可读性?

如果您将带有 html 标签的字符串数据(name : test) 放在 `

如何防止弹性项目溢出容器?

为 HTML5 文本字段设置最后六位正则表达式模式

如何使用html css将图像显示为附加形状

白色栏超出页面100%的右侧

修复 Vue 3 Component 中的 CSS 以显示后面的 Select 器样式而无需 !important

如何制作一个空的网格模板行来填充剩余空间?

如何将 img 元素定位到特定位置?

使用 CSS 的发光边框动画没有流畅的过渡