css h1 - широкий лише текст


80

У мене є стиль H1 для мого сайту:

.centercol h1 {
    color: #006bb6;
    font-weight: normal;
    font-size: 18px;
    padding:3px 3px 3px 6px;
    border-left:3px solid #c6c1b8;
    background:#f2efe9;
    display:block;
}

Колір фону охоплює всю ширину центрального колеса, 500 пікселів ...

Як зробити так, щоб цей H1 охоплював лише ширину тексту H1?

Відповіді:


108

Ви можете використовувати значення вбудованого блоку для відображення, однак у цьому випадку ви втратите функцію блоку h1, тобто брати та сестри відображатимуться в рядку з h1, якщо вони є вбудованими елементами (у цьому випадку ви можете використовувати розрив рядка
).

display:inline-block; 

26
Ви також можете спробувати. display:table;Таким чином, вам не потрібно буде використовувати розрив рядка.
Арно ван Оордт

для тих, хто цікавиться, як встановити ширину лапки (яку потрібно помістити ліворуч від зображення), використовуйте display: block; переповнення: приховано
JinSnow

35
.h1 {
  width: -moz-fit-content;
  width: fit-content;

  // workaround for IE11
  display: table;
}

Це підтримують усі сучасні браузери width: fit-content.

Для IE11 ми могли б наслідувати цю поведінку, display: tableяка не порушує колапс полів, як display: inline-blockабо float: left.


1
Це найкраща відповідь
Шон Т

19

Ви можете використовувати, display:inline-blockщоб змусити таку поведінку


4

Легким виправленням цього є плавання вашого елемента H1 ліворуч:

.centercol h1{
    background: #F2EFE9;
    border-left: 3px solid #C6C1B8;
    color: #006BB6;
    display: block;
    float: left;
    font-weight: normal;
    font-size: 18px;
    padding: 3px 3px 3px 6px;
}

Я зібрав простий приклад jsfiddle, який показує вплив стилю "float: left" на ширину вашого елемента H1 для тих, хто шукає більш загальну відповідь:

http://jsfiddle.net/zmEBt/1/


3

Це тому, що ваша <h1> - це ширина центрального колеса. Вкажіть ширину на <h1>і використовуйте, margin: 0 auto;якщо ви хочете, щоб вона була по центру.

Або, як варіант, ви можете плавати <h1>, що зробить його лише таким широким, як текст.


Якщо я вкажу ширину, тоді тег H1 із більшим текстом обернеться, правильно?
tony noriega

0

Нещодавно я вирішив цю проблему за допомогою табличного підпису, хоча я не можу сказати, чи рекомендується це. Інші відповіді в моєму випадку не здавались тренувальними.

h1 {
  display: table-caption;
}

-1

Приблизно як інші пропозиції, ви можете використовувати наступний код. Однак, якщо ви все-таки виберете маржу: 0 auto; маршрут Я б рекомендував, щоб поля для верхньої та нижньої частини H1 були встановлені на щось інше, ніж 0. Отже, можливо, поля: 6px auto; або щось.

.centercol h1{
    display: inline-block;
    color: #006bb6;
    font-weight: normal;
    font-size: 18px;
    padding:3px 3px 3px 6px;
    border-left:3px solid #c6c1b8;
    background:#f2efe9;
    display:block;
}

-3

align-self-start, align-self-center ... у flexbox

.centercol h1{
    background: #F2EFE9;
    border-left: 3px solid #C6C1B8;
    color: #006BB6;
    display: block;
    align-self: center;
    font-weight: normal;
    font-size: 18px;
    padding: 3px 3px 3px 6px;
}

4
Ваша відповідь неповна, ви навіть не пояснили, що таке флексбокс
Еліас Соарес

-6

Ви можете використовувати <span>замість <h1>.


Не дуже хороша ідея змінювати семантику (семантичне значення), просто робити стилістику. Було б набагато краще використовувати <h1>з властивістю css display: inline-block.
magikMaker
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.