Я чувствую себя глупо из-за того, что так долго работал веб-программистом и не знал ответа на этот вопрос, я на самом деле надеюсь, что это возможно, и я просто не знал, а то, что я думаю, является ответом (а это то, что это невозможно) ,
Мой вопрос заключается в том, можно ли создать класс CSS, который «наследует» от другого класса CSS (или более одного).
Например, скажем, у нас было:
.something { display:inline }
.else { background:red }
Я хотел бы сделать что-то вроде этого:
.composite
{
.something;
.else
}
где класс .composite будет отображаться как встроенный и иметь красный фон
Ответы:
Существуют такие инструменты, как LESS , которые позволяют вам создавать CSS на более высоком уровне абстракции, аналогично тому, что вы описываете.
Меньше называет эти "миксины"
Вместо
Ты мог бы сказать
источник
Вы можете добавить несколько классов к одному элементу DOM, например
Правила, данные в более поздних классах (или более конкретные), переопределяют. Таким образом,
fourthclass
в этом примере вид преобладает.Наследование не является частью стандарта CSS.
источник
.firstClass {font-size:12px;} .secondClass {font-size:20px;}
будет окончательныйfont-size
вариант12px
или20px
этот кроссбраузер безопасен?Да, но не совсем с этим синтаксисом.
источник
Держите ваши общие атрибуты вместе и назначьте определенные (или переопределите) атрибуты снова.
источник
h1, h2, etc
вы могли бы указать.selector1, .selector2, .etc
Элемент может принимать несколько классов:
И это примерно так близко, как вы собираетесь получить, к сожалению. Я хотел бы видеть эту особенность, наряду с псевдонимами класса когда-нибудь.
источник
Нет, ты не можешь сделать что-то вроде
Это не «классовые» имена в ОО-смысле.
.something
и.else
просто селекторы не более того.Но вы можете указать два класса для элемента
или вы можете посмотреть в другую форму наследования
Где цвет фона и абзацы унаследованы от настроек во вложенном div, который
.foo
стилизован. Возможно, вам придется проверить точную спецификацию W3C.inherit
по умолчанию для большинства свойств, но не для всех.источник
Я столкнулся с этой же проблемой и в итоге использовал решение JQuery, чтобы создать впечатление, что класс может наследовать другие классы.
Это найдет все элементы с классом «составной» и добавит классы «что-то» и «еще» к элементам. Так что-то вроде
<div class="composite">...</div>
будет в итоге так:<div class="composite something else">...</div>
источник
Способ SCSS для данного примера будет примерно таким:
Больше информации, проверьте основы Sass
источник
.composite,.something { display:inline }
и.composite,.else { background:red }
.something
и.else
в других определениях CSS.Лучшее, что вы можете сделать, это
CSS
HTML
источник
Не забывайте:
источник
В Css файле:
источник
font-size
?font-size: 16px
никогда не вступит в силу, верно?12px
.Я понимаю, что этот вопрос сейчас очень старый, но здесь нет ничего!
Если намерение состоит в том, чтобы добавить один класс, который подразумевает свойства нескольких классов, в качестве нативного решения, я бы рекомендовал использовать JavaScript / jQuery (jQuery на самом деле не нужен, но, безусловно, полезен)
Если у вас есть, например,
.umbrellaClass
что «наследует» от,.baseClass1
и.baseClass2
вы могли бы иметь некоторый JavaScript, который запускается готовым.Теперь все элементы
.umbrellaClass
будут иметь все свойства обоих.baseClass
s. Обратите внимание, что, как ООП наследование,.umbrellaClass
может иметь или не иметь свои собственные свойства.Единственное предостережение здесь заключается в том, чтобы рассмотреть, существуют ли динамически создаваемые элементы, которые не будут существовать, когда этот код запускается, но есть и простые способы обойти это.
Отстой CSS не имеет наследства, хотя.
источник
Идеальное время : я перешел от этого вопроса к своей электронной почте, чтобы найти статью о Less , библиотеке Ruby, которая, помимо прочего, делает это:
Поскольку
super
выглядит так жеfooter
, но с другим шрифтом, я буду использовать технику включения класса Less (они называют это mixin), чтобы сказать, чтобы она также включала эти объявления:источник
К сожалению, CSS не обеспечивает «наследование» так, как это делают языки программирования, такие как C ++, C # или Java. Вы не можете объявить класс CSS, а затем расширить его другим классом CSS.
Тем не менее, вы можете применить более одного класса к тегу в вашей разметке ... в этом случае существует сложный набор правил, которые определяют, какие фактические стили будут применяться браузером.
CSS будет искать все стили, которые могут быть применены на основе вашей разметки, и объединять стили CSS из этих нескольких правил вместе.
Как правило, стили объединяются, но когда возникают конфликты, позднее объявленный стиль обычно побеждает (если только атрибут! Important не указан в одном из стилей, в этом случае выигрывает). Кроме того, стили, применяемые непосредственно к элементу HTML, имеют приоритет над стилями классов CSS.
источник
Также есть SASS, который вы можете найти на http://sass-lang.com/ . Там есть тег @extend, а также система смешанных типов. (Рубин)
Это своего рода конкурент LESS.
источник
Это невозможно в CSS.
Единственное, что поддерживается в CSS, это быть более конкретным, чем другое правило:
Пролет с классом «myclass» будет иметь оба свойства.
Другой способ - указать два класса:
Стиль «else» переопределяет (или добавляет) стиль «что-то»
источник
Вы можете применить более одного класса CSS к элементу с помощью чего-то вроде этого класса = "что-то еще"
источник
Как уже говорили другие, вы можете добавить несколько классов к элементу.
Но дело не в этом. Я получил ваш вопрос о наследовании. Суть в том, что наследование в CSS осуществляется не через классы, а через иерархии элементов. Поэтому для моделирования унаследованных черт вам необходимо применять их к различным уровням элементов в DOM.
источник
Я искал это как сумасшедший, и я просто понял это, попробовав разные вещи: P ... Ну, вы можете сделать это так:
У меня вдруг сработало :)
источник
В определенных обстоятельствах вы можете сделать «мягкое» наследование:
Это работает, только если вы добавляете класс .composite к дочернему элементу. Это «мягкое» наследование, потому что любые значения, не указанные в .composite, явно не наследуются. Имейте в виду, что все равно будет меньше символов, чтобы просто написать «встроенный» и «красный» вместо «наследовать».
Вот список свойств и независимо от того, делают ли они это автоматически: https://www.w3.org/TR/CSS21/propidx.html
источник
Пока прямое наследование невозможно.
Можно использовать класс (или идентификатор) для родительского тега, а затем использовать CSS-комбинаторы, чтобы изменить поведение дочернего тега из его иерархии.
Я бы не советовал использовать столько пролетов, как в примере, но это всего лишь доказательство концепции. Все еще есть много ошибок, которые могут возникнуть при попытке применить CSS таким способом. (Например, изменение типов оформления текста).
источник
Less и Sass - это препроцессоры CSS, которые ценным образом расширяют язык CSS. Только одно из многих улучшений, которые они предлагают, это просто вариант, который вы ищете. Есть несколько очень хороших ответов с Less, и я добавлю решение Sass.
У Sass есть опция расширения, которая позволяет полностью расширить один класс на другой. Подробнее о расширении вы можете прочитать в этой статье
источник
На самом деле то, что вы просите, существует - однако это сделано как дополнительные модули. Проверьте этот вопрос на Лучшем CSS в .NET для примеров.
Ознакомьтесь с ответом Ларсенала об использовании LESS, чтобы понять, что делают эти дополнения.
источник
CSS на самом деле не делает то, что вы просите. Если вы хотите написать правила с учетом этой составной идеи, вы можете проверить компас . Это фреймворк таблиц стилей, который похож на уже упомянутый Less.
Это позволяет вам делать миксины и все такое хорошее дело.
источник
Для тех, кто не удовлетворен упомянутыми (отличными) постами, вы можете использовать свои навыки программирования, чтобы создать переменную (PHP или любую другую) и сохранить в ней несколько имен классов.
Это лучший взлом, который я мог придумать.
Затем примените глобальную переменную к желаемому элементу, а не к именам классов.
источник
Посмотрите на CSS compose : https://bambielli.com/til/2017-08-11-css-modules-composes/
согласно им:
Я использую это в своем реактивном проекте.
источник
Не думайте о классах CSS как об объектно-ориентированных классах, думайте о них как об инструменте среди других селекторов, чтобы указать, к каким классам атрибутов применяется элемент html. Подумайте обо всем, что между фигурными скобками, как о классе атрибутов , а селекторы слева говорят элементам, которые они выбирают для наследования атрибутов из класса атрибутов . Пример:
Когда элемент получает атрибут
class="foo"
, полезно думать об этом не как наследование атрибутов из класса.foo
, но из атрибута класса А и класса B атрибут . Т.е. граф наследования имеет один уровень вглубь, элементы выводятся из классов атрибутов , а селекторы указывают, куда идут ребра, и определяют приоритет при наличии конкурирующих атрибутов (аналогично порядку разрешения метода).Практическое значение для программирования заключается в следующем. Допустим, у вас есть таблица стилей, приведенная выше, и вы хотите добавить новый класс
.baz
, где он должен быть таким же,font-size
как и.foo
. Наивное решение было бы так:Каждый раз, когда мне приходится что-то печатать дважды, я так злюсь! Мало того, что я должен написать это дважды, теперь у меня нет возможности программно указать, что
.foo
и.baz
должно иметь то же самоеfont-size
, и я создал скрытую зависимость! Моя вышеприведенная парадигма предполагает, что я должен абстрагироватьfont-size
атрибут от класса атрибута A :Основная жалоба здесь является то , что теперь я должен перепечатывать каждый селектор из атрибута класса A еще раз , чтобы указать , что элементы , они должны выбрать также должны наследовать атрибуты из атрибутов базового класса A . Тем не менее, альтернативы заключаются в том, чтобы не забывать редактировать каждый класс атрибутов, где есть скрытые зависимости каждый раз, когда что-то меняется, или использовать сторонний инструмент. Первый вариант заставляет бога смеяться, второй заставляет меня хотеть убить себя.
источник
Если вам нужен более мощный текстовый препроцессор, чем LESS, проверьте PPWizard:
http://dennisbareis.com/ppwizard.htm
Предупреждение, что веб-сайт действительно отвратителен и имеет небольшую кривую обучения, но он идеально подходит для создания как CSS, так и HTML кода с помощью макросов. Я никогда не понимал, почему больше веб-кодеров не используют его.
источник
Вы можете достичь того, чего хотите, если предварительно обработаете свои файлы .css через php. ...
...
источник