Chr*_*ris 18 html css overflow html-input
CSS overflow:visible似乎不适用于输入.
请参阅以下JS小提琴:https://jsfiddle.net/b4sr578j/
input {
border: 1px dashed black;
overflow: visible;
height: 28px;
font-size: 30px;
}Run Code Online (Sandbox Code Playgroud)
<input type='text' value='gggyyyXXX'/>Run Code Online (Sandbox Code Playgroud)
是否可以使gs和ys的底部可见(不增加文本输入的高度)?
谢谢你的帮助.
1)移除高度
2)使用outline而不是border
3)添加否定 outline-offset
4)添加padding微调偏移量
input {
overflow: visible;
font-size: 30px;
outline: 1px dashed black;
border: 0;
outline-offset: -8px;
padding: 6px 0 2px 8px;
}Run Code Online (Sandbox Code Playgroud)
<input type='text' value='gggyyyXXX' />Run Code Online (Sandbox Code Playgroud)
对原始问题的回答 - 正如 Sebastian Hens 已经指出的那样,这是不可能的。原因是因为input元素是替换元素,而溢出属性仅适用于非替换元素。
从 MDN 引用溢出属性:
适用于- 不可替换的块级元素和不可替换的内联块元素
正如评论中已经提到的,理想的解决方案是使用contenteditable元素,因为它们确实尊重overflow设置。
这是一个解决方法,它使用多个linear-gradient来生成虚线边框效果。部分答案取自 Danield 的答案(关于padding和删除的部分height)。最重要的是,我修改了appearance并添加了渐变。
虽然我们没有明确添加高度,但边界内区域的实际高度仍然与您原始代码中的高度相同。我在左侧添加了一个带有您原始代码的输入框以进行比较。不知道你们能不能接受。如果您强制希望height设置 ,那么这将不起作用。
input.test {
appearance: none;
box-sizing: border-box;
font-size: 30px;
padding: 2px 0px 6px;
border: 0;
background: linear-gradient(to right, gray 50%, transparent 50%), linear-gradient(to right, gray 50%, transparent 50%), linear-gradient(to bottom, gray 50%, transparent 50%), linear-gradient(to bottom, gray 50%, transparent 50%);
background-size: 8px 1px, 8px 1px, 1px 8px, 1px 8px;
background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;
background-position: 0px 0px, 0px 1em, 0px 0px, 100% 0px;
box-shadow: inset 0px -10px 0px white;
width: 200px;
}
input.original {
border: 1px dashed black;
overflow: visible;
height: 28px;
font-size: 30px;
width: 200px;
}
input{
vertical-align: top;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<input type='text' value='gggyyyXXX' class='original' />
<input type='text' value='gggyyyXXX' class='test' />Run Code Online (Sandbox Code Playgroud)
在上面的代码片段中,白色box-shadow用于隐藏渐变的底部,使其不会溢出(您可以通过删除 来查看效果box-shadow),因此它需要纯色背景。另一方面,如果您的文本框的高度是固定的,那么您可以使用类似下面的代码片段来支持非纯色背景。
input.original {
border: 1px dashed black;
overflow: visible;
height: 28px;
font-size: 30px;
width: 200px;
}
input.test-fixedheight {
appearance: none;
box-sizing: border-box;
font-size: 30px;
padding: 2px 0px 6px;
border: 0;
background: linear-gradient(to right, crimson 50%, transparent 50%), linear-gradient(to right, crimson 50%, transparent 50%), linear-gradient(to bottom, crimson 12.5%, transparent 12.5%, transparent 25%, crimson 25%, crimson 37.5%, transparent 37.5%, transparent 50%, crimson 50%, crimson 62.5%, transparent 62.5%, transparent 75%, crimson 75%, crimson 87.5%, transparent 87.5%), linear-gradient(to bottom, crimson 12.5%, transparent 12.5%, transparent 25%, crimson 25%, crimson 37.5%, transparent 37.5%, transparent 50%, crimson 50%, crimson 62.5%, transparent 62.5%, transparent 75%, crimson 75%, crimson 87.5%, transparent 87.5%),linear-gradient(to bottom, transparent 0%, white 0%);
background-size: 8px 1px, 8px 1px, 1px 1em, 1px 1em, 100% 1em;
background-repeat: repeat-x, repeat-x, no-repeat, no-repeat;
background-position: 0px 0px, 0px 29px, 0px 2px, 100% 2px;
width: 200px;
}
input.test-fixedheight-transparent {
appearance: none;
box-sizing: border-box;
font-size: 30px;
padding: 2px 0px 6px;
border: 0;
background: linear-gradient(to right, beige 50%, transparent 50%), linear-gradient(to right, beige 50%, transparent 50%), linear-gradient(to bottom, beige 12.5%, transparent 12.5%, transparent 25%, beige 25%, beige 37.5%, transparent 37.5%, transparent 50%, crimson 50%, beige 62.5%, transparent 62.5%, transparent 75%, beige 75%, beige 87.5%, transparent 87.5%), linear-gradient(to bottom, beige 12.5%, transparent 12.5%, transparent 25%, beige 25%, beige 37.5%, transparent 37.5%, transparent 50%, beige 50%, beige 62.5%, transparent 62.5%, transparent 75%, beige 75%, beige 87.5%, transparent 87.5%);
background-size: 8px 1px, 8px 1px, 1px 1em, 1px 1em;
background-repeat: repeat-x, repeat-x, no-repeat, no-repeat;
background-position: 0px 0px, 0px 29px, 0px 2px, 100% 2px;
width: 200px;
}
/* Just for demo */
body{
background-image: radial-gradient(circle, #3F9CBA 0%, #153346 100%);
}
input{
vertical-align: top;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<input type='text' value='gggyyyXXX' class='original' />
<input type='text' value='gggyyyXXX' class='test-fixedheight' />
<input type='text' value='gggyyyXXX' class='test-fixedheight-transparent' />Run Code Online (Sandbox Code Playgroud)
这种方法在Chrome、Firefox、Opera 和 IE11 中进行了测试。因为 IE10 支持渐变,所以它在那里也应该可以正常工作,但不适用于任何较低版本,因为它们不支持渐变。
小智 4
简而言之:不,这是不可能的!你唯一能做的就是为输入创建一个 javascript/html/css 替代品。但这将是一个开销。
得到一个想法:
| 归档时间: |
|
| 查看次数: |
11474 次 |
| 最近记录: |