Quelle est la différence entre spécifier une couleur d'arrière-plan à l'aide de background
et background-color
?
Extrait # 1
body { background-color: blue; }
Snippet # 2
body { background: blue; }
En supposant qu'il s'agisse de deux propriétés distinctes, dans votre exemple spécifique, il n'y a aucune différence dans le résultat, car background
est en réalité un raccourci pour
couleur de fond
image de fond
position de fond
Répétition du fond
pièce jointe
clip de fond
fond-origine
taille de fond
Ainsi, outre le background-color
, à l’aide du raccourci background
, vous pouvez également ajouter une ou plusieurs valeurs sans répéter une autre propriété background-*
plusieurs fois.
Laquelle choisir dépend essentiellement de vous, mais cela dépend aussi des conditions spécifiques de vos déclarations de style (par exemple, si vous devez remplacer uniquement le background-color
lorsque vous héritez d'autres propriétés background-*
associées d'un élément les valeurs sauf le background-color
).
background
remplacera toutes les spécifications précédentes background-color
, background-image
, etc. C'est en gros un raccourci, mais un réinitialisation.
Je vais parfois l’utiliser pour écraser les spécifications background
précédentes dans les personnalisations de modèles, pour lesquelles je voudrais ce qui suit:
background: white url(images/image1.jpg) top left repeat;
être le suivant:
background: black;
Ainsi, tous les paramètres (background-image
, background-position
, background-repeat
) seront réinitialisés à leurs valeurs par défaut.
À propos de performance CSS:
background
vs background-color
:
Comparaison de 18 échantillons de couleur rendus 100 fois sur une page aussi petit que rectangles, une fois avec background et une fois avec background-color.
Bien que ces chiffres proviennent d’une seule page, les prochains actualise les temps de rendu modifiés, mais la différence en pourcentage est de fondamentalement les mêmes à chaque fois.
C’est une économie de près de 42,6 ms, presque deux fois plus rapide avec l’utilisation de background au lieu de background-color dans Safari 7.0.1. Chrome 33 semble être à peu près le même.
Honnêtement, cela m'a époustouflé parce que pendant très longtemps pour deux raisons:
- D'habitude, je plaide toujours pour des propriétés explicites dans les propriétés CSS, en particulier pour les arrière-plans, car elles peuvent avoir un impact négatif sur la spécificité.
- J'ai pensé que lorsqu'un navigateur voit
background: #000;
, il voit vraimentbackground: #000 none no-repeat top center;
. Je n'ai pas de lien vers une ressource ici, mais je me souviens de l'avoir lu quelque part.
Ref:https://github.com/mdo/css-perf#background-vs-background-color
Avec background
, vous pouvez définir toutes les propriétés background
telles que:
background-color
background-image
background-repeat
background-position
Avec background-color
vous pouvez simplement spécifier la couleur de l'arrière-plan
background: url(example.jpg) no-repeat center center #fff;
CONTRE.
background-image: url(example.jpg);
background-position: center center;
background-repeat: no-repeat;
background-color: #fff;
(Voir Légende: Arrière-plan - Propriété Abrégée))
Une des différences:
Si vous utilisez une image comme arrière-plan de cette manière:
background: url('Image Path') no-repeat;
alors vous ne pouvez pas le remplacer par la propriété "background-color".
Mais si vous utilisez l’arrière-plan pour appliquer une couleur, celle-ci est identique à la couleur d’arrière-plan et peut être remplacée.
par exemple: http://jsfiddle.net/Z57Za/11/ et http://jsfiddle.net/Z57Za/12/
Il n'y a pas de différence. Les deux fonctionneront de la même manière.
Les propriétés d'arrière-plan CSS permettent de définir les effets d'arrière-plan de un élément.
Propriétés CSS utilisées pour les effets de fond:
- couleur de fond
- image de fond
- répétition du fond
- pièce jointe
- position de fond
La propriété Background comprend toutes ces propriétés et vous pouvez simplement les écrire sur une seule ligne.
Ils sont les mêmes. Il existe plusieurs sélecteurs d’arrière-plan (à savoir background-color
, background-image
, background-position
) et vous pouvez y accéder via le sélecteur background
plus simple ou plus spécifique. Par exemple:
background: blue url(/myImage.jpg) no-repeat;
ou
background-color: blue;
background-image: url(/myImage.jpg);
background-repeat: no-repeat;
La différence est que la propriété abrégée background
définit plusieurs propriétés liées à l'arrière-plan. Il les définit tous, même si vous ne spécifiez que par exemple une valeur de couleur, puisque les autres propriétés sont définies sur leurs valeurs initiales, par ex. background-image
à none
.
Cela ne signifie pas qu'il prévaudra toujours les autres paramètres pour ces propriétés. Cela dépend de la cascade selon les règles habituelles, généralement mal comprises.
En pratique, le raccourci a tendance à être un peu plus sûr. Il s'agit d'une précaution (incomplète mais utile) contre l'obtention accidentelle de propriétés d'arrière-plan inattendues, telles qu'une image d'arrière-plan, à partir d'une autre feuille de style. En plus, c’est plus court. Mais vous devez vous rappeler que cela signifie réellement “définir toutes les propriétés de l'arrière-plan”.
background
est le raccourci pour background-color
et quelques autres éléments liés à l’arrière-plan (voir ci-dessous):
background-color
background-image
background-repeat
background-attachment
background-position
Lisez la déclaration ci-dessous du W3C:
Contexte - Propriété abrégée
Pour raccourcir le code, c'est Il est également possible de spécifier toutes les propriétés d'arrière-plan dans un seul fichier propriété. Ceci s'appelle une propriété abrégée.La propriété abrégée pour background est background:
body {
background: white url("img_tree.png") no-repeat right top;
}
Lors de l'utilisation de la propriété raccourcie, l'ordre des valeurs de la propriété est le suivant:
background-color background-image background-repeat background-attachment background-position
Peu importe si l'une des valeurs de propriété est manquante, aussi longtemps comme les autres sont dans cet ordre.
Comparaison de 18 échantillons de couleur rendus 100 fois sur une page aussi petit que rectangles, une fois avec le fond et une fois avec la couleur de fond.
J'ai recréé l'expérience CSS performance et les résultats sont très différents de nos jours.
background
Chrome 54: 443 (µs/div)
Firefox 49: 162 (µs/div)
Edge 10: 56 (µs/div)
background-color
Chrome 54: 449 (µs/div)
Firefox 49: 171 (µs/div)
Edge 10: 58 (µs/div)
Comme vous le voyez, il n'y a presque pas de différence.
C'est la meilleure réponse. Le raccourci (arrière-plan) sert à la réinitialisation et à DRY (à combiner avec le raccourci).
J'ai constaté que vous ne pouvez pas définir de dégradé avec la couleur d'arrière-plan.
Cela marche:
background:linear-gradient(to right, rgba(255,0,0,0), rgba(255,255,255,1));
Cela ne veut pas:
background-color:linear-gradient(to right, rgba(255,0,0,0), rgba(255,255,255,1));
J'ai remarqué lors de la génération d'e-mails pour Outlook ...
/*works*/
background: gray;
/*does not work*/
background-color: gray;
Vous pouvez faire de belles choses une fois que vous comprenez que vous pouvez jouer avec l'héritage avec cela. Cependant, commençons par comprendre quelque chose de ce document sur le fond:
Avec CSS3, vous pouvez appliquer plusieurs arrière-plans aux éléments. Ceux-ci sont superposés les uns sur les autres avec le premier arrière-plan que vous fournissez en haut et le dernier fond énuméré dans le dos. Seul le dernier fond peut inclure une couleur de fond.
Alors quand on fait:
background: red;
Il définit la couleur d'arrière-plan sur rouge car le rouge est la dernière valeur répertoriée.
Quand on fait:
background: linear-gradient(to right, grey 50%, yellow 2%) red;
Le rouge est à nouveau la couleur de fond MAIS vous verrez un dégradé.
.box{
border-radius: 50%;
width: 200px;
height: 200px;
background: linear-gradient(to right, grey 50%, yellow 2%) red;
}
.box::before{
content: "";
display: block;
margin-left: 50%;
height: 50%;
border-radius: 0 100% 100% 0 / 50%;
transform: translateX(70px) translateY(-26px) rotate(325deg);
background: inherit;
}
<div class="box">
</div>
Maintenant la même chose avec la couleur de fond:
.box{
border-radius: 50%;
width: 200px;
height: 200px;
background: linear-gradient(to right, grey 50%, yellow 2%) red;
}
.box::before{
content: "";
display: block;
margin-left: 50%;
height: 50%;
border-radius: 0 100% 100% 0 / 50%;
transform: translateX(70px) translateY(-26px) rotate(325deg);
background-color: inherit;
}
<div class="box">
</div>
La raison en est que parce que quand nous faisons cela:
background: linear-gradient(to right, grey 50%, yellow 2%) #red;
Le dernier numéro définit la couleur de fond.
Ensuite, dans le passé, nous héritons de l'arrière-plan (puis du dégradé) ou de la couleur d'arrière-plan, puis du rouge.