Non sono sicuro che il titolo sia chiaro, quindi poche parole di spiegazione. Ho pochi elementi, diciamo div
(200px
x 400px
COSTANTE). All'interno di ognuno di essi, c'è un paragrafo con circa 20 righe di testo. Ovviamente, questo è troppo per un piccolo div sparitore. Quello che voglio fare è:CSS: come ottenere la larghezza della barra di scorrimento del browser? (per: hover {overflow: auto} nice margins)
- Normalmente
div
haoverflow: hidden
proprietà. - Con il mouse sopra (
:hover
) questa proprietà viene modificata inoverflow: auto;
e viene visualizzata la barra di scorrimento.
Qual è il problema? Voglio un po 'di spazio (padding o margine) tra il testo del paragrafo e la barra di scorrimento. Diciamo che il paragrafo ha una simmetria margin: 20px;
. Ma dopo l'attivazione dei trigger :hover
, viene visualizzata la barra di scorrimento e l'intero lato destro del paragrafo viene spostato a sinistra di "scrollbar-width" px
. Le frasi sono spezzate in altre righe e l'intero paragrafo appare diverso, il che è piuttosto fastidioso e non facile da usare. Come posso impostare il mio CSS, quindi l'unica modifica dopo il passaggio del mouse sarà l'aspetto di scroolbar?
In altre parole:
/* Normally no scrollbar */
div {display: block; width: 400px; height: 200px; overflow: hidden;}
/* On hover scrollbar appears */
div:hover {overflow: auto;}
/* Paragraph margin predicted for future scrollbar on div */
div p {margin: 20px (20px + scrollbarwidth px) 20px 50px;}
/* With scrollbar margin is symmetrical */
div:hover p {margin: 20px;} /* With scrollbar */
Ho fatto un piccolo frammento di esso, con exaplanation del mio problema a strong
. Spero sia tutto chiaro :). Sto cercando una soluzione da quasi due ore, quindi penso che la mia domanda sia piuttosto unica e interessante.
div.demo1 {
width: 400px;
height: 200px;
overflow: hidden;
background: #ddd;
}
div.demo1:hover {
overflow: auto;
}
div.demo1 p {
background: #eee;
margin: 20px;
}
div.demo2 {
width: 400px;
height: 200px;
overflow: hidden;
background: #ddd;
}
div.demo2:hover {
overflow: auto;
}
div.demo2 p {
background: #eee;
margin: 20px 40px 20px 20px;
}
div.demo2:hover p {
margin: 20px 20px 20px 20px;
}
<div class="demo1">
<p>
This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text.
This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text.
This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text.
This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text.
This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text.
</p>
</div>
<br>
<br>
<strong>As you can see, on hover right side of the paragraph "moves" left. But I want something like:</strong>
<br>
<br>
<div class="demo2">
<p>
This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text.
This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text.
This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text.
This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text.
This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text.
</p>
</div>
<strong>But with a "perfect" scrollbar width (in this example I used 20px)</strong>
BTW. So che posso hardcode la larghezza del paragrafo e usare per esempio '350px', ma questa non è la soluzione che voglio - è brutta e presuppone che la larghezza massima della barra di scorrimento sia solo 50px: P. Grazie per il tuo tempo, cordiali saluti. –
JS è l'unica opzione, come tale possibile duplicazione: http://stackoverflow.com/questions/13382516/getting-scroll-bar-width-using-javascript – SW4