Тег легенды в стиле блока

#html #css

#HTML #css

Вопрос:

Я настроил демонстрацию моей проблемы по следующему URL: http://jsfiddle.net/YHHg7/4 /

Я пытаюсь сделать следующее:

 legend {
  display: block;
  border-bottom: 1px solid red;
  margin-bottom: 50px;
}
  

Однако, похоже, что все браузеры игнорируют display: block тег легенды. Это правильное поведение для этого тега или я делаю что-то неправильно?

Комментарии:

1. Вы можете использовать display: contents для удаления всех стилей браузера с внутренней оболочкой div для стилизации jsfiddle.net/d20k51vb/3 . см caniuse.com/css-display-contents что касается проблем с доступом в safari.

Ответ №1:

<legend> по умолчанию является элементом уровня блока, поэтому, включаете ли вы display: block , разницы нет. Однако браузеры специально обрабатывают его вместе с <fieldset> как метку для набора полей.

Чтобы «отделить» его от <fieldset> , вы можете придать ему нестатическое положение, или переместить его, или даже просто еще немного поиграть с его полями. Однако результаты могут быть немного непредсказуемыми, опять же из-за особой обработки обоих элементов.

Комментарии:

1. Ура, дал мне результат, к которому я стремился.

2. Является ли сегодня legend блочным элементом в HTML 5? whatwg.org/specs/web-apps/current-work/multipage /…

3. @MEM: Казалось бы, так: w3.org/TR/html5/rendering.html#flow-content-0 Документ, на который вы ссылаетесь, — это не W3C HTML5, а WHATWG HTML, но, тем не менее, он, похоже, соответствует: whatwg.org/specs/web-apps/current-work/multipage /…

4. Спасибо за разъяснение. Я просто оформлял сложную легенду и заметил, что больше никакие блочные элементы не разрешены. В данном случае это своего рода недостаток. Я предполагаю, что мне придется использовать другие элементы, а затем legend, или я взломаю его с помощью aside , чтобы содержать <section> и <aside> и <div>. Мне ни то, ни другое не кажется по-настоящему разумным. :/ ( div , все внутри легенды? ты с ума сошел? Нет. На самом деле это сложный набор инструкций, помогающий пользователю выбрать правильный вариант в этом наборе полей).

5. @MEM: «сложный набор инструкций, помогающий пользователю выбрать правильный вариант в этом наборе полей» В первую очередь, вы не должны использовать легенду для этого. Просто используйте p elements или любую другую сложную структуру, которую вы имеете в виду.

Ответ №2:

IMO лучшее, что вы можете сделать для управления легендой, — это просто оставить ее только как семантическое средство.

CSS:

 legend {
    display: block;
    margin: 0;
    border: 0;
    padding: 0;
    width: 100%;
}
  

А затем используйте интервал внутри него, чтобы управлять всем желаемым стилем:

HTML:

 <legend><span>Span to the rescue!</span></legend>
  

CSS:

 legend span {
    display: block;
    padding: 0 20px;
    border-bottom: 1px solid red;
}
  

Чистый, семантический и, как правило, легко управляемый в разных браузерах

Комментарии:

1. Зачем использовать a span только для оформления его как display: block ? Просто используйте div

Ответ №3:

legend по умолчанию является элементом уровня блока. Если я добавлю ширину обратно при использовании Chrome (канал разработки), ширина легенды будет изменена соответствующим образом.

Если вместо этого вас интересует margin стиль, для a legend можно задать только его левое или правое поля, и это поместит его относительно fieldset its, содержащихся внутри. Если вы хотите добавить интервалы к другим элементам, то вы, вероятно, захотите добавить отступы к fieldset самому.

Ответ №4:

Раскомментируйте width атрибут, если хотите, чтобы красная линия проходила полностью.

 legend {
  display: block;
  border-bottom: 1px solid red;
  width:100%;
  margin-bottom: 50px;
}
  

Комментарии:

1. На самом деле не ответил на мой вопрос так, как мне нужно display: block потому что изменения полей и отступов не будут применяться к элементу.

2. Перемещение легенды и применение width: 100% , похоже, делают свое дело. Затем к элементу внутреннего блока применяется любой другой стиль, такой как заголовок или тег div.