Je souhaite ajouter une image d'arrière-plan sur le côté droit des éléments de la liste et je souhaite également obtenir un remplissage du côté droit, mais je suis incapable de le faire. Veuillez regarder l'exemple suivant:
HTML:
<ul>
<li>Hello</li>
<li>Hello world</li>
</ul>
CSS:
ul{
width:100px;
}
ul li{
border:1px solid orange;
background: url("arrow1.gif") no-repeat center right;
}
ul li:hover{
background:yellow url("arrow1.gif") no-repeat center right;
}
Je sais que nous pouvons définir la position de l'image en pixels, mais comme chaque li a une largeur différente, je ne peux pas le faire.
Voici le lien JSFiddle: http://jsfiddle.net/QeGAd/1/
Vous pouvez utiliser des valeurs en pourcentage:
background: yellow url("arrow1.gif") no-repeat 95% 50%;
Pas pixel parfait, mais…
Vous pouvez être plus précis avec ceci:
background-Origin: content-box;
Cela fera que l'image respecte le remplissage de la boîte. http://www.w3schools.com/cssref/css3_pr_background-Origin.asp
Vous pouvez obtenir vos résultats avec deux méthodes: -
Première méthode définir les valeurs de position : -
[~ # ~] html [~ # ~]
<ul>
<li>Hello</li>
<li>Hello world</li>
</ul>
[~ # ~] css [~ # ~]
ul{
width:100px;
}
ul li{
border:1px solid orange;
background: url("http://www.adaweb.net/Portals/0/Images/arrow1.gif") no-repeat 90% 5px;
}
ul li:hover{
background: yellow url("http://www.adaweb.net/Portals/0/Images/arrow1.gif") no-repeat 90% 5px;
}
Première démo: - http://jsfiddle.net/QeGAd/18/
Deuxième méthode par CSS : avant: après sélecteurs
[~ # ~] html [~ # ~]
<ul>
<li>Hello</li>
<li>Hello world</li>
[~ # ~] css [~ # ~]
ul{
width:100px;
}
ul li{
border:1px solid orange;
}
ul li:after {
content: " ";
padding-right: 16px;
background: url("http://www.adaweb.net/Portals/0/Images/arrow1.gif") no-repeat center right;
}
ul li:hover {
background:yellow;
}
ul li:hover:after {
content: " ";
padding-right: 16px;
background: url("http://www.adaweb.net/Portals/0/Images/arrow1.gif") no-repeat center right;
}
Deuxième démo: - http://jsfiddle.net/QeGAd/17/
Utilisez background-position: calc(100% - 20px) center
, pour la perfection en pixels calc()
est la meilleure solution.
ul {
width: 100px;
}
ul li {
border: 1px solid orange;
background: url("http://placehold.it/30x15") no-repeat calc(100% - 10px) center;
}
ul li:hover {
background-position: calc(100% - 20px) center;
}
<ul>
<li>Hello</li>
<li>Hello world</li>
</ul>
background-clip: content-box;
L'arrière-plan sera peint dans la zone de contenu.
La seule option possible pour rendre ce pixel parfait est de créer un remplissage transparent dans le GIF lui-même. De cette façon, vous pouvez l'aligner à la droite du LI et conserver le remplissage d'arrière-plan que vous recherchez.
Vous pouvez simplement ajouter le remplissage à l'élément de bloc de tour et ajouter background-Origin
style comme ça:
.block {
position: relative;
display: inline-block;
padding: 10px 12px;
border:1px solid #e5e5e5;
background-size: contain;
background-position: center;
background-repeat: no-repeat;
background-Origin: content-box;
background-image: url(_your_image_);
height: 14rem;
width: 10rem;
}
Vous pouvez vérifier plusieurs https://www.w3schools.com/cssref/css3_pr_background-Origin.asp
la définition de direction , propriété CSS à rtl devrait fonctionner avec vous. Je suppose que ce n'est pas pris en charge sur IE6.
par exemple
<ul style="direction:rtl;">
<li> item </li>
<li> item </li>
</ul>