Извини, подвинься

Многие из вас наверняка знают и пользуются универсальным селектором * для того чтобы обнулить дефолтные значения margin и padding в стиле документа. Pepelsbey недавно писал об этом.

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

Допустим что у нас есть контейнер, для которого по определенным причинам нельзя указать padding. У контейнера есть дочерние элементы и для того чтобы сделать для всех них одинаковые боковые отступы нужно прописать всего лишь два правила вместо того чтобы делать это для каждого элемента:

#container {
    width: 760px;
}
#container * {
    margin: 0 10px;
}

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

#container * * { /* Не забываем следить за тем чтобы присутствовал пробел между звездочками */
    margin: 0;
}

Это только один пример. При определенной фантазии и изобретательности можно развить тему и использовать универсальный селектор не только для отступов. Кстати если это очевидно и я “изобрел велосипед” – можете смело кинуть в меня камнем, при условии что он драгоценный ;)

Эта запись была опубликована в рубрике CSS. Вы можете следить за комментариями к этой записи.

Комментарии

  1. pepelsbey написал:

    Часто такая штука бывает полезна мне во всяких менюшках, когда отлично известно, что структура не будет ветвиться вглубь и звёздочка не заденет лишних. Т.е. вместо #nav A, #nav STRONG {…} я пишу #nav LI * {…} и всё получается красиво.

  2. Сергей написал:

    Браво! Пока нигде “велосипед” не встречал :)

  3. neutrino написал:

    [quote comment="101"]Часто такая штука бывает полезна мне во всяких менюшках, когда отлично известно, что структура не будет ветвиться вглубь и звёздочка не заденет лишних. Т.е. вместо #nav A, #nav STRONG {…} я пишу #nav LI * {…} и всё получается красиво.[/quote]

    Отлично, я после отступов как раз и начал думать в сторону менюшек :)

    [quote comment="102"]Браво! Пока нигде “велосипед” не встречал :)[/quote]

    А вот Pepelsbey комментом выше активно юзает :)

  4. Flack написал:

    Не проще ли сделать еще один вложенный блок с полями в размере нужных отступов?

  5. neutrino написал:

    [quote comment="107"]Не проще ли сделать еще один вложенный блок с полями в размере нужных отступов?[/quote]

    Иногда бесспорно проще. Но иногда это лишнее. Хотя бы даже в случае с меню, как pеpelsbey описал выше.

  6. Максим Несов написал:

    Пока не проверил, но, надеюсь, работает.
    На днях писал стили для сложного красивого меню с двумя вложениями — намучался с наследованием, а точнее с его отменой во втором уровне.
    Метод пока нигде не видел — автору респект.

  7. neutrino написал:

    to Максим Несов

    если не сработает, хотя вряд ли, можно попробовать прописывать свойства для вложенности второго уровня с использованием !important в конце свойства. Обычно помогает. Например:

    .someblock{border:none!important;}

Leave a Reply

Your email is never published nor shared. Required fields are marked *

*

You may use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>