GitHub布局使用这样的结构来保护表单的CSRF(例如,可以在主页上的注册表单中看到):
<div style="margin:0;padding:0;display:inline">
<input type="hidden" value="somerandombase64" name="authenticity_token">
</div>
使用内联样式<input type="hidden" ...>
折叠<div>
的原因是什么?
这不是<div>
多余的吗?
答案 0 :(得分:2)
如此处所述:LINK
Rails'表单标记帮助器有助于将隐藏字段放入真实性标记中。不幸的是,它将隐藏的字段包裹在div中!因此,即使您的表单具有style =“display:inline”,div也不会......并且您将无法显示不强制换行的表单。
换句话说,防止换行的最安全方法是将这些样式margin:0;padding:0;display:inline
添加到包装器div。
答案 1 :(得分:1)
根据DTD for HTML 4,[有效]是必要的。虽然form
元素的后代是什么并不重要,但直接子元素必须是块级元素。
针对W3C Validator Service运行此操作以获取进一步证明:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
</head>
<body>
<form action="" method="get">
<input type="hidden">
</form>
</body>
</html>
与此相反:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
</head>
<body>
<form action="" method="get">
<div>
<input type="hidden">
</div>
</form>
</body>
</html>