Может ли класс CSS наследовать один или несколько других классов?

var firstInt = myInts[0];
var query = (from d in db.MYTABLE
             where d.RELID.Equals(firstInt)
             select d.ID).Distinct();

List<int?> urunidleri = query.ToList();
687
задан CoderPi 9 December 2015 в 09:24
поделиться

16 ответов

Существуют такие инструменты, как LESS , которые позволяют вам составлять CSS на более высоком уровне абстракции, подобном тому, что вы описываете.

Less называет эти «миксины»

Вместо

/* CSS */
#header {
  -moz-border-radius: 8px;
  -webkit-border-radius: 8px;
  border-radius: 8px;
}

#footer {
  -moz-border-radius: 8px;
  -webkit-border-radius: 8px;
  border-radius: 8px;
}

вы могли бы сказать

/* LESS */
.rounded_corners {
  -moz-border-radius: 8px;
  -webkit-border-radius: 8px;
  border-radius: 8px;
}

#header {
  .rounded_corners;
}

#footer {
  .rounded_corners;
}
415
ответ дан 22 November 2019 в 21:37
поделиться

Взгляните на CSS , сочиняют : https://bambielli.com/til/2017-08-11-css-modules-composes /

согласно им:

.serif-font {
    font-family: Georgia, serif;
}

.display {
    composes: serif-font;
    font-size: 30px;
    line-height: 35px;
}

я использую его в моем реагировать проект.

0
ответ дан 22 November 2019 в 21:37
поделиться

Не думайте о CSS классы как объектно-ориентированные классы, думайте о них как просто инструмент среди других селекторов для определения, которым классы атрибута разрабатывается элемент HTML. Думайте обо всем между фигурными скобками как класс атрибута, и селекторы на левой стороне говорят элементам, что они выбирают к [1 117], наследовались атрибуты класс атрибута. Пример:

.foo, .bar { font-weight : bold; font-size : 2em; /* attribute class A */}
.foo { color : green; /* attribute class B */}

, Когда элементу дают атрибут class="foo", полезно думать о нем не как о наследовавшихся атрибутах от класса .foo, но от [1 119] класс A атрибута и класс B атрибута . Т.е. график наследования является одним уровнем глубоко с элементами, происходящими от [1 121] классы атрибута , и селекторы, указывающие, куда края идут, и определение приоритета, когда там конкурируют атрибуты (подобный порядку разрешения метода).

enter image description here

практическая импликация для программирования является этим. Скажите, что Вам дали таблицу стилей выше и хотите добавить новый класс .baz, где она должна иметь тот же font-size как .foo. Наивное решение было бы этим:

.foo, .bar { font-weight : bold; font-size : 2em; /* attribute class A */}
.foo { color : green; /* attribute class B */}
.baz { font-size : 2em; /* attribute class C, hidden dependency! */}

enter image description here

Любое время я должен ввести что-то дважды, что я становлюсь настолько безумным! Мало того, что я должен записать это дважды, теперь у меня нет способа программно указания, которое .foo и .baz должно иметь тот же font-size, и я создал скрытая зависимость! Мой выше парадигмы предложил бы, чтобы я абстрагировал эти font-size атрибут от [1 123] класс A атрибута :

.foo, .bar, .baz { font-size : 2em; /* attribute base class for A */}
.foo, .bar { font-weight : bold; /* attribute class A */}
.foo { color : green; /* attribute class B */}

enter image description here

основная жалоба здесь - то, что теперь я должен перепечатать каждый селектор от [1 124] класс A атрибута снова, чтобы указать, что элементы, которые они должны выбрать, должны также наследовать атрибуты от [1 125] базовый класс A атрибута. Однако, альтернативам придется не забыть редактировать каждый класс атрибута, где существуют скрытые зависимости каждый раз, когда что-то изменяется, или использовать сторонний инструмент. Первая опция заставляет бога смеяться, второе заставляет меня хотеть уничтожить меня.

0
ответ дан 22 November 2019 в 21:37
поделиться

CSS на самом деле не выполняет то, что вы просите. Если вы хотите писать правила с учетом этой составной идеи, вы можете попробовать compass .

1
ответ дан 22 November 2019 в 21:37
поделиться

На самом деле то, о чем вы просите, существует, однако это сделано в виде дополнительных модулей. Посмотрите этот вопрос на Лучший CSS в .NET для примеров.

Ознакомьтесь с ответом Ларсенала об использовании LESS , чтобы получить представление о том, что делают эти надстройки.

1
ответ дан 22 November 2019 в 21:37
поделиться

Это невозможно в CSS.

Единственное, что поддерживается в CSS, - это быть более конкретным, чем другое правило:

span { display:inline }
span.myclass { background: red }

Диапазон с классом "myclass" будет иметь оба свойства.

Другой способ - указать два класса:

<div class="something else">...</div>

Стиль " else "переопределит (или добавит) стиль" чего-то "

3
ответ дан 22 November 2019 в 21:37
поделиться

К сожалению, CSS не обеспечивает «наследование» в отличие от языков программирования, таких как C ++, C # или Java. Вы не можете объявить класс CSS, а затем расширить его другим классом CSS.

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

<span class="styleA styleB"> ... </span>

CSS будет искать все стили, которые могут быть применены в зависимости от вашей разметки, и объединять стили CSS из этих нескольких правил вместе.

Как правило, стили объединяются, но когда возникают конфликты, позже объявленный стиль обычно выигрывает (если только атрибут! important не указан в одном из стилей, и в этом случае он выигрывает). Также,

4
ответ дан 22 November 2019 в 21:37
поделиться

Идеальное время : я перешел от этого вопроса к своему электронному письму, чтобы найти статью о Less , библиотеке Ruby, которая, среди прочего, делает следующее:

Поскольку super выглядит так же, как нижний колонтитул , но с другим шрифтом, я воспользуюсь техникой включения классов Лесса (они называют это миксином), чтобы сообщить ему, чтобы он также включил эти объявления:

#super {
  #footer;
  font-family: cursive;
}
7
ответ дан 22 November 2019 в 21:37
поделиться

Как говорили другие, вы можете добавить несколько классов к элементу.

Но дело не в этом. Я понимаю ваш вопрос о наследстве. На самом деле наследование в CSS осуществляется не через классы, а через иерархии элементов. Таким образом, для моделирования унаследованных признаков вам необходимо применить их к различным уровням элементов в модели DOM.

3
ответ дан 22 November 2019 в 21:37
поделиться

Вы можете применить более одного класса CSS к элементу примерно так: class = "something else"

3
ответ дан 22 November 2019 в 21:37
поделиться

В файле Css:

p.Title 
{
  font-family: Arial;
  font-size: 16px;
}

p.SubTitle p.Title
{
   font-size: 12px;
}
8
ответ дан 22 November 2019 в 21:37
поделиться

Не забудьте:

div.something.else {

    // will only style a div with both, not just one or the other

}
13
ответ дан 22 November 2019 в 21:37
поделиться

Элемент может принимать несколько классов:

.classOne { font-weight: bold; }
.classTwo { font-famiy:  verdana; }

<div class="classOne classTwo">
  <p>I'm bold and verdana.</p>
</div>

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

50
ответ дан 22 November 2019 в 21:37
поделиться

Нет, вы не можете сделать что-то вроде

.composite 
{
   .something;
   .else
}

Это не имена "классов" в объектно-ориентированном смысле. .something и .else - это просто селекторы, не более того.

Но вы можете указать два класса в элементе

<div class="something else">...</div>

, или вы можете изучить другую форму наследования

.foo {
  background-color: white;
  color: black;
}

.bar {
  background-color: inherit;
  color: inherit;
  font-weight: normal;
}
<div class="foo">
  <p class="bar">Hello, world</p>
</div>

Где фоновый цвет и цвет абзацев наследуются от настроек во включающем блоке div, который имеет стиль .foo . Возможно, вам придется проверить точную спецификацию W3C. Наследование в любом случае используется по умолчанию для большинства свойств, но не для всех.

42
ответ дан 22 November 2019 в 21:37
поделиться

Вы можете добавить несколько классов к одному элементу DOM, например

<div class="firstClass secondClass thirdclass fourthclass"></div>

Наследование не является частью стандарта CSS.

296
ответ дан 22 November 2019 в 21:37
поделиться

Yes, but not exactly with that syntax.

.composite,
.something { display:inline }

.composite,
.else      { background:red }
105
ответ дан 22 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: