css - 如何使输入元素符合网格容器的尺寸?

标签 css forms css-grid

我在 CSS 网格容器中有一个 input 元素。容器应为 100 像素宽,input 元素占据大部分空间,other-thing 元素占据剩余的 24px。为此,我正在使用 grid-template-columns

如果我将父容器设置为 200px 而不是 100px,这就可以正常工作:

enter image description here

.container {
  grid-template-columns: 1fr 24px;
  grid-template-rows: 1fr;
  display: grid;
  justify-content: center;
  align-items: center;
  width: 200px; /* Try 100px */
  background-color: red;
}

和下面的 HTML

<div class="container">
  <input value="hello"/>
  <div class="other-thing">
    x
  </div>
</div>

但是如果我将容器设为 100px 宽,输入会突然拒绝收缩 - 因此它会与红色容器重叠。

enter image description here

I know input elements have a user stylesheet, but I can't see anything related to width or display there that I should be overriding.

Here is a jsfiddle

如何让 input 只使用容器中的剩余空间,最好使用 grid-template-columns

最佳答案

从视觉 Angular 来看,主要问题是justify-content: center

因为您的容器设置为 width: 100px,所以网格项将在该空间内水平居中,并在容器的两侧均等地溢出。这会导致左侧从屏幕上消失,并且变得完全无法访问(即使通过滚动)。

enter image description here

(有关此行为的完整解释,请参阅:Can't scroll to top of flex item that is overflowing container)

当您切换到 width: 200px 时,容器会获得足够的空间来容纳网格项,因此不会发生溢出。

enter image description here

解决此问题的最快和最简单的方法是删除 justify-content: center。无论如何这是没有意义的,因为容器比内容小,如果容器中没有可用空间,您就无法将内容居中。所以 justify-content 没有做任何事情。

enter image description here

如果您希望所有网格项都适合容器,则将 min-width: 0 添加到 input 元素。这允许 input 缩小到其内容的大小及其 min-width: auto 默认值以下。

enter image description here

(有关此行为的完整解释,请参阅:Prevent content from expanding grid items)

.container {
  grid-template-columns: 1fr 24px;
  display: grid;
  width: 100px;
  border: 2px dashed red;
}

input {
  min-width: 0;
}
<div class="container">
  <input value="hello" />
  <div class="other-thing">x</div>
</div>

请注意,input 元素的默认宽度和最小宽度过去很容易通过 Chrome/Firefox 检查器工具查看。这似乎不再是这种情况。我找不到用户代理样式中的设置。我们必须查看计算值以获取指导,或者假设存在宽度和最小宽度设置。

关于css - 如何使输入元素符合网格容器的尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56545830/

相关文章:

javascript - 更改背景图像

forms - Drupal 7 - 覆盖基本表单 HTML 标记

css - 如何在网格项和容器之间获得网格间隙?

html - 网格格式有问题

javascript - 返回 false 后提交表单

javascript - 如何将下一个同级移动到CSS Grid中的下一行?

css - 如何管理 css 和 php gd2 字体大小?

html - 限制空间文本可以占用一个 div

javascript - 添加类并从元素中删除到花药 sibling - javascript 教程

javascript - Rails - 无法访问表单中的实例变量