我有一个输入类型密码,该密码只允许这样的六位数字:
<fieldset>
<label for="password-input">Enter New Pin</label>
<input type="password" name="password" id="password-input" inputmode="numeric" minlength="6"
maxlength="6" size="6" value="">
<span class="hint">New pin must be 6 digit number only</span>
</fieldset>
它将显示如下:
如何设置样式,使其看起来如下所示?
答案 0 :(得分:19)
要解决此问题:
::after
放置在fieldset
而不是input
框上或添加一个元素。 content
的值,然后放置元素。 letter-spacing
和width
添加到input
框中,并将:focus
设置为outline: none
以删除蓝色框。
fieldset {
color: #555;
font-family: sans-serif;
border: none;
position: relative;
}
fieldset > * {
display: block;
}
fieldset::after {
content: "___ ___ ___ ___ ___ ___";
display: block;
position: absolute;
top: 35px;
white-space: pre;
}
label {
font-size: 14px;
margin-bottom: 6px;
}
input#password-input {
position: relative;
font-size: 16px;
z-index: 2;
border: none;
background: transparent;
width: 300px;
text-indent: 9px;
letter-spacing: 25.6px;
font-family: Courier;
}
input#password-input:focus {
outline: none;
}
span.hint {
margin-top: 8px;
font-size: 12px;
font-style: italic;
}
span.hint::before {
content: "* ";
}
<fieldset>
<label for="password-input">Enter New Pin</label>
<input type="password" name="password" id="password-input" inputmode="numeric" minlength="6" maxlength="6" size="6" value="">
<span class="hint">New pin must be 6 digit number only</span>
</fieldset>
答案 1 :(得分:11)
尝试一下:
input {
padding-left: 15px;
letter-spacing: 39px;
border: 0;
background-image: linear-gradient(to left, black 70%, rgba(255, 255, 255, 0) 0%);
background-position: bottom;
background-size: 50px 3px;
background-repeat: repeat-x;
background-position-x: 35px;
width: 280px;
font-size: 30px;
}
input:focus {
outline: none;
}
<fieldset>
<label for="password-input">Enter New Pin</label>
<input type="password" name="password" id="password-input" inputmode="numeric" minlength="6" maxlength="6" size="6" value="">
<span class="hint">New pin must be 6 digit number only</span>
</fieldset>
答案 2 :(得分:6)
<input type='number'>
,可以将根font-size: 8px
调整为84px
。z-index: -1
),该覆盖层具有::after
值为6下划线的伪类content
。 输入和覆盖都必须具有以下属性:
/* The values can anything as long as it is valid and are the same */
letter-spacing: 10px;
font-size: 1.2rem;
font-weight: 900;
叠加层为display: table
,输入为display: table-cell
。这样(以及absolute
和relative
定位)可使输入始终严格地位于叠加层的中心。
rem
单位,因此,如果要放大或缩小font-size
,只需更改font-size
标签的<html>
,一切都会相应调整:
/* Change the 16px to whatever you want and everything scale to that value */
html,
body {
font: 400 16px/1.5 Consolas
}
注意:尝试连续按住一个键,您将发现没有任何移位。
var node = document.querySelector('#fSz');
node.oninput = setFontSize;
function setFontSize(e) {
var tgt = e.target;
var root = document.documentElement;
root.style.setProperty(`--${tgt.id}`, `${tgt.valueAsNumber}px`);
}
:root {
--fSz: 16px;
}
html,
body {
font-size: var(--fSz);
font-weight: 400;
line-height: 1.5;
font-family: Consolas, 'sans serif', monospace;
}
fieldset {
position: relative;
display: table;
min-height: 5.5rem;
padding: 0 0 0 0.3125rem;
margin-top: 2em;
overflow: visible;
}
fieldset * {
font-size: inherit;
font-weight: inherit;
line-height: inherit;
font-family: inherit;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
legend {
font-size: 1.2rem;
}
.overlay {
display: table;
position: relative;
top: 0.3125rem;
left: 0.9375rem;
font-size: 1.2rem;
font-weight: 900;
}
.overlay::after {
content: '\ff3f\ff3f\ff3f\ff3f\ff3f\ff3f';
font-size: 1.2rem;
letter-spacing: 0.78rem;
}
@-moz-document url-prefix() {
.overlay::after {
content: '\2501\2501\2501\2501\2501\2501';
text-shadow: 0.65rem 0px 0px #222;
font-size: 1.37rem;
letter-spacing: 1.2rem;
line-height: 2;
}
}
.hint {
display: block;
position: absolute;
bottom: 0;
left: 0.625rem;
font-style: italic;
font-size: 0.75rem;
}
#password-input {
display: table-cell;
border: 0px none transparent;
outline: 0px none transparent;
background: transparent;
position: absolute;
left: 0px;
z-index: 1;
overflow: hidden;
line-height: 2;
transform: translate(0.25rem, -1rem);
letter-spacing: 1.25rem;
font-size: 1.35rem;
font-weight: 900;
}
sup {
padding-top: 0.25rem;
font-size: 0.65rem
}
.fc {
display: block;
position: fixed;
left: 0;
top: 0;
z-index: 3;
font: 400 16px/1.5 Consolas;
width: 50%;
}
#fSz {
display: inline-block;
padding-left: 8px;
width: 52px;
font: inherit;
text-align: center;
}
<label for='fSz' class='fc'>Font-Size:
<input id='fSz' type='number' min='8' max='84' value='16' step='0.5'> px
</label>
<fieldset>
<legend>Enter New Pin</legend>
<label for='chk' class='overlay'>
<input type="password" name="password" id="password-input" inputmode="numeric" minlength="6" maxlength="6" size="19" value="123456" placeholder='123456'>
</label>
<label for="password-input" class="hint"><sup>🞼</sup>New pin must be 6 digit number only</label>
</fieldset>
答案 3 :(得分:6)
您可以在输入后面放置一个包含“遮罩”的元素,并将输入的背景色设置为透明。但是请注意以下细节:
_
和•
的宽度始终相同。monospace
结束字体列表,以便在所有指定字体都不可用时,操作系统可以选择固定宽度的字体。medium
的大小可以计算为13px而不是通常的16px,而normal
的行高对于具有相同字体的两种不同字体通常偏离1px)尺寸)。因此,请确保您明确指定这些属性。这是结果:
body {
font-family: sans-serif;
}
fieldset label,
fieldset span {
display: block;
margin: .5em 0;
}
fieldset .input-wrapper {
/* positioning */
position: relative;
/* font */
font: 16px/1.5 monospace;
letter-spacing: .5em;
/* optional */
background-color: #EEE;
}
fieldset .input-wrapper::before {
/* positioning */
position: absolute;
/* masking */
content: "______";
}
fieldset input {
/* positioning */
position: relative;
/* font */
font: inherit;
letter-spacing: inherit;
/* masking */
background-color: transparent;
/* reset */
margin: 0;
border: 0;
padding: 0;
}
<fieldset>
<label for="password-input">Enter New Pin</label>
<div class="input-wrapper">
<input type="password" name="password" id="password-input" inputmode="numeric" minlength="6" maxlength="6" value="">
</div>
<span class="hint">New pin must be 6 digit number only</span>
</fieldset>
答案 4 :(得分:0)
此常规解决方案可能对跨浏览器有所帮助:
HTML表单:
<p class="text-center">Enter new pins</p>
<form role="form" method="post">
<div class="form-group text-center">
<input class="inputbox" maxlength="1" type="password" >
<input class="inputbox" maxlength="1" type="password" >
<input class="inputbox" maxlength="1" type="password" >
<input class="inputbox" maxlength="1" type="password" >
<input class="inputbox" maxlength="1" type="password" >
<input class="inputbox" maxlength="1" type="password" >
<small class="text-danger">New pin must be 6 digit number only</small>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-lg btn-block">Verify Pin
</button>
</div>
<input id="code_hidden" maxlength="6" name="real_code" type="text" >
</form>
我们可以在输入名称= real_code上看到结果。生产时必须为type ='hidden'。需要更多字段时,请更改此最大长度。
样式CSS:
<style>
.inputbox {
background-color: #fff;
border: none;
border-bottom: thin solid gray;
width: 20px;
font-size: 24px;
margin-bottom: 20px;
margin-right: 5px;
}
</style>
脚本部分:
<script>
$(function() {
$(".inputbox").keyup(function () {
$(this).next('.inputbox').focus();
var value = [];
$('.inputbox').each(function() {
value += $(this).val();
});
$('#code_hidden').val(value);
});
});
</script>
答案 5 :(得分:-5)
<fieldset>
<label for="password-input">
Enter New Pin</label>
<input type="password" name="password" id="passwordinput" inputmode="numeric" minlength="6" maxlength="6" size="6" value=""placeholder="input password">
<span class="hint">
New pin must be 6 digit number. only</span>
</fieldset>
input[type=password]{
border:1px;
border-bottom-style:dashed;
border-top-color:white;
border-left-color:white;
border-right-color:white;
}