Теги ссылок в HTML5 не должны закрываться самостоятельно, но HAML их закрывает - PullRequest
3 голосов
/ 30 июня 2011

Насколько я понимаю, теги в HTML5 по умолчанию не должны быть самозакрывающимися (хотя допустимо использование самозакрывающихся тегов).Однако я использую HAML для своего приложения, использую тип документа HTML5 (!!! 5) и указываю в application.rb, что Haml::Template.options[:format] = :html5

Однако при просмотре сгенерированной разметки мои теги ссылок по-прежнему закрываютсяa />

Есть идеи, что здесь происходит?Это поведение по умолчанию HAML с html 5 doctype или я что-то настраиваю неправильно?

1 Ответ

5 голосов
/ 01 июля 2011

Если теги link генерируются помощниками Rails, такими как stylesheet_link_tag, то они будут иметь закрывающую косую черту независимо от настройки формата Haml, поскольку строка просто возвращается из метода rails и включается в вывод как есть, независимо от Haml.

Так, например, это Haml:

!!!
%html
  %head
    = stylesheet_link_tag "foo"
    %link{:rel=>"stylesheet"}

создает следующий вывод с форматом html5 (который по умолчанию для Rails 3):

<!DOCTYPE html> 
<html> 
  <head> 
    <link href="/stylesheets/foo.css" media="screen" rel="stylesheet" type="text/css" /> 
    <link rel='stylesheet'>

Изменяя формат на xhtml с Haml::Template.options[:format] = :xhtml в environment.rb, тот же Haml производит это вместо:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
  <head> 
    <link href="/stylesheets/foo.css" media="screen" rel="stylesheet" type="text/css" /> 
    <link rel='stylesheet' />

Элемент <link>, управляемый Haml (т. Е. %link в источнике Haml), учитывает формат и включает или исключает закрывающую косую черту в зависимости от ситуации. Ссылка, создаваемая помощником Rails, просто включает закрывающую косую черту в обоих случаях.

То, что создает !!!, зависит от того, какой формат установлен, но от Документов Haml :

Когда для параметра: format установлено значение :html5, !!! всегда равно <!DOCTYPE html>.

Так что вы должны получить <!DOCTYPE html> все, что вы положили после !!!.

...