В каком порядке переопределяют таблицы стилей CSS?

В заголовке HTML у меня есть следующее:

<head>
<title>Title</title>
<link href="styles.css" rel="stylesheet" type="text/css"/>
<link href="master.css" rel="stylesheet" type="text/css"/>

styles.css - это мой лист для страницы. master.css - это лист, который я использую для каждого из моих проектов, чтобы переопределить значения по умолчанию для браузера. Какая из этих таблиц стилей имеет приоритет? Пример: первый лист содержит конкретные

body { margin:10px; }

И связанные границы, но второй содержит мои сбросы

html, body:not(input="button") {
    margin: 0px;
    padding: 0px;
    border: 0px;
}

В сущности, каскадный элемент CSS работает одинаково с точки зрения ссылок на стили, как в обычных функциях CSS? Значит, что последняя строка отображается на дисплее?

Ответ 1

Правила каскадирования правил CSS сложны - вместо того, чтобы пытаться перефразировать их плохо, я просто отсылаю вас к спецификации:

http://www.w3.org/TR/2011/REC-CSS2-20110607/cascade.html#cascade

Вкратце: более конкретные правила переопределяют более общие. Специфичность определяется на основе количества идентификаторов, классов и имен элементов, а также используется ли объявление !important. Когда существует несколько правил с одним и тем же "уровнем специфичности", в зависимости от того, какой из них последний раз выигрывает.

Ответ 2

Применяется наиболее специфический стиль:

div#foo {
  color: blue; /* This one is applied to <div id="foo"></div> */
}

div {
  color: red;
}

Если все селекторы имеют одинаковую специфичность, то используется последнее объявление:

div {
  color: red;
}

div {
  color: blue; /* This one is applied to <div id="foo"></div> */
}

В вашем случае body:not([input="button"]) более конкретный, поэтому используются его стили.

Ответ 3

Заказ имеет значение. Будет принято последнее объявленное значение множественного вхождения. Пожалуйста, смотрите то же самое, что я разработал: http://jsfiddle.net/Wtk67/

<div class="test">Hello World!!</div>


<style>
    .test{
        color:blue;
    }

    .test{
        color:red;
    }
</style>

Если вы меняете порядок .test{}, вы можете видеть, что HTML принимает значение последнего, объявленного в CSS

Ответ 4

Последний загружающий CSS - это МАСТЕР, который переопределит все css с теми же настройками css

Пример:

<head>
    <link rel="stylesheet" type="text/css" href="css/reset.css">
    <link rel="stylesheet" type="text/css" href="css/master.css">
</head>

reset.css

h1 {
    font-size: 20px;
}

master.css

h1 {
    font-size: 30px;
}

Выход для тега h1 будет размером шрифта: 30px;

Ответ 5

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

Ответ 6

Давайте попробуем упростить правило каскадирования с примером. Правила более специфичны для общего.

  • Применяет правило первого идентификатора (над классом и/или элементами независимо от порядка)
  • Применяет классы по элементам независимо от порядка
  • Если ни один класс или id не применяет общие
  • Применяет последний стиль в заказе (порядок объявления на основе порядка загрузки файла) для той же группы/уровня.

Вот код css и html;

<style>
    h2{
        color:darkblue;
    }
    #important{
        color:darkgreen;
    }
    .headline {
        color:red;
    }
    article {
        color:black;
        font-style:italic;
    }
    aside h2 {
        font-style:italic;
        color:darkorange;
    }
    article h2 {
        font-style: normal;
        color: purple;
    }
</style>

Вот стиль css

<body>
<section>
    <div>
        <h2>Houston Chronicle News</h2>
        <article>
            <h2 class="headline" id="important">Latest Developments in your city</h2>
            <aside>
                <h2>Houston Local Advertisement Section</h2>
            </aside>
        </article>
    </div>

    <p>Next section</p>
</section>

Вот результат. Независимо от порядка файлов стиля или объявления стиля, id="important" применяется в конце (обратите внимание на class="deadline", объявленный последним, но не имеющий никакого эффекта).

Элемент <article> содержит элемент <aside>, однако последний объявленный стиль вступит в силу, в данном случае article h2 { .. } на третьем элементе h2.

Вот результат на IE11: (Недостаточно прав на изображение) DarkBlue: Хьюстонская хроника Новость, DarkGreen: последние события в вашем городе, фиолетовый: Хьюстонская секция местной рекламы, черный: следующий раздел

введите описание изображения здесь

Ответ 7

Лучше всего использовать классы как можно больше. Избегайте идентификаторов (#) в любом случае. Когда вы пишете селектора только с одним классом, наследование CSS намного проще.

Обновление: подробнее о CSS-специфичности в этой статье: https://css-tricks.com/specifics-on-css-specificity/

Ответ 8

Я подозреваю, что у вас есть дубликаты, основной набор, который используется для всех страниц, и более конкретный набор, который вы хотите переопределить основные значения для каждой отдельной страницы. Если это так, то ваш заказ правильный. Мастер загружается первым, и правила в последующем файле будут иметь приоритет (если они идентичны или имеют одинаковый вес). Существует строго рекомендуемое описание всех правил на этом сайте http://vanseodesign.com/css/css-specificity-inheritance-cascaade/ Когда я начал работу с интерфейсом, эта страница прояснила так много вопросов.