有什么好方法可以克服这段代码不能按预期运行的不幸事实:
<div class="required">
<label>Name:</label>
<input type="text">
</div>
<style>
.required input:after { content:"*"; }
</style>
在一个完美的世界中,所有必需的input
都会得到一个小星号,表明该字段是必需的。这个解决方案是不可能的,因为CSS是在元素内容之后插入的,而不是在元素本身之后插入,但类似的东西是理想的。在包含数千个必填字段的网站上,我可以在输入前面移动星号,只需更改一行(:after
到:before
),或者我可以将其移动到标签的末尾( .required label:after
)或在标签前面,或在包装盒上的位置等......
这一点非常重要,不仅仅是因为我改变了我的想法,无论在哪里放置星号,也适用于表格布局不允许星号位于标准位置的奇怪情况。它也适用于检查表单或突出显示不正确完成控件的验证。
最后,它不会添加额外的标记。
是否有任何好的解决方案具有不可能代码的全部或大部分优势?
答案 0 :(得分:174)
这是你的想法吗?
<div class="required">
<label>Name:</label>
<input type="text">
</div>
<style>
.required:after { content:" *"; }
</style>
请参阅https://developer.mozilla.org/en-US/docs/Web/CSS/pseudo-elements
答案 1 :(得分:63)
.required label {
font-weight: bold;
}
.required label:after {
color: #e32;
content: ' *';
display:inline;
}
摆弄你的确切结构: http://jsfiddle.net/bQ859/
答案 2 :(得分:35)
通过使用星号图片的背景图像并设置标签/输入/外部div的背景以及星号图像大小的填充,可以实现类似的结果。 像这样:
.required input {
padding-right: 25px;
background-image: url(...);
background-position: right top;
}
这会将星号置于文本框中,但在div.required
而不是.required input
上添加相同内容可能会更多地显示您所需要的内容,如果不那么优雅的话。
此方法不需要额外输入。
答案 3 :(得分:21)
准确地将其放入INTO输入中,如下图所示:
我找到了以下方法:
.asterisk_input::after {
content:" *";
color: #e32;
position: absolute;
margin: 0px 0px 0px -20px;
font-size: xx-large;
padding: 0 5px 0 0; }
<form>
<div>
<input type="text" size="15" />
<span class="asterisk_input"> </span>
</div>
</form>
我工作的网站使用固定布局进行编码,因此对我来说没问题。
我不确定它对液体设计有益。
答案 4 :(得分:12)
写入CSS
.form-group.required .control-label:after {content:"*";color:red;}
和HTML
<div class="form-group required">
<label class="control-label">Name:</label>
<input type="text">
</div>
答案 5 :(得分:10)
input[required], select[required] {
background-image: url('/img/star.png');
background-repeat: no-repeat;
background-position-x: right;
}
图像右侧有20px的空间,不与选择下拉箭头重叠
它看起来像这样:
答案 6 :(得分:9)
input[required]{
background-image: radial-gradient(#F00 15%, transparent 16%), radial-gradient(#F00 15%, transparent 16%);
background-size: 1em 1em;
background-position: right top;
background-repeat: no-repeat;
}
答案 7 :(得分:4)
使用jQuery和CSS
jQuery(document).ready(function() {
jQuery("[required]").after("<span class='required'>*</span>");
});
&#13;
.required {
position: absolute;
margin-left: -10px;
color: #FB0000;
font-size: 15px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" value="xxx" required>
&#13;
答案 8 :(得分:2)
.asterisc {
display: block;
color: red;
margin: -19px 185px;
}
<input style="width:200px">
<span class="asterisc">*</span>
答案 9 :(得分:2)
这是我创建的简单“ 仅CSS ”技巧,用于在 必需 格式的标签上动态添加红色星号元素,而不会丢失浏览器的默认表单验证。
以下代码可在所有浏览器和所有主要表单元素上完美运行。
addItemDecoration(SpacesItemDecoration(dpToPixel(25f)))
.form-group {
display: flex;
flex-direction: column;
}
label {
order: 1;
text-transform: capitalize;
margin-bottom: 0.3em;
}
input,
select,
textarea {
padding: 0.5em;
order: 2;
}
input:required+label::after,
select:required+label::after,
textarea:required+label::after {
content: " *";
color: #e32;
}
重要: 您必须保留首先是输入元素,其次是标签元素的元素顺序。 CSS将以传统方式对其进行处理和转换,即首先输入标签,然后输入。
答案 10 :(得分:2)
我认为这是有效的方法,为什么这么多头疼
<div class="full-row">
<label for="email-id">Email Address<span style="color:red">*</span></label>
<input type="email" id="email-id" name="email-id" ng-model="user.email" >
</div>
答案 11 :(得分:0)
此示例在标签前面放置一个星号符号,以将特定输入表示为必填字段。我使用%和em设置CSS属性,以确保我的网页具有响应能力。如果需要,可以使用px或其他绝对单位。
#name {
display: inline-block;
margin-left: 40%;
font-size:25px;
}
.nameinput{
margin-left: 10px;
font-size:90%;
width: 17em;
}
.nameinput::placeholder {
font-size: 0.7em;
vertical-align: middle;
}
#name p{
margin:0;
border:0;
padding:0;
display:inline-block;
font-size: 40%;
vertical-align: super;
}
<label id="name" value="name">
<p>*</p>
Name: <input class="nameinput" type="text" placeholder="Enter your name" required>
</label>
答案 12 :(得分:0)
简单而简短
<label>Name:<span class="required">*</span></label>
.required {
color: red;
}
答案 13 :(得分:0)
如果您使用“浮动标签”(例如 https://css-tricks.com/float-labels-css/ 或 https://dev.to/adrianbdesigns/let-s-create-a-floating-label-input-with-html-and-css-only-4mo8),那么您可以使用:
input[required]+label:after {
content: '*';
color: red;
}
简单,没有图像,不会在用户眼中丢失。理论上,如果您希望标签和星号之间有一些间距,您也可以填充 :after
。如果您愿意,也可以使用 :before
代替 :after
。
答案 14 :(得分:0)
如果您在某个标签内有一个带有字段名称的标签,带有 required 属性,一个常见的场景 en angular 表单会自动将此属性添加到必填字段
[required] label::after {
content: '*';
font-size: 24px;
line-height: 0;
vertical-align: middle;
}
答案 15 :(得分:-1)
对于那些最终在这里,但有jQuery的人:
// javascript / jQuery
$("label.required").append('<span class="red-star"> *</span>')
// css
.red-star { color: red; }
答案 16 :(得分:-1)
现在是2019年,以前对此问题的答案未使用
CSS网格是在2019年制作表格的方法,因为您可以在输入之前添加标签,而无需额外的div,跨度,带星号的跨度和其他文物。
这是我们使用最少CSS的地方:
上述HTML:
<form action="https://www.example.com/register/" method="post" id="form-validate" enctype="multipart/form-data">
<p class="form-instructions">Please enter the following information to create your account.</p>
<label for="firstname">First name</label>
<input type="text" id="firstname" name="firstname" value="" title="First name" maxlength="255" required="">
<label for="lastname">Last name</label>
<input type="text" id="lastname" name="lastname" value="" title="Last name" maxlength="255" required="">
<label for="email_address">Email address</label>
<input type="email" autocapitalize="off" autocorrect="off" spellcheck="false" name="email" id="email_address" value="" title="Email address" size="30" required="">
<label for="password">Password</label>
<input type="password" name="password" id="password" title="Password" required="">
<label for="confirmation">Confirm password</label>
<input type="password" name="confirmation" title="Confirm password" id="confirmation" required="">
<input type="checkbox" name="is_subscribed" title="Subscribe to our newsletter" value="1" id="is_subscribed" class="checkbox">
<label for="is_subscribed">Subscribe to the newsletter</label>
<input type="checkbox" name="persistent_remember_me" id="remember_meGCJiRe0GbJ" checked="checked" title="Remember me">
<label for="remember_meGCJiRe0GbJ">Remember me</label>
<p class="required">* Required</p>
<button type="submit" title="Register">Register</button>
</form>
也可以添加占位符文本,强烈建议使用。 (我只是在回答这个中间表格)。
现在输入CSS变量:
--icon-required: url('data:image/svg+xml,\
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="-10 -6 16 16"> \
<line id="line" y1="-3" y2="3" stroke="%23df0000" stroke-linecap="butt" transform="rotate(15)"></line> \
<line id="line" y1="-3" y2="3" stroke="%23df0000" stroke-linecap="butt" transform="rotate(75)"></line> \
<line id="line" y1="-3" y2="3" stroke="%23df0000" stroke-linecap="butt" transform="rotate(-45)"></line> \
</svg>');
--icon-tick: url('data:image/svg+xml,\
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="100" viewBox="-2 -2 16 16"> \
<path fill="green" stroke-linejoin="round" d="M2 6L1 7l3 4 7-10h-1L4 8z"/> \
</svg>');
表单元素的CSS:
input[type=text][required],
input[type=email][required],
input[type=password][required],
input[type=tel][required] {
background-image: var(--icon-required);
background-position-x: right;
background-repeat: no-repeat;
background-size: contain;
}
input:valid {
--icon-required: var(--icon-tick);
}
表单本身应位于CSS网格中
form {
align-items: center;
display: grid;
grid-gap: var(--form-grid-gap);
grid-template-columns: var(--form-grid-template-columns);
margin: auto;
}
可以使用诸如1fr auto
标签之类的格式将列的值设置为1fr
或<p>
,其范围设置为跨度1 / -1。您可以在媒体查询中更改变量,以使输入框在移动设备上和在台式机上均变为全角。您还可以根据需要使用CSS变量方法来更改移动设备上的网格间距。
当这些框有效时,您应该得到一个绿色的勾号,而不是星号。
CSS中的SVG是一种使浏览器免于往返服务器以获取星号图像的方法。这样,您可以微调星号,此处的示例处于不同寻常的角度,您可以对其进行编辑,因为上面的SVG图标是完全可读的。也可以修改视图框,以将星号置于中心上方或下方。
答案 17 :(得分:-1)
您需要的是:required选择器-它会选择所有具有'required'属性的字段(因此无需添加任何其他类)。然后-根据您的需求设置输入样式。您可以使用':after'选择器并以建议的方式在其他答案中添加星号
答案 18 :(得分:-1)
您可以通过将HTML代码封装在包含&#34; required&#39;的div标签中来实现所需的结果。然后是&#34; form-group&#34;类。 *但是只有你有Bootstrap才有效。
<div class="form-group required">
<div class="required">
<label>Name:</label>
<input type="text">
</div>
<div>