#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.