Элементы формы игнорируют тело CSS - PullRequest
2 голосов
/ 10 февраля 2020

Я хочу перевести веб-страницу в темный режим, поэтому я установил черный фон, а цвет шрифта - белый. Я ожидаю, что это будет наследоваться всеми элементами в теле, которое работает для элемента div и вложенного элемента div и формы, но ни для кнопки, ни для элемента select.

Эта проблема возникает в Firefox Developer Edition 73.0b11 (64-разрядная версия) и Chromium 79.0.3945.130 Arch Linux.

Я знаю, что могу снова указать значения для кнопок и элементов выбора и параметров, но почему это необходимо? Почему кнопка не принадлежит телу?

body
{ 
  background-color: black;
  color: white;
}

select
{
  height: 5em;
}
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
  </head>
  <body>
    This is text in the body.
    <div>This is text in a div
      <div>This is text in a nested div</div>
    </div>
    <form>
      This is text in a form.
      <button>This is text in a button</button>
      <button style="background-color:black;color: white;">This is text in a button with inline style</button>
      <select multiple>
        <option>This is text in a select option</option>
        <option>This is text in a another select option</option>
        <option>This is text in a yet another select option</option>
      </select>
  </form>
  </body>
</html>

Ответы [ 3 ]

3 голосов
/ 10 февраля 2020

БРАУЗЕРЫ ИМЕЮТ СВОИ СТИЛИ

По умолчанию каждый браузер определяет свой собственный стиль css для всех общих элементов. Это будет включать базовые цвета, фоны, отступы, поля и т. Д. c.

ПОЧЕМУ?

Поставщики браузеров делают это, поэтому у них всегда есть запасной вариант на случай, если вы не в состоянии указать определенные свойства. Например, если вы никогда не устанавливали цвет тела и фон, должен ли браузер ничего не отображать?

УПРАВЛЕНИЕ НАЗАД

Обычная практика для обработки этого типа поведения заключается в том, чтобы инициировать CSS сброс в начале таблицы стилей, чтобы установить общие c атрибуты и «сброс» браузером по умолчанию. Это очень популярно, потому что не все браузеры используют одинаковые значения по умолчанию, этот метод является хорошим способом, который позволяет не только определить свои значения по умолчанию, но и обеспечить согласованный стиль по умолчанию для всех браузеров.


Вот пример Эри c Мейер CSS Сброс (Один из пионеров этой техники.)

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section {
    display: block;
}
body {
    line-height: 1;
}
ol, ul {
    list-style: none;
}
blockquote, q {
    quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
    content: '';
    content: none;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}

В вашем ответе на ваш точный запрос.

Вы можете просто установить свойство inherit для элементов, к которым хотите применить стили тела.

button,
select,
option {
  background-color: inherit;
  color: inherit;
}

body {
  background-color: black;
  color: white;
}

select {
  height: 5em;
}

button,
select,
option {
  background-color: inherit;
  color: inherit;
}
<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
</head>

<body>
  This is text in the body.
  <div>This is text in a div
    <div>This is text in a nested div</div>
  </div>
  <form>
    This is text in a form.
    <button>This is text in a button</button>
    <button>This is text in a button with inline style</button>
    <select multiple>
      <option>This is text in a select option</option>
      <option>This is text in a another select option</option>
      <option>This is text in a yet another select option</option>
    </select>
  </form>
</body>

</html>
1 голос
/ 10 февраля 2020

Для дальнейшего уточнения моего комментария: браузеры обычно относятся к стилю определенных элементов. В этом случае они применили бы к элементам ввода стиль c, определяемый браузером / поставщиком. Так как стиль содержит селекторы, которые более c больше, чем ваш селектор body { ... }, стиль браузера по умолчанию переопределяет цвета, установленные для тела.

Чтобы обойти эту проблему, вы должны стилизовать ввод элементы, использующие селекторы, которые имеют ту же специфичность или больше, чем стили вендора браузера.

Говоря об этом, это также, почему CSS сбросы популярны: потому что они удаляют / сбрасывают мнение определенного поставщика c появления на элементах.

1 голос
/ 10 февраля 2020

Такие вещи, как кнопки, ссылки или вводы определяются браузером, что означает, что они оформлены отдельно от тела. Вот почему входные данные для загрузки файла выглядят так некрасиво в некоторых браузерах или почему они выглядят иначе: от chrome до firefox.

Здесь вы можете увидеть указанные правила для firefox styling.

Здесь вы можете увидеть, как перезаписать эти стили по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...