Bootstrap

如何让input框在用户输入后,文字居中显示

要让 input 框中的文字在用户输入后居中显示,你通常不能直接通过 CSS 样式来实现,因为 input 元素的文本对齐通常是基于其类型(如 text, password, search, 等)和浏览器默认样式来决定的。但是,有一些方法可以尝试或变通实现这一效果。

1. 使用 text-align: center;(通常不生效)

在 CSS 中,text-align: center; 通常用于块级元素或行内块级元素来设置内部文本的水平对齐。但是,对于 input 元素,这个属性通常不会改变文本的对齐方式,因为 input 元素内部文本的对齐通常是由浏览器控制的。

2. 使用 flexboxgrid 布局(通常不推荐用于 input

你可以尝试使用 flexboxgrid 布局来尝试居中 input 内部的文本,但这通常不是最佳实践,因为 input 元素并不是为了这样的布局而设计的。

3. 使用 JavaScript 或 jQuery(动态调整)

你可以使用 JavaScript 或 jQuery 来监听 input 元素的输入事件,并动态地调整文本的位置。但这通常非常复杂,并且可能会导致文本位置在用户输入时跳动,这通常不是用户期望的行为。

4. 使用伪元素和 CSS(一种变通方法)

你可以使用 CSS 伪元素(如 ::before::after)来创建一个视觉上类似 input 的元素,并在这个伪元素上应用 text-align: center;。然后,你可以使用 JavaScript 来同步这个伪元素和真正的 input 元素之间的内容。但是,这种方法也有一些缺点,比如可能会影响可访问性和表单的提交行为。

5. 使用自定义的输入组件(推荐)

最好的方法可能是创建一个自定义的输入组件,这个组件可以是一个 div 或其他块级元素,并使用 CSS 来设置内部文本的对齐方式。然后,你可以使用 JavaScript 来监听这个自定义组件的输入事件,并相应地更新关联的隐藏 input 元素的值。这样,你就可以在保持 input 元素可用性的同时,实现文本的居中显示。

示例代码(使用自定义组件)

HTML:

<div class="custom-input">  
  <input type="text" id="hiddenInput" style="position: absolute; opacity: 0;">  
  <div class="input-display" contenteditable="true"></div>  
</div>

CSS:

.custom-input {  
  position: relative;  
  display: inline-block;  
}  
  
.input-display {  
  text-align: center;  
  border: 1px solid #ccc;  
  padding: 5px;  
  outline: none;  
}

 JavaScript (使用 jQuery):

$('.input-display').on('input', function() {  
  $('#hiddenInput').val($(this).text());  
});  
  
// 你可能还需要添加一些额外的逻辑来处理复制、粘贴等事件

 注意:这个示例代码只是一个基本的框架,你可能需要添加更多的逻辑来处理各种边界情况和浏览器兼容性问题。

;