I do not think this is possible only using css in the current version of Safari / webkit version of iOS8.
But you should be able to prevent scrolling with javascript.
$( ".showHide" ).click( function() { $( ".overlay" ).toggle(); }); $( ".overlay" ).on( 'touchstart touchmove', function( event ) { if ( $( this ).is( ":visible" ) ) { event.preventDefault(); } });
Update:
I played a little and came up with another possible solution that could help you.
HTML:
<button class="showHide">show/hide overlay</button> <br/> <br/> <div class="scrollable"> <div class="overlay"></div> 1 <br/>2 <br/>3 <br/>4 <br/>5 <br/>6 <br/>7 <br/>8 <br/>9 <br/>10 <br/>11 <br/>12 <br/>13 <br/>14 <br/>15 <br/>16 <br/>17 </div>
CSS
.scrollable { width:100%; height:200px; -webkit-overflow-scrolling:touch; overflow:scroll; position: relative } .overlay { content: ' '; position:absolute; top: 0; left: 0; width:100%; height:100%; background-color:black; opacity:.5; transform: translate3d(0,0,0); -webkit-transform: translate3d(0,0,0); transition: opacity 300ms ease; z-index:10; }
JavaScript:
$( ".showHide" ).click( function () { $( ".overlay" ).toggle( { duration: 0, complete: function() { if ( $( ".overlay" ).is( ":visible" ) ) { $( ".overlay" ).css( 'top', $( ".scrollable" ).scrollTop() ); $( ".scrollable" ).css( 'overflow', 'hidden' ); } else { $( ".scrollable" ).css( 'overflow', 'scroll' ); } }}); });
Example: JSFiddle
source share