<h2>Yes, sort of..</h2>

<p>When you ask the question, "Can the scroll-bars of a browser be removed in some way, rather than simply hidden or camouflaged", everyone will say "Not possible" because it is not possible to <em>remove</em> the scrollbars from all browsers in a compliant and cross-compatible way, and then there's the whole argument of usability.</p>

<p>However, it is possible to prevent the browser from ever having the need to generate and display scrollbars if you do not allow your webpage to overflow.</p>

<p>This just means that we have to proactively substitute the same behavior that the browser would typically do for us and tell the browser thanks but no thanks buddy.  Rather than try to remove scrollbars (which we all know is not possible) we can avoid scrolling (perfectly feasible) and scroll within the elements that we make and have more control over.</p>

<p>Create a div with overflow hidden. Detect when the user attempts to scroll, but is unable to because we've disabled the browsers ability to scroll with overflow: hidden.. and instead move the content up using JavaScript when this occurs. Thereby creating our own scrolling without the browsers default scrolling or use a plugin like <a href="https://github.com/cubiq/iscroll" rel="noreferrer">iScroll</a>.</p>

<h2>---</h2>

<p><em>For the sake of being thorough; all the vendor specific ways of manipulating scroll-bars:</em></p>

<h2>Internet Explorer 5.5+</h2>

<p>*These properties were never part of the CSS specification, nor were they ever approved or vendor prefixed, but they work in Internet Explorer and Konqueror. These can also be set locally in the user style sheet for each application. In Internet&nbsp;Explorer you find it under the "Accessibility" tab, in Konqueror under the "Stylesheets" tab.</p>

<pre><code>body, html { /* These are defaults and can be replaced by hexadecimal color values */
    scrollbar-base-color: aqua;
    scrollbar-face-color: ThreeDFace;
    scrollbar-highlight-color: ThreeDHighlight;
    scrollbar-3dlight-color: ThreeDLightShadow;
    scrollbar-shadow-color: ThreeDDarkShadow;
    scrollbar-darkshadow-color: ThreeDDarkShadow;
    scrollbar-track-color: Scrollbar;
    scrollbar-arrow-color: ButtonText;
}
</code></pre>

<p>As of Internet&nbsp;Explorer&nbsp;8 these properties were vendor prefixed by Microsoft, but they were still never approved by <a href="http://en.wikipedia.org/wiki/World_Wide_Web_Consortium" rel="noreferrer">W3C</a>.</p>

<pre><code>-ms-scrollbar-base-color
-ms-scrollbar-face-color
-ms-scrollbar-highlight-color
-ms-scrollbar-3dlight-color
-ms-scrollbar-shadow-color
-ms-scrollbar-darkshadow-color
-ms-scrollbar-base-color
-ms-scrollbar-track-color
</code></pre>

<h3>Further details about Internet Explorer</h3>

<p>Internet Explorer makes <code>scroll</code> available which sets whether or not to disable or enable scroll bars; it can also be used to get the value of the position of the scroll bars.</p>

<p>With Microsoft Internet Explorer 6 and later, when you use the <code>!DOCTYPE</code> declaration to specify standards-compliant mode, this attribute applies to the HTML element. When standards-compliant mode is not specified, as with earlier versions of Internet&nbsp;Explorer, this attribute applies to the <code>BODY</code> element, <strong>NOT</strong> the <code>HTML</code> element.</p>

<p>It's also worth noting that when working with .NET the ScrollBar class in <code>System.Windows.Controls.Primitives</code> in the Presentation framework is responsible for rendering the scrollbars.</p>

<p><a href="http://msdn.microsoft.com/en-us/library/ie/ms534393(v=vs.85).aspx" rel="noreferrer">http://msdn.microsoft.com/en-us/library/ie/ms534393(v=vs.85).aspx</a></p>

<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/ie/hh772048%28v=vs.85%29.aspx" rel="noreferrer">MSDN. Basic UI properties</a></li>
<li><a href="http://www.w3.org/Style/Examples/007/scrollbars.en.html" rel="noreferrer">W3C. About non-standard scrollbar properties</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.scrollbar%28v=vs.110%29.aspx" rel="noreferrer">MSDN. .NET ScrollBar Class</a></li>
</ul>

<hr>

<h2>WebKit</h2>

<p>WebKit extensions related to scroll-bar customization are:</p>

<pre><code>::-webkit-scrollbar {}             /* 1 */
::-webkit-scrollbar-button {}      /* 2 */
::-webkit-scrollbar-track {}       /* 3 */
::-webkit-scrollbar-track-piece {} /* 4 */
::-webkit-scrollbar-thumb {}       /* 5 */
::-webkit-scrollbar-corner {}      /* 6 */
::-webkit-resizer {}               /* 7 */
</code></pre>

<p><img src="https://i.stack.imgur.com/BhMto.jpg" alt="Enter image description here"></p>

<p>These can each be combined with additional pseudo-selectors:</p>

<ul>
<li><code>:horizontal</code> – The horizontal pseudo-class applies to any scrollbar pieces that have a horizontal orientation.</li>
<li><code>:vertical</code> – The vertical pseudo-class applies to any scrollbar pieces that have a vertical orientation.</li>
<li><code>:decrement</code> – The decrement pseudo-class applies to buttons and track pieces. It indicates whether or not the button or track piece will decrement the view’s position when used (e.g., up on a vertical scrollbar, left on a horizontal scrollbar).</li>
<li><code>:increment</code> – The increment pseudo-class applies to buttons and track pieces. It indicates whether or not a button or track piece will increment the view’s position when used (e.g., down on a vertical scrollbar, right on a horizontal scrollbar).</li>
<li><code>:start</code> – The start pseudo-class applies to buttons and track pieces. It indicates whether the object is placed before the thumb.</li>
<li><code>:end</code> – The end pseudo-class applies to buttons and track pieces. It indicates whether the object is placed after the thumb.</li>
<li><code>:double-button</code> – The double-button pseudo-class applies to buttons and track pieces. It is used to detect whether a button is part of a pair of buttons that are together at the same end of a scrollbar. For track pieces it indicates whether the track piece abuts a pair of buttons.</li>
<li><code>:single-button</code> – The single-button pseudo-class applies to buttons and track pieces. It is used to detect whether a button is by itself at the end of a scrollbar. For track pieces it indicates whether the track piece abuts a singleton button.</li>
<li><code>:no-button</code> – Applies to track pieces and indicates whether or not the track piece runs to the edge of the scrollbar, i.e., there is no button at that end of the track.</li>
<li><code>:corner-present</code> – Applies to all scrollbar pieces and indicates whether or not a scrollbar corner is present.</li>
<li><code>:window-inactive</code> – Applies to all scrollbar pieces and indicates whether or not the window containing the scrollbar is currently active. (In recent nightlies, this pseudo-class now applies to ::selection as well. We plan to extend it to work with any content and to propose it as a new standard pseudo-class.)</li>
</ul>

<p><strong>Examples of these combinations</strong></p>

<pre><code>::-webkit-scrollbar-track-piece:start { /* Select the top half (or left half) or scrollbar track individually */ }
::-webkit-scrollbar-thumb:window-inactive { /* Select the thumb when the browser window isn't in focus */ }
::-webkit-scrollbar-button:horizontal:decrement:hover { /* Select the down or left scroll button when it's being hovered by the mouse */ }
</code></pre>

<ul>
<li><a href="https://www.webkit.org/blog/363/styling-scrollbars/" rel="noreferrer">Styling Scrollbars - Webkit.org</a></li>
</ul>

<h3>Further details about Chrome</h3>

<blockquote>
  <p><strong>addWindowScrollHandler</strong>
  public static HandlerRegistration addWindowScrollHandler(Window.ScrollHandler handler)</p>
  
  <p>&nbsp;&nbsp;Adds a Window.ScrollEvent handler
  Parameters:
  &nbsp;&nbsp;handler - the handler
  Returns:
  &nbsp;&nbsp;returns the handler registration
  [<em>source</em>](<a href="http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/client/Window.html#addWindowScrollHandler(com.google.gwt.user.client.Window.ScrollHandler)" rel="noreferrer">http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/client/Window.html#addWindowScrollHandler(com.google.gwt.user.client.Window.ScrollHandler)</a>
  )</p>
</blockquote>

<hr>

<h2>Mozilla</h2>

<p>Mozilla does have some extensions for manipulating the scroll-bars, but they are all recommended not to be used.</p>

<ul>
<li><code>-moz-scrollbars-none</code> They recommend using overflow:hidden in place of this.</li>
<li><code>-moz-scrollbars-horizontal</code> Similar to overflow-x</li>
<li><code>-moz-scrollbars-vertical</code> Similar to overflow-y</li>
<li><p><code>-moz-hidden-unscrollable</code> Only works internally within a users profile settings. Disables scrolling XML root elements and disables using arrow keys and mouse wheel to scroll web pages.</p></li>
<li><p><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/overflow" rel="noreferrer">Mozilla Developer Docs on 'Overflow'</a></p></li>
</ul>

<h3>Further details about Mozilla</h3>

<p>This is not really useful as far as I know, but it's worth noting that the attribute which controls whether or not scrollbars are displayed in Firefox is (<a href="https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDOMWindow" rel="noreferrer">reference link</a>):</p>

<ul>
<li><strong>Attribute:</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scrollbars</li>
<li><strong>Type:</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nsIDOMBarProp</li>
<li><strong>Description:</strong>&nbsp;&nbsp;The object that controls whether or not scrollbars are shown in the window. This attribute is "replaceable" in JavaScript. Read only</li>
</ul>

<h2>Last but not least, padding is like magic.</h2>

<p>As has been previously mentioned in some other answers, here is an illustration which is sufficiently self-explanatory.</p>

<p><img src="https://i.stack.imgur.com/fafgt.gif" alt="Enter image description here"></p>

<hr>

<h2>History lesson</h2>

<p><a href="https://i.stack.imgur.com/C1Wd0.jpg" rel="noreferrer"><img src="https://i.stack.imgur.com/C1Wd0.jpg" alt="Scroll bars"></a></p>

<p>Just because I'm curious, I wanted to learn about the origin of scrollbars, and these are the best references I found.</p>

<ul>
<li><a href="https://arxiv.org/pdf/1404.6752.pdf" rel="noreferrer">10 Inventions on Scrolling and Scrollbars</a></li>
<li><a href="https://tools.ietf.org/id/draft-hellstrom-textpreview-02.txt" rel="noreferrer">https://tools.ietf.org/id/draft-hellstrom-textpreview-02.txt</a></li>
<li><a href="https://tools.ietf.org/id/draft-mrose-blocks-service-01.txt" rel="noreferrer">https://tools.ietf.org/id/draft-mrose-blocks-service-01.txt</a></li>
</ul>

<h2>Miscellaneous</h2>

<p><a href="http://www.w3.org/TR/2014/CR-html5-20140204/embedded-content-0.html#attr-iframe-seamless" rel="noreferrer">In an HTML5 specification draft, the <code>seamless</code> attribute was defined to prevent scroll-bars from appearing in iFrames so that they could be blended with surrounding content on a page</a>. Though this element does not appear in the latest revision.</p>

<p>The <code>scrollbar</code> BarProp object is a child of the <code>window</code> object and represents the user interface element that contains a scrolling mechanism, or some similar interface concept. <code>window.scrollbars.visible</code> will return <code>true</code> if the scroll bars are visible.</p>

<pre><code>interface Window {
  // The current browsing context
  readonly attribute WindowProxy window;
  readonly attribute WindowProxy self;
           attribute DOMString name;
  [PutForwards=href] readonly attribute Location location;
  readonly attribute History history;
  readonly attribute UndoManager undoManager;
  Selection getSelection();
  [Replaceable] readonly attribute BarProp locationbar;
  [Replaceable] readonly attribute BarProp menubar;
  [Replaceable] readonly attribute BarProp personalbar;
  [Replaceable] readonly attribute BarProp scrollbars;
  [Replaceable] readonly attribute BarProp statusbar;
  [Replaceable] readonly attribute BarProp toolbar;
  void close();
  void focus();
  void blur();
  // Truncated
</code></pre>

<p>The History API also includes features for scroll restoration on page navigation to persist the scroll position on page load.</p>

<p><code>window.history.scrollRestoration</code> can be used to check the status of scrollrestoration or change its status (appending <code>="auto"/"manual"</code>. Auto is the default value. Changing it to manual means that you as the developer will take ownership of any scroll changes that may be required when a user traverses the app's history. If you need to, you can keep track of the scroll position as you push history entries with history.pushState().</p>

<h2>---</h2>

<h1>Further reading:</h1>

<ul>
<li><a href="https://en.wikipedia.org/wiki/Scrollbar" rel="noreferrer">Scrollbar on Wikipedia</a></li>
<li><a href="https://msdn.microsoft.com/en-us/library/windows/desktop/bb787529(v=vs.85).aspx" rel="noreferrer">Scroll bar (Windows)</a></li>
<li><a href="http://help.dottoro.com/ljtxlmfr.php" rel="noreferrer">The Scroll Method</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ms536726(VS.85).aspx" rel="noreferrer">The Scroll Method - Microsoft Dev Network</a></li>
<li><a href="https://github.com/cubiq/iscroll" rel="noreferrer">iScroll on Github (referenced in the first section above)</a></li>
<li><a href="http://www.nngroup.com/articles/scrolling-and-scrollbars/" rel="noreferrer">Scrolling and Scrollbars an article about usability by Jakob Nielsen</a></li>
</ul>

<h2>Examples</h2>

<ul>
<li><a href="https://benfrain.com/independent-scrolling-panels-body-scroll-using-just-css/" rel="noreferrer">Independent scrolling panels with no body scroll (using just CSS) - Ben Frain (10-21-2014)</a></li>
</ul>
Hiding the scroll bar on an HTML page
<p>Can CSS be used to hide the scroll bar? How would you do this?</p>