Является ли margin/padding приемлемым как встроенный CSS?

Лучше всего иметь весь стиль во внешнем файле CSS, чтобы использовать кеширование, разделение разметки и дизайна, лучший обзор и т.д.

Однако я обычно сталкивался с проблемой, что элементы должны выглядеть одинаково, т.е. иметь один и тот же класс (ы), но должны отличаться положением, например. требуют разного запаса или заполнения из-за различий в составе.

Я подумал о трех вариантах:

Вариант 1. Разделите стили внешнего вида из стилей позиции (margin/padding), используйте их в отдельных классах и объедините их по мере необходимости.

.myClass { ...; }
.myClass.top { margin-top: 20px; }
.myClass.inside { margin: 10px 0px; }
.myClass.bottom { margin-bottom: 20px; }

Вариант 2. Дублируйте классы, переименуйте их соответственно и сохраните все различия в своем классе.

.myClassTop { ...; margin-top: 20px; }
.myClass { ...; margin: 10px 0px; }
.myClassBottom { ...; margin-bottom: 20px; }

Вариант 3. Используйте встроенный стиль для объявления разных полей/дополнений.

<div class="myClass" style="margin-top: 20px;">
<div class="myClass">
<div class="myClass" style="margin-bottom: 20px;">

имеющий

.myClass { ...; margin: 10px 0px; }

Мой здравый смысл подсказывает мне использовать варианты 1 и каскадные различия в зависимости от структуры parent/child. Но это обычно заканчивается довольно запутанным, особенно для других разработчиков, читающих CSS. Поэтому я попробовал вариант 3 (имея только несколько внешних полей/дополнений), и это, похоже, работает очень хорошо.

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

Любые советы?

Ответ 1

Мое личное предпочтение состоит в том, чтобы, так сказать, иметь "разделительные классы". Например:

.default-row-spacer{
    margin-bottom:10px;
}
.default-spacer{
    margin-right:10px;
}
.large-row-spacer{
    margin-bottom:20px;
}

Затем я использую их следующим образом:

<div class="panel default-spacer default-row-spacer">
    <div class="content default-row-spacer">
    </div>
    <div class="content default-row-spacer">
    </div>
</div>
<div class="right-panel default-row-spacer">
</div>

Это позволяет мне позже изменить все на полях сайта, поддерживая тот же внешний вид на моем веб-сайте.

Ответ 2

это сильно зависит от ваших проблем,

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

.tTwenty { margin-top:20px;}
.bTwenty {margin-bottom:20px;}

и добавьте их как

<div class="myClass tTwenty">
<div class="myClass">
<div class="myClass bTwenty">

но все ваши решения будут работать, это просто разница в том, чтобы позаботиться об этом но вы не должны начинать использовать встроенные стили, потому что вы укладываетесь с ними, и вы начинаете исправлять каждый маленький материал с помощью inline-css, а затем он становится волосатым, потому что, когда вы смотрите на это через год, вы должны смешивать extern css и ваши встроенные строки, чтобы понять стиль, и вам нужно прикоснуться к каждому отдельному документу с помощью встроенного стиля, а не исправлять все в ваших css файлах

Ответ 3

Эмпирическое правило: если это нужно сделать репрессивно... как список что-то сказать комментарии. И каждый из них имеет тело, которое появляется, 40px под заголовком, использует классы css. Если это одно время. просто один объект, скажем... использовать inline

Ответ 4

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

В результате я использовал элемент Chrome Inspect Element, чтобы точно узнать иерархию div и классов и сделал следующее:

Вариант 4:

.myClass { ...; }
.thumbnail .myClass { margin-top: 20px; }
div.leftCol .myClass { margin: 10px 0px; }
footer .myClass { margin-bottom: 20px; }

Преимущество этой опции, на мой взгляд, заключается не только в том, чтобы иметь возможность использовать все преимущества вашего варианта 1, но вам не нужно добавлять новые классы и > CSS остается очень структурированным и читаемым.