Ẩn thanh cuộn trên trang HTML


748

CSS có thể được sử dụng để ẩn thanh cuộn không? Bạn sẽ làm điều này như thế nào?


4
@UweKeim, không có mẹo nào cho IE11
daVe

Câu trả lời:


425

Đặt overflow: hidden;trên thẻ body như thế này:

<style type="text/css">
    body {
        overflow: hidden;
    }
</style>

Đoạn mã trên ẩn cả thanh cuộn ngang và dọc.

Nếu bạn chỉ muốn ẩn thanh cuộn dọc , hãy sử dụng overflow-y:

<style type="text/css">
    body {
        overflow-y: hidden;
    }
</style>

Và nếu bạn chỉ muốn ẩn thanh cuộn ngang , hãy sử dụng overflow-x:

<style type="text/css">
    body {
        overflow-x: hidden;
    }
</style>

Lưu ý: Nó cũng sẽ vô hiệu hóa tính năng cuộn. Tham khảo các câu trả lời dưới đây nếu bạn chỉ muốn ẩn thanh cuộn, nhưng không phải là tính năng cuộn.


4
Không có tùy chọn "không" cho thuộc tính tràn. Các tùy chọn có sẵn bao gồm: hiển thị, ẩn, cuộn, tự động, kế thừa.
Sergiy Sokolenko

1273
Trên thực tế, đây không hoàn toàn là câu trả lời đúng: tràn: ẩn không "ẩn" thanh cuộn. Nó cũng dừng tính năng cuộn trên trang. Đó không phải là chính xác những gì chúng tôi yêu cầu.
adriendenat

17
Trong Chrome, khi tràn cơ thể được đặt thành hiddencuộn sẽ hoạt động với bánh xe cuộn chuột. Trong Firefox, việc cuộn sẽ không hoạt động với bánh xe chuột, tôi phải mất một lúc để tìm ra điều này.
Doug Molineux

13
Tôi không thấy điểm nào trong việc khẳng định rằng overflow: hiddenkhông cho phép cuộn. Nếu ai đó muốn ẩn thanh cuộn, thì có lẽ họ cho rằng điều khiển không cần thiết vì không có nội dung để cuộn ở vị trí đầu tiên . Hoặc có lẽ họ chỉ không muốn cho phép cuộn hoàn toàn .
BoltClock

39
Đối với tôi khẳng định là hoàn toàn hợp lệ, vì câu hỏi là để ẩn thanh cuộn , không phải để vô hiệu hóa cuộn .
sboisse

976

WebKit hỗ trợ các yếu tố giả thanh cuộn có thể được ẩn bằng các quy tắc CSS tiêu chuẩn:

#element::-webkit-scrollbar {
    display: none;
}

Nếu bạn muốn ẩn tất cả các thanh cuộn, hãy sử dụng

::-webkit-scrollbar {
    display: none;
}

Tôi không chắc chắn về việc khôi phục - điều này đã làm việc, nhưng có thể có một cách đúng đắn để làm điều đó:

::-webkit-scrollbar {
    display: block;
}

Tất nhiên bạn luôn có thể sử dụng width: 0, sau đó có thể dễ dàng khôi phục width: auto, nhưng tôi không phải là người thích lạm dụng widthcác điều chỉnh khả năng hiển thị.

Firefox 64 hiện hỗ trợ thuộc tính chiều rộng thanh cuộn thử nghiệm theo mặc định (63 yêu cầu đặt cờ cấu hình). Để ẩn thanh cuộn trong Firefox 64:

#element {
    scrollbar-width: none;
}

Để xem trình duyệt hiện tại của bạn có hỗ trợ phần tử giả hay không scrollbar-width, hãy thử đoạn mã này:


.


11
Chỉ là những gì tôi đang tìm kiếm vì tôi thực sự muốn ẩn các thanh cuộn nhưng vẫn có các yếu tố vẫn có thể cuộn được (ví dụ: phím lên / xuống)
Mathias

7
đây sẽ là câu trả lời tốt nhất vì các giải pháp khác không cho phép bạn cuộn
nuway

7
Điều này có hỗ trợ các trình duyệt khác ngoài webkit không? Bởi vì nó không hoạt động trong mozilla.
Rupam Datta

12
Có một yêu cầu tính năng trên trình theo dõi Mozilla mặc dù. Bạn có thể tăng tốc độ thực hiện bằng cách bỏ phiếu cho nó ở đó :)
Peter

3
ĐÂY LÀ CÂU TRẢ LỜI CHÍNH XÁC! Như những người khác đang mất tích. Vấn đề không chỉ là ẩn thanh cuộn, mà là cách tràn ảnh hưởng đến các kiểu khác. Tôi gặp vấn đề chính xác tương tự trong ứng dụng của chúng tôi. Chúng tôi KHÔNG muốn tự động tràn trên 99% ứng dụng, tuy nhiên có một phần trợ giúp mà bạn muốn người dùng có thể cuộn xuống. Vì phần thân đã bị tràn: bị ẩn, nên wan duy nhất xử lý việc này là một lớp ng trên root, hoặc nhờ những kẻ này, chỉ sử dụng một số CSS.
Leon Gaban

524

Ừ kiểu vậy, chắc vậy..

Khi bạn đặt câu hỏi: "Có thể gỡ bỏ các thanh cuộn của trình duyệt theo cách nào đó, thay vì chỉ đơn giản là ẩn hoặc ngụy trang", mọi người sẽ nói "Không thể" vì không thể xóa thanh cuộn khỏi tất cả các trình duyệt trong một cách tuân thủ và tương thích chéo, và sau đó có toàn bộ lập luận về khả năng sử dụng.

Tuy nhiên, có thể ngăn trình duyệt không có nhu cầu tạo và hiển thị thanh cuộn nếu bạn không cho phép trang web của mình bị tràn.

Điều này chỉ có nghĩa là chúng ta phải chủ động thay thế hành vi tương tự mà trình duyệt thường làm cho chúng ta và nói với trình duyệt lời cảm ơn nhưng không cảm ơn bạn thân. Thay vì cố gắng loại bỏ các thanh cuộn (mà tất cả chúng ta đều biết là không thể), chúng ta có thể tránh cuộn (hoàn toàn khả thi) và cuộn trong các yếu tố mà chúng ta tạo ra và có nhiều quyền kiểm soát hơn.

Tạo một div với tràn ẩn. Phát hiện khi người dùng cố gắng cuộn, nhưng không thể vì chúng tôi đã vô hiệu hóa khả năng cuộn của trình duyệt với tràn: bị ẩn .. và thay vào đó di chuyển nội dung lên bằng JavaScript khi điều này xảy ra. Do đó, tạo cuộn riêng của chúng tôi mà không cần cuộn mặc định của trình duyệt hoặc sử dụng plugin như iScroll .

---

Vì lợi ích của sự kỹ lưỡng; tất cả các cách cụ thể của nhà cung cấp để thao tác các thanh cuộn:

Internet Explorer 5.5+

* Các thuộc tính này không bao giờ là một phần của đặc tả CSS, cũng không bao giờ được phê duyệt hoặc tiền tố của nhà cung cấp, nhưng chúng hoạt động trong Internet Explorer và Konqueror. Chúng cũng có thể được đặt cục bộ trong bảng kiểu người dùng cho mỗi ứng dụng. Trong Internet Explorer, bạn tìm thấy nó trong tab "Trợ năng", trong Konqueror trong tab "Biểu định kiểu".

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;
}

Kể từ Internet Explorer 8, các thuộc tính này được Microsoft cung cấp tiền tố, nhưng chúng vẫn chưa bao giờ được W3C chấp thuận .

-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

Thông tin chi tiết về Internet Explorer

Internet Explorer scrollcung cấp khả năng thiết lập có hay không tắt hoặc bật thanh cuộn; nó cũng có thể được sử dụng để lấy giá trị vị trí của các thanh cuộn.

Với Microsoft Internet Explorer 6 trở lên, khi bạn sử dụng !DOCTYPEkhai báo để chỉ định chế độ tuân thủ tiêu chuẩn, thuộc tính này áp dụng cho thành phần HTML. Khi chế độ tuân thủ tiêu chuẩn không được chỉ định, như với các phiên bản trước của Internet Explorer, thuộc tính này áp dụng cho thành BODYphần, KHÔNG phải là thành HTMLphần.

Cũng đáng lưu ý rằng khi làm việc với .NET, lớp ScrollBar trong System.Windows.Controls.Primitiveskhung Trình bày có trách nhiệm hiển thị các thanh cuộn.

http://msdn.microsoft.com/en-us/l Library /ie / ms534393 (v = vs85) .aspx


WebKit

Các tiện ích mở rộng WebKit liên quan đến tùy chỉnh thanh cuộn là:

::-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 */

Nhập mô tả hình ảnh ở đây

Mỗi cái có thể được kết hợp với các bộ chọn giả bổ sung:

  • :horizontal - Lớp giả ngang áp dụng cho bất kỳ miếng thanh cuộn nào có hướng nằm ngang.
  • :vertical - Lớp giả dọc áp dụng cho bất kỳ miếng thanh cuộn nào có hướng dọc.
  • :decrement- Lớp giả giảm dần áp dụng cho các nút và phần theo dõi. Nó cho biết liệu nút hoặc đoạn nhạc có làm giảm vị trí của chế độ xem hay không khi sử dụng (ví dụ: lên trên thanh cuộn dọc, bên trái trên thanh cuộn ngang).
  • :increment- Lớp giả tăng dần áp dụng cho các nút và phần theo dõi. Nó cho biết liệu một nút hoặc đoạn nhạc có tăng vị trí của chế độ xem hay không khi được sử dụng (ví dụ: xuống trên thanh cuộn dọc, ngay trên thanh cuộn ngang).
  • :start- Lớp giả bắt đầu áp dụng cho các nút và phần theo dõi. Nó cho biết liệu đối tượng được đặt trước ngón tay cái.
  • :end- Lớp giả cuối kết thúc áp dụng cho các nút và phần theo dõi. Nó cho biết liệu đối tượng được đặt sau ngón tay cái.
  • :double-button- Lớp giả hai nút áp dụng cho các nút và phần theo dõi. Nó được sử dụng để phát hiện xem một nút có phải là một phần của một cặp nút được đặt cùng nhau ở cùng một đầu của thanh cuộn hay không. Đối với các bản nhạc, phần này cho biết phần bản nhạc có tiếp tục một cặp nút hay không.
  • :single-button- Lớp giả đơn nút áp dụng cho các nút và phần theo dõi. Nó được sử dụng để phát hiện xem một nút có nằm ở cuối thanh cuộn hay không. Đối với các đoạn nhạc, nó cho biết liệu đoạn nhạc đó có tiếp tục với nút đơn hay không.
  • :no-button - Áp dụng cho các đoạn nhạc theo dõi và cho biết liệu đoạn nhạc đó có chạy đến cạnh của thanh cuộn hay không, tức là không có nút nào ở cuối đoạn nhạc đó.
  • :corner-present - Áp dụng cho tất cả các phần của thanh cuộn và cho biết có hay không một góc thanh cuộn.
  • :window-inactive- Áp dụng cho tất cả các phần của thanh cuộn và cho biết cửa sổ có chứa thanh cuộn hiện đang hoạt động hay không. .

Ví dụ về các kết hợp này

::-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 */ }

Thông tin chi tiết về Chrome

addWindowScrollHandler Handler tĩnh công khaiRegistration addWindowScrollHandler (Trình xử lý Window.ScrollHandler)

  Thêm một tham số Trình xử lý Window.ScrollEvent: handler - handler Returns: trả về đăng ký trình xử lý [ nguồn ] ( http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/client/Window.html# addWindowScrollHandler (com.google.gwt.user.client.Window.ScrollHandler) )


Mozilla

Mozilla có một số phần mở rộng để thao tác các thanh cuộn, nhưng tất cả chúng đều được khuyến nghị không được sử dụng.

  • -moz-scrollbars-none Họ khuyên bạn nên sử dụng tràn: ẩn ở vị trí này.
  • -moz-scrollbars-horizontal Tương tự như tràn-x
  • -moz-scrollbars-vertical Tương tự như tràn-y
  • -moz-hidden-unscrollableChỉ hoạt động nội bộ trong một cài đặt hồ sơ người dùng. Vô hiệu hóa cuộn các phần tử gốc XML và vô hiệu hóa bằng cách sử dụng các phím mũi tên và bánh xe chuột để cuộn các trang web.

  • Tài liệu phát triển Mozilla trên 'tràn'

Thông tin chi tiết về Mozilla

Điều này thực sự không hữu ích theo như tôi biết, nhưng đáng chú ý là thuộc tính kiểm soát xem thanh cuộn có được hiển thị trong Firefox hay không ( liên kết tham chiếu ):

  • Thuộc tính:        thanh cuộn
  • Loại:               nsIDOMBarProp
  • Mô tả:   Đối tượng kiểm soát xem thanh cuộn có được hiển thị trong cửa sổ hay không. Thuộc tính này là "có thể thay thế" trong JavaScript. Chỉ đọc

Cuối cùng nhưng không kém phần quan trọng, đệm giống như phép thuật.

Như đã được đề cập trước đây trong một số câu trả lời khác, đây là một minh họa đủ tự giải thích.

Nhập mô tả hình ảnh ở đây


Bài học lịch sử

Thanh cuộn

Chỉ vì tôi tò mò, tôi muốn tìm hiểu về nguồn gốc của thanh cuộn và đây là những tài liệu tham khảo tốt nhất tôi tìm thấy.

Điều khoản khác

Trong dự thảo đặc tả HTML5, seamlessthuộc tính được xác định để ngăn các thanh cuộn xuất hiện trong iFrames để chúng có thể được trộn với nội dung xung quanh trên một trang . Mặc dù yếu tố này không xuất hiện trong phiên bản mới nhất.

Các scrollbarđối tượng BarProp là con của các windowđối tượng và thể hiện các yếu tố giao diện người dùng có chứa một cơ chế di chuyển, hoặc một số khái niệm giao diện tương tự. window.scrollbars.visiblesẽ trở lại truenếu các thanh cuộn được nhìn thấy.

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

API Lịch sử cũng bao gồm các tính năng phục hồi cuộn trên điều hướng trang để duy trì vị trí cuộn khi tải trang.

window.history.scrollRestorationcó thể được sử dụng để kiểm tra trạng thái cuộn lại hoặc thay đổi trạng thái của nó (nối thêm ="auto"/"manual". Tự động là giá trị mặc định. Thay đổi nó thành thủ công có nghĩa là bạn là nhà phát triển sẽ sở hữu mọi thay đổi cuộn có thể được yêu cầu khi người dùng đi qua lịch sử của ứng dụng . Nếu bạn cần, bạn có thể theo dõi vị trí cuộn khi bạn đẩy các mục lịch sử với history.pushState ().

---

Đọc thêm:

Ví dụ


27
Câu trả lời này sẽ áp dụng cho nhiều trình duyệt hơn (cụ thể là IE) thay vì câu trả lời hiện được nâng cấp.
Matt Jensen

Bổ sung tuyệt vời. Thực tế thực hiện cùng một giải pháp ngày hôm nay! Có thể đáng nói rằng các yếu tố khác nên bị tràn: ẩn;
Matt Jensen

2
Đây là câu trả lời đúng, đầy đủ tính năng. Tôi giải thích rằng nếu bạn chỉ muốn ngăn người dùng cuộn, bạn có thể sử dụng quy tắc tràn. Bạn cũng có thể thực hiện tính năng cuộn được xây dựng tại nhà của riêng bạn. Nếu điều đó là không đủ, bạn có thể đặt thuộc tính thanh cuộn trực tiếp bằng các quy tắc khác nhau cho các trình duyệt khác nhau.
newshorts

1
Mặc dù đây là một câu trả lời cực kỳ cẩn thận và rất chi tiết và nhiều tài nguyên được liên kết, có những vấn đề lớn đối với người dùng công nghệ hỗ trợ khi bạn tắt cuộn và sử dụng javascript để xử lý tất cả các cuộn. Nếu bạn cũng không đặt tiêu điểm thành một yếu tố mỗi khi bạn cuộn cho người dùng, thì người dùng AT của bạn sẽ hoàn toàn bị mất. Ngoài ra, người dùng của bạn hiện đã mất tất cả quyền kiểm soát tinh chỉnh đối với những gì anh ta nhìn thấy. UX rất kém để tiếp quản cuộn cho người dùng của bạn.
ShiningLight

Firefox Quantum 63.0.1 trên MacOS High Sierra, không ẩn thanh cuộn ngay cả với quy tắc 'tràn: -moz-scrollbars-none'. Bất cứ ai biết giải pháp cho điều này? Tất cả các trình duyệt khác dường như làm việc với các giải pháp được đề xuất.
Simona Adriani

106

Bạn có thể thực hiện điều này với một trình bao bọc divcó ẩn tràn và bộ bên trong divthành auto.

Để xóa divthanh cuộn của bên trong , bạn có thể kéo nó ra khỏi divkhung nhìn của bên ngoài bằng cách áp dụng một lề âm cho bên trong div. Sau đó áp dụng phần đệm bằng nhau cho div bên trong để nội dung được xem.

Câu đố

HTML

<div class="hide-scroll">
    <div class="viewport">
        ...
    </div>
</div>

CSS

.hide-scroll {
    overflow: hidden;
}

.viewport {
    overflow: auto;

    /* Make sure the inner div is not larger than the container
     * so that we have room to scroll.
     */
    max-height: 100%;

    /* Pick an arbitrary margin/padding that should be bigger
     * than the max width of all the scroll bars across
     * the devices you are targeting.
     * padding = -margin
     */
    margin-right: -100px;
    padding-right: 100px;
}

8
Đây phải là câu trả lời được chấp nhận imo. Điều duy nhất tôi phải thêm là height: inheritedtrong .viewportcss.
Helzgate

4
Vấn đề duy nhất với câu trả lời này là khoảng trống "chết" còn lại của thanh cuộn đã di chuyển, bởi vì chúng ta thực sự không biết chiều rộng của thanh cuộn, để trừ nó khỏi phần đệm.
Frondor

3
Ngoài ra, bạn không cần sử dụng các giá trị cố định cho phần đệm và lề. 100%linh hoạt hơn và thực hiện công việc.
Frondor

Đã hoạt động trong IE11, Operah và Chrome, chưa thử nghiệm Firefox. Đây là câu trả lời tuyệt vời, +1.
gần như là người mới bắt đầu

tại sao -100px100px??
oldboy

61

Điều này làm việc với tôi với các thuộc tính CSS đơn giản:

.container {
    -ms-overflow-style: none;  // Internet Explorer 10+
    scrollbar-width: none;  // Firefox
}
.container::-webkit-scrollbar { 
    display: none;  // Safari and Chrome
}

Đối với các phiên bản Firefox cũ hơn, hãy sử dụng: overflow: -moz-scrollbars-none;


2
Thật không may, điều này không hoạt động trong FireFox 48.0.2 trên macOS Sierra. Nếu bạn làm như vậy overflow: -moz-scrollbars-none;thì bạn loại bỏ thành công thanh cuộn, nhưng bạn cũng loại bỏ khả năng cuộn. Bạn cũng có thể chỉ cần đặt overflow: hiddenvào .container.
Martyn Chamberlin

1
Ồ, và từ developer.mozilla.org/en-US/docs/Web/CSS/overflow , chúng tôi đã đọc điều này về -moz-scrollbars-none: "Đây là một API lỗi thời và không còn được đảm bảo để hoạt động."
Martyn Chamberlin

1
Tôi đã cập nhật câu trả lời của mình với sự hỗ trợ mới nhất cho Firefox :)
Hristo Eftimov

56

Đây là giải pháp của tôi, về mặt lý thuyết bao gồm tất cả các trình duyệt hiện đại:

html {
    scrollbar-width: none; /* For Firefox */
    -ms-overflow-style: none; /* For Internet Explorer and Edge */
}

html::-webkit-scrollbar {
    width: 0px; /* For Chrome, Safari, and Opera */
}

html có thể được thay thế bằng bất kỳ yếu tố nào bạn muốn ẩn thanh cuộn.

Lưu ý : Tôi đã đọc lướt 19 câu trả lời khác để xem mã tôi đang đăng có được bao phủ hay không và dường như không có câu trả lời nào tổng hợp tình huống như năm 2019, mặc dù rất nhiều trong số đó đi vào chi tiết tuyệt vời. Xin lỗi nếu điều này đã được người khác nói và tôi đã bỏ lỡ nó.


3
câu trả lời bị đánh giá thấp nhất ở đây
AGrush

Giải pháp duy nhất khắc phục cơn ác mộng cuộn của tôi: D Cảm ơn!
boomdrak

21

Tôi nghĩ rằng tôi đã tìm thấy một cách giải quyết cho các bạn nếu bạn vẫn quan tâm. Đây là tuần đầu tiên của tôi, nhưng nó đã làm việc cho tôi ...

<div class="contentScroller">
    <div class="content">
    </div>
</div>

.contentScroller {overflow-y: auto; visibility: hidden;}
.content {visibility: visible;}

Hoạt động với tôi trong chrome và firefox, chưa thử nghiệm IE hoặc bất kỳ trình duyệt nào khác. jsfiddle.net/8xtfk729
Ben Davis

1
Trên chrome (ít nhất là v54), điều này vô hiệu hóa cuộn qua bánh xe cuộn vì một số lý do. Cuộn qua các phím mũi tên, home / end / pg down / pg up, touch flick và chuột 3 click n kéo vẫn hoạt động.
House3272

Câu trả lời này là hợp pháp, nó thực sự hoạt động và dường như hoạt động trên các trình duyệt.
Sam

Điều đó che giấu toàn bộ div về phía tôi
Jonny

16

Nếu bạn đang tìm giải pháp để ẩn thanh cuộn cho thiết bị di động, hãy làm theo câu trả lời của Peter !

Đây là một jsfiddle , sử dụng giải pháp bên dưới để ẩn thanh cuộn ngang.

.scroll-wrapper{
    overflow-x: scroll;
}
.scroll-wrapper::-webkit-scrollbar { 
    display: none; 
}

Nó đã được thử nghiệm trên máy tính bảng Samsung với Android 4.0.4 (Ice Cream Sandwich, cả trong trình duyệt gốc và Chrome) và trên iPad có iOS 6 (cả trong Safari và Chrome).


câu trả lời của anh ấy không hoạt động trên Chrome và Safari trong iOS 12.3
oldboy


11

Như những người khác đã nói, sử dụng CSS overflow.

Nhưng nếu bạn vẫn muốn người dùng có thể cuộn nội dung đó (không hiển thị thanh cuộn), bạn phải sử dụng JavaScript.

Hãy xem câu trả lời của tôi ở đây để có giải pháp: Ẩn thanh cuộn trong khi vẫn có thể cuộn bằng chuột / bàn phím


1
Đây là câu trả lời đúng và nên là đầu tiên. Tất cả mọi thứ ở trên này không trả lời câu hỏi trong tầm tay. OP không yêu cầu cuộn bị vô hiệu hóa, zhe muốn ẩn thanh cuộn.
pixelpax

11

Ngoài câu trả lời của Peter:

#element::-webkit-scrollbar {
    display: none;
}

Điều này sẽ hoạt động tương tự cho Internet Explorer 10:

 #element {
      -ms-overflow-style: none;
 }

10

Tiếp cận trình duyệt chéo để ẩn thanh cuộn.

Nó đã được thử nghiệm trên Edge, Chrome, Firefox và Safari

Ẩn thanh cuộn trong khi vẫn có thể cuộn bằng bánh xe chuột!

Codepen

/* Make parent invisible */
#parent {
    visibility: hidden;
    overflow: scroll;
}

/* Safari and Chrome specific style. Don't need to make parent invisible, because we can style WebKit scrollbars */
#parent:not(*:root) {
  visibility: visible;
}

/* Make Safari and Chrome scrollbar invisible */
#parent::-webkit-scrollbar {
  visibility: hidden;
}

/* Make the child visible */
#child {
    visibility: visible;
}

1
một lời giải thích về cách thức hoạt động của nó sẽ được đánh giá cao - chơi với tầm nhìn của phụ huynh / trẻ em để ẩn thanh cuộn thật kinh khủng
JackyJohnson

1
@ BelealsInSanta Tôi đã thêm ý kiến ​​và codepen để giải thích rõ hơn. Tôi không đồng ý với đánh giá của bạn rằng chơi với tầm nhìn là một cách khủng khiếp để ẩn thanh cuộn. Tôi hiểu rằng đó là một hack, nhưng cách thích hợp để đạt được hiệu ứng này sẽ là nếu tất cả các trình duyệt hỗ trợ một cách để tạo kiểu riêng cho thanh cuộn như chrome và safari cho phép.
Blake Plumb

2
Tôi chỉ cảm thấy yêu giải pháp của bạn. Nó hoạt động hoàn hảo (được sử dụng trong các ứng dụng được thiết kế để sử dụng bởi các trình duyệt hiện đại). Cảm ơn bạn rất nhiều!
Maxime Lafarie

7

Nếu bạn muốn cuộn để làm việc, trước khi ẩn thanh cuộn, hãy xem xét việc tạo kiểu cho chúng. Các phiên bản hiện đại của OS X và HĐH di động đều có thanh cuộn, trong khi không thực tế để lấy bằng chuột, lại khá đẹp và trung tính.

Để ẩn thanh cuộn, một kỹ thuật của John Kurlak hoạt động tốt ngoại trừ việc khiến người dùng Firefox không có bàn di chuột không có cách cuộn trừ khi họ có chuột với bánh xe, điều mà họ có thể làm, nhưng ngay cả khi đó họ thường chỉ có thể cuộn theo chiều dọc .

Kỹ thuật của John sử dụng ba yếu tố:

  • Một yếu tố bên ngoài để che dấu thanh cuộn.
  • Một yếu tố ở giữa để có thanh cuộn.
  • Và một phần tử nội dung để đặt cả kích thước của phần tử ở giữa và làm cho nó có thanh cuộn.

Có thể đặt kích thước của các yếu tố bên ngoài và nội dung giống nhau để loại bỏ việc sử dụng tỷ lệ phần trăm, nhưng tôi không thể nghĩ ra bất cứ điều gì khác sẽ không hoạt động với điều chỉnh đúng.

Mối quan tâm lớn nhất của tôi là liệu tất cả các phiên bản trình duyệt có đặt thanh cuộn để hiển thị nội dung tràn có thể nhìn thấy hay không. Tôi đã thử nghiệm trong các trình duyệt hiện tại, nhưng không phải những trình duyệt cũ hơn.

Xin tha thứ cho SASS của tôi ; P

%size {
    // set width and height
}

.outer {
    // mask scrollbars of child
    overflow: hidden;
    // set mask size
    @extend %size;
    // has absolutely positioned child
    position: relative;
}

.middle {
    // always have scrollbars.
    // don't use auto, it leaves vertical scrollbar showing
    overflow: scroll;
    // without absolute, the vertical scrollbar shows
    position: absolute;
}
// prevent text selection from revealing scrollbar, which it only does on
// some webkit based browsers.
.middle::-webkit-scrollbar {
    display: none;
}

.content {
    // push scrollbars behind mask
    @extend %size;
}

Kiểm tra

Hệ điều hành X là 10.6.8. Windows là Windows 7.

  • Thanh cuộn Firefox 32.0 bị ẩn. Các phím mũi tên không cuộn, ngay cả sau khi nhấp để lấy nét, nhưng bánh xe chuột và hai ngón tay trên trackpad thì có. OS X và Windows.
  • Thanh cuộn Chrome 37.0 bị ẩn. Phím mũi tên hoạt động sau khi nhấp để tập trung. Bánh xe chuột và trackpad làm việc. OS X và Windows.
  • Internet Explorer 11 Thanh cuộn ẩn. Phím mũi tên hoạt động sau khi nhấp để tập trung. Bánh xe chuột hoạt động. Các cửa sổ.
  • Thanh cuộn Safari 5.1.10 ẩn. Phím mũi tên hoạt động sau khi nhấp để tập trung. Bánh xe chuột và trackpad làm việc. HĐH X.
  • Android 4.4.4 và 4.1.2. Thanh cuộn ẩn. Chạm vào cuộn hoạt động. Đã thử trong Chrome 37.0, Firefox 32.0 và HTMLViewer trên 4.4.4 (bất kể đó là gì). Trong HTMLViewer, trang có kích thước của nội dung bị che và cũng có thể cuộn! Cuộn tương tác chấp nhận được với thu phóng trang.

1
Ghi chú không liên quan (theo như câu hỏi). Trong trường hợp này, bạn nên sử dụng @extend so với @include. Vì vậy, thay vì @mixin{}, bạn sẽ làm %size{}trong bộ chọn css, gọi @extend %size;. Mixins thường được sử dụng khi bạn kéo các biến để trả về kết quả. Giữ chỗ (còn gọi là @extend) có nghĩa là cho mã lặp lại đơn giản như thế này - nơi không cần "chức năng".
Mike Barwick

1
Tôi đã chỉnh sửa để sử dụng @extend. Kết quả có lẽ ít hiểu đối với những người không biết SCSS, nhưng cũng đủ.
Seth W. Klein

6

Tôi chỉ nghĩ rằng tôi đã chỉ ra cho bất kỳ ai khác đọc câu hỏi này rằng cài đặt overflow: hidden(hoặc tràn-y) trên bodyphần tử không che giấu thanh cuộn cho tôi.

Tôi đã phải sử dụng các htmlyếu tố.


3
Tôi không thể nhớ chính xác vì đó là một vài tháng trước, nhưng tôi tin rằng việc thiết lập tràn trên cơ thể đang hoạt động trong Chrome, nhưng không phải Firefox (hoặc ngược lại). Tuy nhiên, sử dụng thẻ HTML đã hoạt động trên cả hai.
Brad Azevedo

Từ bộ nhớ, đây có thể là một sự khác biệt chế độ quirks.
thomasrutter

5

Tôi đã viết một phiên bản WebKit với một số tùy chọn như tự động ẩn , phiên bản nhỏ , chỉ cuộn -y hoặc chỉ-x :

._scrollable{
    @size: 15px;
    @little_version_ratio: 2;
    @scrollbar-bg-color: rgba(0,0,0,0.15);
    @scrollbar-handler-color: rgba(0,0,0,0.15);
    @scrollbar-handler-color-hover: rgba(0,0,0,0.3);
    @scrollbar-coner-color: rgba(0,0,0,0);

    overflow-y: scroll;
    overflow-x: scroll;
    -webkit-overflow-scrolling: touch;
    width: 100%;
    height: 100%;

    &::-webkit-scrollbar {
        background: none;
        width: @size;
        height: @size;
    }

    &::-webkit-scrollbar-track {
        background-color:@scrollbar-bg-color;
        border-radius: @size;
    }

    &::-webkit-scrollbar-thumb {
        border-radius: @size;
        background-color:@scrollbar-handler-color;
        &:hover{
            background-color:@scrollbar-handler-color-hover;
        }
    }

    &::-webkit-scrollbar-corner {
      background-color: @scrollbar-coner-color;
    }

    &.little{
        &::-webkit-scrollbar {
            background: none;
            width: @size / @little_version_ratio;
            height: @size / @little_version_ratio;
        }
        &::-webkit-scrollbar-track {
            border-radius: @size / @little_version_ratio;
        }
        &::-webkit-scrollbar-thumb {
            border-radius: @size / @little_version_ratio;
        }
    }

    &.autoHideScrollbar{
        overflow-x: hidden;
        overflow-y: hidden;
        &:hover{
            overflow-y: scroll;
            overflow-x: scroll;
            -webkit-overflow-scrolling: touch;
            &.only-y{
                overflow-y: scroll !important;
                overflow-x: hidden !important;
            }

            &.only-x{
                overflow-x: scroll !important;
                overflow-y: hidden !important;
            }
        }
    }

    &.only-y:not(.autoHideScrollbar){
        overflow-y: scroll !important;
        overflow-x: hidden !important;
    }

    &.only-x:not(.autoHideScrollbar){
        overflow-x: scroll !important;
        overflow-y: hidden !important;
    }
}

http://codepen.io/hicTech/pen/KmKrjb


5

Sao chép mã CSS này vào mã khách hàng để ẩn thanh cuộn:

<style>

    ::-webkit-scrollbar {
       display: none;
    }

    #element::-webkit-scrollbar {
       display: none;
    }

</style>

4

HTML của tôi là như thế này:

<div class="container">
  <div class="content">
  </div>
</div>

Thêm phần này vào divnơi bạn muốn ẩn thanh cuộn:

.content {
  position: absolute;
  right: -100px;
  overflow-y: auto;
  overflow-x: hidden;
  height: 75%; /* This can be any value of your choice */
}

Và thêm nó vào container

.container {
  overflow-x: hidden;
  max-height: 100%;
  max-width: 100%;
}


3

Câu trả lời của tôi sẽ cuộn ngay cả khi overflow:hidden;sử dụng jQuery:

Ví dụ: cuộn theo chiều ngang với bánh xe chuột:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type='text/javascript' src='/js/jquery.mousewheel.min.js'></script>
<script type="text/javascript">
    $(function() {

       $("YourSelector").mousewheel(function(event, delta) {

          this.scrollLeft -= (delta * 30);
          event.preventDefault();
       });
    });
</script>

2
Scrolljacking hoạt động, nhưng hầu như luôn luôn là một trải nghiệm người dùng kém.
Brandon Anzaldi

1
trong khi điều này là có thể, với một ví dụ điển hình, có những vấn đề lớn đối với người dùng công nghệ hỗ trợ khi bạn tắt cuộn và sử dụng javascript để xử lý cuộn. Nếu bạn cũng không đặt tiêu điểm thành một yếu tố mỗi khi bạn cuộn cho người dùng, thì người dùng AT của bạn sẽ hoàn toàn bị mất. Ngoài ra, mọi người dùng hiện đã mất tất cả quyền kiểm soát tinh chỉnh đối với những gì anh ta nhìn thấy. UX rất kém để tiếp quản cuộn cho người dùng của bạn. Bên cạnh mousewheel, bạn cũng phải xử lý các phím lên / xuống, xoay trình đọc màn hình, nhấp chuột và điều khiển touchpad. Điều này trở nên khó sử dụng cho nhà phát triển và khủng khiếp cho người dùng.
ShiningLight

2

Tôi tin rằng bạn có thể thao tác nó với overflowthuộc tính CSS, nhưng chúng có hỗ trợ trình duyệt hạn chế. Một nguồn tin cho biết đó là Internet Explorer 5 (và sau này), Firefox 1.5 (và sau này) và Safari 3 (và sau này) - có thể đủ cho mục đích của bạn.

Cuộn, cuộn, cuộn có một cuộc thảo luận tốt.


1
Liên kết tốt. Thật tuyệt khi biết kết quả trên nhiều trình duyệt. Thật không may, con số cho một ảnh chụp màn hình của các kết quả đã hoàn thành bị phá vỡ
Chetabahana

-1

Tôi đã thử tất cả mọi thứ và điều tốt nhất cho giải pháp của tôi là luôn có chương trình thanh cuộn dọc, sau đó thêm một số lề âm để ẩn nó.

body {
  overflow-y: scroll;
  margin-right: -20px;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.