2013-12-13 27 views
5

GitHub bố trí sử dụng các cấu trúc như vậy để bảo vệ CSRF các hình thức (có thể được nhìn thấy trong hình thức đăng ký trên trang chính ví dụ):Folding loại đầu vào ẩn với div

<div style="margin:0;padding:0;display:inline"> 
    <input type="hidden" value="somerandombase64" name="authenticity_token"> 
</div> 

lý do để gấp <input type="hidden" ...> với inline là gì -styled <div>? Không phải là <div> không cần thiết?

Trả lời

2

Như đã giải thích ở đây: LINK

thẻ form helper Rails’ helpfully đặt một lĩnh vực tiềm ẩn với một thẻ xác thực. Thật không may, nó kết thúc tốt đẹp lĩnh vực ẩn trong một div! Vì vậy, ngay cả khi biểu mẫu của bạn có style = ”display: inline”, div sẽ không .. và bạn sẽ không thể hiển thị biểu mẫu không bắt buộc dòng mới.

Nói cách khác, cách an toàn nhất để ngăn chặn dòng mới là thêm các kiểu đó margin:0;padding:0;display:inline vào div trình bao bọc.

+0

'display: inline' gắn thêm các yếu tố để dòng hiện tại trong tài liệu. Để đặt phần tử trong một dòng ** mới **, có 'display: block'. Phải không? xin vui lòng làm rõ logic trong câu trả lời của bạn. –

1

Cần thiết [hợp lệ] theo số DTD for HTML 4. Mặc dù các phần tử con của các phần tử form là không quan trọng, các phần tử con trực tiếp phải là các phần tử mức khối.

Run này so với W3C Validator Service cho bằng chứng thêm:

<!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> 

như trái ngược với điều này:

<!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> 
Các vấn đề liên quan