Peut une classe CSS hériter d'une ou plusieurs autres classes?
Je me sens stupide d'avoir été un programmeur web depuis si longtemps et de ne pas savoir la réponse à cette question, en fait j'espère que c'est possible et je ne le savais pas à propos plutôt que de ce que je pense est la réponse (qui est qu'il n'est pas possible).
Ma question est de savoir si il est possible de faire une classe CSS qui "hérite" d'une autre classe CSS (ou plus d'un).
Par exemple, de dire que nous avions:
.something { display:inline }
.else { background:red }
Ce que j'aime faire, c'est quelque chose comme ceci:
.composite
{
.something;
.else
}
où l' ".composite" de la classe à la fois d'affichage en ligne et ont un arrière-plan rouge
- pense plus à propos de cascade plutôt que de l'héritage, il ne s'applique pas ici
- Génial!! haacked.com/archive/2009/12/02/t4-template-for-less-css.aspx
Vous devez vous connecter pour publier un commentaire.
Il existe des outils comme MOINS, qui vous permettent de composer de la CSS à un niveau d'abstraction plus élevé similaire à ce que vous décrivez.
Moins d'appels de ces "Mixin"
Au lieu de
On pourrait dire
PM> install-package dotless
#menu { .myfont; }
est Ok ou pas? (CSS seul, sans additifs)Vous pouvez ajouter plusieurs classes à un seul élément du DOM, par exemple
L'héritage n'est pas une partie de la CSS standard.
.firstClass {font-size:12px;} .secondClass {font-size:20px;}
sera alors définitivefont-size
être12px
ou20px
et est-ce de la croix-navigateur sécuritaire?Oui, mais pas exactement avec cette syntaxe.
Garder votre commune attributs et attribuer spécifique (ou remplacer) les attributs de nouveau.
h1, h2, etc
vous pouvez spécifier.selector1, .selector2, .etc
Un élément peut prendre plusieurs classes:
Et c'est à peu près aussi proche que vous allez obtenir, malheureusement. Je serais ravi de voir cette fonction, ainsi que la classe alias un jour.
Non vous ne pouvez pas faire quelque chose comme
Ce sont pas de "classe" noms dans le OO sens.
.something
et.else
sont juste des sélecteurs rien de plus.Mais vous pouvez spécifier deux classes sur un élément
ou vous pouvez regarder dans une autre forme d'héritage
Où les paragraphes backgroundcolor et la couleur sont héritées de l'paramètres dans la enfermant div qui est
.foo
de style. Vous pourriez avoir à vérifier l'exacte spécification du W3C.inherit
est par défaut pour la plupart des propriétés de toute façon, mais pas pour tous.J'ai rencontré ce même problème et a fini à l'aide de JQuery solution pour le faire paraître comme une classe ne peut hériter d'autres classes.
Cela permettra de trouver tous les éléments avec la classe "composite" et d'ajouter les classes de "quelque chose" et "else" pour les éléments. Donc, quelque chose comme
<div class="composite">...</div>
finira comme suit:<div class="composite something else">...</div>
La SCSS façon que pour l'exemple donné, serait quelque chose comme:
Plus d'informations, consultez la sass bases
.composite,.something { display:inline }
et.composite,.else { background:red }
.something
et.else
dans un autre des définitions de css.Le meilleur que vous pouvez faire est de cette
CSS
HTML
N'oubliez pas:
Dans le fichier Css:
font-size
?font-size: 16px
ne peut pas prendre effet, à droite?Un timing parfait: je suis allé à partir de cette question à mon email, pour trouver un article sur Moins, un Rubis de la bibliothèque qui, entre autres choses, fait ceci:
Depuis
super
ressemble àfooter
, mais avec une police différente, je vais utiliser le Moins de la classe d'inclusion technique (ils appellent ça un mixin) pour dire à ces déclarations trop:Je me rends compte que cette question est maintenant très vieux, mais, ici, va rien!
Si le but est d'ajouter une seule classe, qui implique les propriétés de plusieurs classes à la fois, une solution native, je recommande l'utilisation de JavaScript/jQuery (jQuery n'est pas vraiment nécessaire, mais certainement utile)
Si vous avez, par exemple
.umbrellaClass
qui "hérite" de.baseClass1
et.baseClass2
vous pourriez avoir un peu de JavaScript que feux sur les prêts.Maintenant tous les éléments de
.umbrellaClass
aurez toutes les propriétés des deux.baseClass
s. Notez que, comme la programmation orientée objet, héritage,.umbrellaClass
peut ou peut ne pas avoir ses propres propriétés.Le seul inconvénient ici est de considérer qu'il y a des éléments créés dynamiquement à ne pas exister lorsque ce code se déclenche, mais il existe des moyens simples autour de cela.
Suce css n'a pas natif de l'héritage, si.
Malheureusement, le CSS ne fournit pas de "l'héritage" dans la façon que les langages de programmation comme C++, C# ou Java. Vous ne pouvez pas déclarer une classe CSS et ensuite de l'étendre avec une autre classe CSS.
Cependant, vous pouvez appliquer plus d'une seule classe à une balise dans votre balisage ... auquel cas il y a d'un ensemble complexe de règles qui déterminent réelle styles seront appliquées par le navigateur.
CSS va chercher tous les styles qui peuvent être appliquées sur la base de ce que votre balisage, et de mélanger les styles CSS à partir de ces multiples règles ensemble.
Généralement, les styles sont fusionnés, mais lorsque des conflits surviennent, au plus tard, a déclaré le style sera généralement gagner (à moins que le !important attribut est spécifié sur l'un des styles, dans lequel cas qui gagne). Aussi, des styles appliqués directement à un élément HTML priment classe CSS styles.
Il y a aussi SASS, que vous pouvez trouver à http://sass-lang.com/. Il y a un @étendre balise, ainsi que d'un mélange type de système. (Ruby)
C'est un concurrent de MOINS.
Vous pouvez appliquer plus d'une classe CSS à un élément par quelque chose comme ceci class="autre chose"
Comme d'autres l'ont dit, vous pouvez ajouter plusieurs classes à un élément.
Mais ce n'est pas vraiment le point. Je reçois votre question à propos de l'héritage. Le point réel est que l'héritage dans le CSS est fait pas par le biais de classes, mais par le biais de l'élément de hiérarchies. Donc, pour modèle hérité des traits que vous devez appliquer à différents niveaux d'éléments dans le DOM.
Ce n'est pas possible en CSS.
La seule chose prise en charge dans le CSS est plus spécifique que l'autre règle:
Une durée de avec la classe "maclasse" auront à la fois des propriétés.
Une autre façon est en spécifiant deux classes:
Le style de "else" volonté de remplacer (ou ajouter) le style de "quelque chose"
Je cherchais qui comme un fou aussi et je viens de comprendre, en essayant différentes choses :P... eh Bien, vous pouvez le faire comme ça:
Soudain, elle a fonctionné pour moi 🙂
Dans certains cas, vous pouvez faire un "soft" de l'héritage:
Cela ne fonctionne que si vous ajoutez l' .composite de classe à un élément d'enfant. Il est "soft" de l'héritage, parce que toutes les valeurs ne sont pas spécifiés dans .composite sont pas héréditaire, évidemment. Gardez à l'esprit, il serait encore moins de caractères pour écrire simplement "inline" et "rouge" au lieu de "hériter".
Ici est une liste de propriétés et de si oui ou non ils le font automatiquement:
https://www.w3.org/TR/CSS21/propidx.html
En fait ce que vous demandez existe - toutefois, il est fait comme modules. Découvrez cette question sur Mieux CSS en .NET pour des exemples.
Découvrez Larsenal de réponse sur l'utilisation de MOINS pour avoir une idée de ce que ces add-ons de le faire.
CSS n'a pas vraiment d' ne ce que vous demandez. Si vous voulez écrire des règles qui composites idée à l'esprit, vous voudrez peut-être vérifier boussole. C'est un cadre de la feuille de style qui ressemble à celui déjà mentionné Moins.
Il vous permet de faire mixin et que toutes les bonnes affaires.
Pour ceux qui ne sont pas satisfaits avec le mentionné (excellent) messages, vous pouvez utiliser vos compétences en programmation pour créer une variable (PHP ou n'importe quel) et de stocker les multiples noms de classe.
C'est le meilleur hack, je pouvais venir.
Puis appliquer la variable globale à l'élément que vous désirez plutôt que les noms de classe eux-mêmes
Tout l'héritage direct n'est pas possible.
Il est possible d'utiliser une classe (ou id) pour une balise parent et ensuite utiliser les CSS combinators de modifier balise enfant le comportement de sa hiérarchie.
CSS:
HTML:
Je ne dirais pas autant s'étend comme dans l'exemple, mais c'est juste une preuve de concept. Il y a encore de nombreux bugs qui peuvent survenir lorsque vous tentez d'appliquer le CSS de cette façon. (Par exemple modifier text-decoration types).
Moins et Sass sont CSS pré-processeurs qui s'étendent langage CSS dans des moyens. Juste l'une des nombreuses améliorations qu'ils offrent est juste l'option que vous cherchez. Il y a quelques très bonnes réponses, avec de moins en Moins et je vais ajouter de la Sass solution.
Sass a prolonger d'une option qui permet à une classe à être étendu à un autre. Plus au sujet de prolonger, vous pouvez lire dans cet article
Si vous voulez un plus puissant texte de préprocesseur MOINS, découvrez PPWizard:
http://dennisbareis.com/ppwizard.htm
Attention le site est vraiment affreuse et il ya une petite courbe d'apprentissage, mais il est parfait pour la construction des CSS et le code HTML via des macros. Je n'ai jamais compris pourquoi plus web codeurs ne l'utilisez pas.
Vous pouvez obtenir ce que vous voulez si vous prétraiter votre .les fichiers css grâce à php.
...
...