Pour faire simple, voici ce que je veux (obtenu sur un navigateur Webkit en utilisant - webkit-scrollbar ):
Et voici ce que j'obtiens Opera (Firefox n'applique pas non plus le rayon de la bordure à la barre de défilement, mais applique toujours la bordure)):
Existe-t-il un moyen simple de ne pas faire disparaître la bordure sous la barre de défilement?
Je n'ai pas besoin du style sophistiqué de - webkit-scrollbar mais je voudrais que la page soit propre et symétrique ...
J'ai eu le même problème. Ce n'est pas la plus élégante des solutions mais, mettez simplement un petit div à l'intérieur de votre boîte extérieure afin que la barre de défilement ne chevauche pas la boîte extérieure.
Comme ce code copié de ce stylo :
.box {
height: 200px;
width: 250px;
border-radius: 10px;
border: 2px solid #666;
padding: 6px 0px;
background: #ccc;
}
.box-content {
height: 200px;
width: 250px;
overflow: auto;
border-radius: 8px;
}
<div class="box">
<div class="box-content">
<ol>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
</ol>
</div>
</div>
Mettez le contenu à faire défiler dans un div
avec overflow: auto
. Autour de ce contenu div
mettez un div
avec vos coins arrondis et overflow: hidden
.
Vous pouvez maintenant voir la barre de défilement, mais ses coins externes sont masqués et ne perturbent pas les coins arrondis du div
externe.
Exemple:
// Insert placeholder text
document.querySelector('.inner').innerHTML = 'Text<br>'.repeat(20);
.outer {
width: 150pt;
border: 1px solid red;
border-radius: 15pt;
overflow: hidden;
}
.inner {
height: 200px;
overflow-y: auto;
}
<div class="outer">
<div class="inner">
<!-- lots of text here -->
</div>
</div>
mince avec des coins arrondis
@-moz-document url-prefix() {
.scrollbar {
overflow: auto;
width: 0.5em !important;
scroll-behavior: smooth !important;
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3) !important;
background-color: darkgrey !important;
outline: 1px solid slategrey !important;
border-radius: 10px !important;
}
}
::-webkit-scrollbar {
width: 0.5em !important;
scroll-behavior: smooth !important;
}
::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3) !important;
}
::-webkit-scrollbar-thumb {
background-color: darkgrey !important;
outline: 1px solid slategrey !important;
border-radius: 10px !important;
}
<div class="scrollbar" style="height: 600px">
<h1>Scrollbar is slim with rounded corners</h1>
<br/>
<br/>
<br/>
<br/>
<h1>Scrollbar is slim with rounded corners</h1>
<br/>
<br/>
<br/>
<br/>
<h1>Scrollbar is slim with rounded corners</h1>
</div>
Ce serait bien si vous pouviez fournir un violon. Néanmoins, vous devriez essayer de changer le dimensionnement de la boîte du conteneur en border-box (si ce n'est pas déjà fait):
box-sizing: border-box;
Google a implémenté quelque chose comme ça lors de l'affichage de leurs applications Web.
Avec l'aide de l'élément inspect et du copier-coller, je suis venu avec les codes ci-dessous.
ul::-webkit-scrollbar-thumb {
background-color: red;
border: 4px solid transparent;
border-radius: 8px;
background-clip: padding-box;
}
ul::-webkit-scrollbar {
width: 16px;
}
ul {
overflow-y: scroll;
margin: 0;
padding: 0;
width: 350px;
max-height: 300px;
background-color: #ddd;
border-radius: 8px;
}
li {
list-style-type: none;
padding: 13px;
}
<ul>
<li>google.com</li>
<li>facebook.com</li>
<li>Twitter.com</li>
<li>instagram.com</li>
<li>linkedin.com</li>
<li>reddit.com</li>
<li>whatsapp.com</li>
<li>tumblr.com</li>
<li>skype.com</li>
</ul>
Je ne me considère pas comme un expert CSS, alors j'espère que quelqu'un expliquera comment ces choses fonctionnent.
Ou vous pouvez consulter les documents sur MDN: