Ẩn thanh cuộn, nhưng trong khi vẫn có thể cuộn


1129

Tôi muốn có thể cuộn qua toàn bộ trang, nhưng không hiển thị thanh cuộn.

Trong Google Chrome, nó:

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

Nhưng Mozilla Firefox và Internet Explorer dường như không hoạt động như vậy.

Tôi cũng đã thử điều này trong CSS:

overflow: hidden;

Điều đó không ẩn thanh cuộn, nhưng tôi không thể cuộn nữa.

Có cách nào để tôi có thể gỡ bỏ thanh cuộn trong khi vẫn có thể cuộn toàn bộ trang không?

Chỉ với CSS hoặc HTML, xin vui lòng.

Câu trả lời:


788

Chỉ cần một bài kiểm tra đang hoạt động tốt.

#parent{
    width: 100%;
    height: 100%;
    overflow: hidden;
}

#child{
    width: 100%;
    height: 100%;
    overflow-y: scroll;
    padding-right: 17px; /* Increase/decrease this value for cross-browser compatibility */
    box-sizing: content-box; /* So the width will be 100% + 17px */
}

Fiddle làm việc

JavaScript:

Vì chiều rộng của thanh cuộn khác nhau trong các trình duyệt khác nhau, tốt hơn là xử lý nó bằng JavaScript. Nếu bạn làm như vậy Element.offsetWidth - Element.clientWidth, chiều rộng thanh cuộn chính xác sẽ hiển thị.

Fiddle làm việc JavaScript

Hoặc là

Sử dụng Position: absolute,

#parent{
    width: 100%;
    height: 100%;
    overflow: hidden;
    position: relative;
}

#child{
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: -17px; /* Increase/Decrease this value for cross-browser compatibility */
    overflow-y: scroll;
}

Fiddle làm việc

Fiddle làm việc JavaScript

Thông tin:

Dựa trên câu trả lời này, tôi đã tạo ra một plugin cuộn đơn giản .


16
Trong "câu đố làm việc" cuối cùng của bạn, tôi đã thấy quá nhiều !importantvì vậy tôi đã xóa tất cả: jsfiddle.net/5GCsJ/954
Roko C. Buljan

2
Giải pháp này không hoạt động khi chiều rộng của nội dung được đặt thành tự động. khi cuộn toàn bộ sang phải, một phần nội dung vẫn không hiển thị. Tại sao vậy? Giải pháp nào? Kiểm tra vấn đề ở đây: jsfiddle.net/50fam5g9/7 Lưu ý: chiều rộng của nội dung không thể biết trước trong trường hợp của tôi đó là lý do tại sao nó phải được đặt thành tự động.
mầm

35
Cách tiếp cận này sẽ không bao gồm tất cả các trình duyệt và sẽ rất cụ thể đối với phiên bản trình duyệt bạn đang làm việc trong quá trình phát triển.
Itsik Avidan

2
Những thanh cuộn ngang thì sao? Làm thế nào bạn có thể che giấu những người?
www139

11
Tại sao lại phức tạp và tính chiều rộng thanh cuộn? Chỉ cần đặt box-sizing: border-box; width: calc(100% + 50px);và cùng giá trị cho phần đệm. Không có trình duyệt nào có chiều rộng / chiều cao thanh cuộn 50px, vì vậy, nó chỉ đơn giản là bao gồm tất cả ...
Robert Koritnik

361

Thật dễ dàng trong WebKit, với kiểu dáng tùy chọn:

html {
    overflow: scroll;
    overflow-x: hidden;
}
::-webkit-scrollbar {
    width: 0px;  /* Remove scrollbar space */
    background: transparent;  /* Optional: just make scrollbar invisible */
}
/* Optional: show position indicator in red */
::-webkit-scrollbar-thumb {
    background: #FF0000;
}

1
đã thử điều này trong cordovaứng dụng, hoạt động tốt. đã phải áp dụng overflow:scrollcho yếu tố.
Kishor Pawar

41
Không hoạt động trên Firefox, Khá rõ ràng vì đây hoàn toàn là bộ webkit. Cảm ơn :)
Zohair

3
hoạt động xuất sắc trong các ứng dụng Electron như mong đợi vì chúng là crom. +1 cảm ơn: D
rococo

Kể từ iOS8, tính năng này không hoạt động khi được sử dụng với-webkit-overflow-scrolling: touch
aleclarson

4
nó hoạt động với chrome. nhưng không hoạt động với mozilla firefox.
đèn chùm lãng mạn

299

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


13
Đối với tôi, overflow: -moz-scrollbars-noneẩn các thanh cuộn trong Firebox nhưng cũng vô hiệu hóa cuộn. Bạn có thể cung cấp một bản demo nơi điều này đang làm việc cho bạn?
chipit24

1
Thật không may, -moz-scrollbars-nonetài sản bị xóa cho các phiên bản Firefox mới nhất: developer.mozilla.org/en-US/docs/Web/CSS/overflow
Hristo Eftimov

2
Kể từ iOS8, tính năng này không hoạt động khi được sử dụng với-webkit-overflow-scrolling: touch
aleclarson

3
Đối với Firefox lỗi thời, -moz-scrollbars-nonebạn có thể sử dụng @-moz-document url-prefix() { .container { overflow: hidden; } }. Xem stackoverflow.com/questions/952861/ cấp .
Martin dila

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

292

CẬP NHẬT:

Firefox hiện hỗ trợ ẩn thanh cuộn bằng CSS, vì vậy tất cả các trình duyệt chính hiện đã được trình bày (Chrome, Firefox, Internet Explorer, Safari, v.v.).

Chỉ cần áp dụng CSS sau đây cho phần tử bạn muốn xóa thanh cuộn khỏi:

.container {
    overflow-y: scroll;
    scrollbar-width: none; /* Firefox */
    -ms-overflow-style: none;  /* Internet Explorer 10+ */
}
.container::-webkit-scrollbar { /* WebKit */
    width: 0;
    height: 0;
}

Đây là giải pháp trình duyệt chéo ít hack nhất mà tôi hiện đang biết. Kiểm tra bản demo.


TRẢ LỜI GỐC:

Đây là một cách khác chưa được đề cập. Nó thực sự đơn giản và chỉ liên quan đến hai div và CSS. Không cần JavaScript hoặc CSS độc quyền và nó hoạt động trong tất cả các trình duyệt. Nó không yêu cầu thiết lập rõ ràng chiều rộng của thùng chứa, do đó làm cho nó lỏng.

Phương pháp này sử dụng lề âm để di chuyển thanh cuộn ra khỏi cha mẹ và sau đó cùng một lượng đệm để đẩy nội dung trở về vị trí ban đầu. Kỹ thuật này hoạt động cho cuộn dọc, ngang và cuộn hai chiều.

Bản trình diễn:

Mã ví dụ cho phiên bản dọc:

HTML:

<div class="parent">
  <div class="child">
    Your content.
  </div>
</div>

CSS:

.parent {
  width: 400px;
  height: 200px;
  border: 1px solid #AAA;
  overflow: hidden;
}

.child {
  height: 100%;
  margin-right: -50px; /* Maximum width of scrollbar */
  padding-right: 50px; /* Maximum width of scrollbar */
  overflow-y: scroll;
}

39
Tôi biết đây là một câu trả lời mới cho một câu hỏi cũ, nhưng đây phải là câu trả lời được chấp nhận ngay bây giờ. Người đàn ông thứ tốt.
Vector

3
Đây hoàn toàn là câu trả lời tốt nhất, nương tay. Bây giờ, làm thế nào để sửa đổi nó để ẩn thanh cuộn ngang?
CeeMoney

1
@CeeMoney Tôi đã thêm một bản demo ngang. Đối với các thành phần nội dung có chiều rộng cố định như hình ảnh, nó chỉ hoạt động nhưng đối với văn bản, bạn cần phải tắt gói.
Richrd

1
@Richrd - cảm ơn rất nhiều cho bản demo - hoạt động hoàn hảo. Không biết tại sao tất cả chúng ta làm cho nó khó khăn nhưng điều này rất đơn giản Tôi cảm thấy ngớ ngẩn vì đã không làm điều này trước đây.
CeeMoney

4
Cảm ơn bạn @Richrd! Tôi rất vui vì tôi đã cuộn đến câu trả lời của bạn. Nếu SO có một số "câu trả lời được chấp nhận", tôi chắc chắn sẽ sử dụng nó ngay bây giờ.
Martin D

78

Sử dụng:

<div style='overflow:hidden; width:500px;'>
   <div style='overflow:scroll; width:508px'>
      My scroll-able area
   </div>
</div>

Đây là một mẹo để phần nào trùng lặp thanh cuộn với một div chồng chéo mà không có bất kỳ thanh cuộn nào:

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

Điều này chỉ dành cho trình duyệt WebKit ... Hoặc bạn có thể sử dụng nội dung CSS dành riêng cho trình duyệt (nếu có trong tương lai). Mỗi trình duyệt có thể có một thuộc tính cụ thể và khác nhau cho các thanh tương ứng của chúng.

Đối với Microsoft Edge sử dụng: -ms-overflow-style: -ms-autohiding-scrollbar;hoặc -ms-overflow-style: none;như mỗi MSDN .

Không có tương đương với Firefox. Mặc dù có một plugin jQuery để đạt được điều này, http://manos.malihu.gr/tuts/jquery_custom_scrollbar.html


ictacademie.info/oussamaelbachiri trang web này @Oussama Dulk sử dụng phương tiện media = 'screen' và sau đó ':: - webkit-scrollbar' cho css
Arpit Singh

Và các thuộc tính css cụ thể là gì?
Oussama el Bachiri

hoặc bố cục hacky hoặc jquery là một lựa chọn thay thế
Arpit Singh

Giải pháp đầu tiên của bạn mang đến cho tôi vấn đề này s24.postimg.org/idul8zx9w/Naamloos.jpg Và ý của bạn là gì khi bố trí hacky @ArpitSingh
Oussama el Bachiri

4
Điều sau đây cho phép tôi kích hoạt tính năng cuộn tự nhiên trong Cordova với jQuery Mobile 1.4 trên iOS7 & iOS8 // CSS ::-webkit-scrollbar { display: none; } .ui-content { -webkit-overflow-scrolling: touch; } // jQuery Mobile onMobileInit () $.mobile.touchOverflowEnabled = true;
Ryan Williams

33

Câu trả lời này không bao gồm mã, vì vậy đây là giải pháp từ trang :

Theo trang, cách tiếp cận này không cần biết chiều rộng của thanh cuộn trước thời gian để hoạt động và giải pháp cũng hoạt động cho tất cả các trình duyệt, và có thể xem tại đây .

Điều tốt là bạn không bị buộc phải sử dụng phần đệm hoặc chênh lệch chiều rộng để ẩn thanh cuộn.

Đây cũng là zoom an toàn. Các giải pháp đệm / chiều rộng hiển thị thanh cuộn khi thu phóng đến mức tối thiểu.

Sửa lỗi Firefox: http://jsbin.com/mugiqoveko/1/edit?output

.element,
.outer-container {
  width: 200px;
  height: 200px;
}
.outer-container {
  border: 5px solid purple;
  position: relative;
  overflow: hidden;
}
.inner-container {
  position: absolute;
  left: 0;
  overflow-x: hidden;
  overflow-y: scroll;
  padding-right: 150px;
}
.inner-container::-webkit-scrollbar {
  display: none;
}
<div class="outer-container">
  <div class="inner-container">
    <div class="element">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer vehicula quam nibh, eu tristique tellus dignissim quis. Integer condimentum ultrices elit ut mattis. Praesent rhoncus tortor metus, nec pellentesque enim mattis nec. Nulla vitae turpis ut
      dui consectetur pellentesque quis vel est. Curabitur rutrum, mauris ut mollis lobortis, sem est congue lectus, ut sodales nunc leo a libero. Cras quis sapien in mi fringilla tempus condimentum quis velit. Aliquam id aliquam arcu. Morbi tristique
      aliquam rutrum. Duis tincidunt, orci suscipit cursus molestie, purus nisi pharetra dui, tempor dignissim felis turpis in mi. Vivamus ullamcorper arcu sit amet mauris egestas egestas. Vestibulum turpis neque, condimentum a tincidunt quis, molestie
      vel justo. Sed molestie nunc dapibus arcu feugiat, ut sollicitudin metus sagittis. Aliquam a volutpat sem. Quisque id magna ultrices, lobortis dui eget, pretium libero. Curabitur aliquam in ante eu ultricies.
    </div>
  </div>
</div>


Điều này sẽ không hoạt động cho tất cả các trình duyệt ... Chỉ các trình duyệt webkit. Bạn đang sử dụng bộ chọn dành riêng cho webkit::-webkit-scrollbar {}
Tiền tố

Tôi đã thử nghiệm nó trong tất cả các trình duyệt mới trước khi tôi trả lời câu hỏi. Ngoài ra FF. Nó đã xảy ra một số thay đổi trong FF?
Timo Kähkönen

Tôi cập nhật câu trả lời. Có vẻ như thêm padding-right: 150px;sửa chữa nó. Đã thử nghiệm trong FF, Chrome, Safari và Edge. Hoạt động ở mức thu phóng thấp do phần đệm bên phải lớn.
Timo Kähkönen

2
Hỗ trợ Edge, IE 11, IE10 (có thể thấp hơn) html { -ms-overflow-style: none;}. Trong các trình duyệt này, không cần sử dụng padding-hack.
Timo Kähkönen

Phải sử dụng câu trả lời của @ Timo và overflow-y: scrollđể có hành vi cuộn nhưng bị ẩn (giống như Chrome) để làm cho nó hoạt động trên Edge23.
jojo

21

Chỉ cần sử dụng ba dòng sau và vấn đề của bạn sẽ được giải quyết:

#liaddshapes::-webkit-scrollbar {
    width: 0 !important;
}

Trong đó liaddshapes là tên của div nơi cuộn đến.


Chỉ cho tôi vấn đề trong fiddle
Innodel

1
Dễ dàng và hữu ích, cảm ơn! Tôi đã sử dụng {display: none} thay vì {width: 0;} và cũng hoạt động
Santi Nunez

2
Không hoạt động trên MS Edge hoặc Firefox.
Dpedrinha

18

Điều này làm việc cho tôi trình duyệt chéo. Tuy nhiên, điều này không ẩn các thanh cuộn gốc trên các trình duyệt di động.

Trong SCSS

.hide-native-scrollbar {
  scrollbar-width: none; /* Firefox 64 */
  -ms-overflow-style: none; /* Internet Explorer 11 */
  &::-webkit-scrollbar { /** WebKit */
    display: none;
  }
}

Trong CSS

.hide-native-scrollbar {
  scrollbar-width: none; /* Firefox 64 */
  -ms-overflow-style: none; /* Internet Explorer 11 */
}
.hide-native-scrollbar::-webkit-scrollbar { /** WebKit */
  display: none;
}

Các khối lồng nhau ( {}) có nghĩa là gì? Làm thế nào để được giải thích? Và cái &gì? Có lẽ công phu trong câu trả lời của bạn?
Peter Mortensen

Đó là một điều SASS (rõ ràng, LESS quá): css-tricks.com/the-sass-ampersand
vipatron

@PeterMortensen Tôi vừa thấy bình luận của bạn bây giờ, &::-webkit-scrollbartrở thành .hide-native-scrollbar::-webkit-scrollbar { }CSS
Murhaf Sousli

chỉ làm { width: 0; height: 0;}cho :: - webkit-scrollbar thay vì display: nonecho iOS.
adriendenat

Trong FF71 điều này chặn tất cả các cuộn.
gen b.

11

Phần sau đây hoạt động với tôi trên Microsoft, Chrome và Mozilla cho một yếu tố div cụ thể:

div.rightsidebar {
    overflow-y: auto;
    scrollbar-width: none;
    -ms-overflow-style: none;
}
div.rightsidebar::-webkit-scrollbar { 
    width: 0 !important;
}

lưu ý rằng scrollbar-width(chỉ FF) được gắn cờ là "thử nghiệm"
cimak

Có @cimak, nhưng trên FF bạn có thể ẩn nó với bất kỳ vấn đề nào, vì vậy nó thực sự chỉ được sử dụng cho Chrome.
Meloman

9

HTML:

<div class="parent">
    <div class="child">
    </div>
</div>

CSS:

.parent{
    position: relative;
    width: 300px;
    height: 150px;
    border: 1px solid black;
    overflow: hidden;
}

.child {
    height: 150px;   
    width: 318px;
    overflow-y: scroll;
}

Áp dụng CSS phù hợp.

Kiểm tra nó ở đây (được thử nghiệm trong Internet Explorer và Firefox).


8

Kể từ ngày 11 tháng 12 năm 2018 (Firefox 64 trở lên), câu trả lời cho câu hỏi này thực sự rất đơn giản vì Firefox 64+ hiện thực hiện thông số Kiểu dáng Thanh cuộn CSS .

Chỉ cần sử dụng CSS sau đây:

scrollbar-width: none;

Liên kết ghi chú phát hành Firefox 64 tại đây .


3
Điều này là rất tốt đẹp để biết! Có vẻ như các trình duyệt đang thực sự đạt được tiến bộ, haha!
Oussama el Bachiri

7

Sử dụng:

CSS

#subparent {
    overflow: hidden;
    width: 500px;
    border: 1px rgba(0, 0, 0, 1.00) solid;
}

#parent {
    width: 515px;
    height: 300px;
    overflow-y: auto;
    overflow-x: hidden;
    opacity: 10%;
}

#child {
    width: 511px;
    background-color: rgba(123, 8, 10, 0.42);
}

HTML

<body>
    <div id="subparent">
        <div id="parent">
            <div id="child">
                <!- Code here for scroll ->
            </div>
        </div>
     </div>
</body>

Không chắc chắn tại sao điều này bị hạ cấp, nhưng tôi chỉ nâng cấp nó vì nó đi đúng hướng, các giải pháp khác không thực sự hoạt động tốt trong trường hợp của tôi. tràn-x: ẩn; + tràn-y: cuộn; là những gì đã lừa, cùng với chiều rộng> 100% (110% trong trường hợp của tôi hoạt động tốt).
dAngelov

1
đó là điều tương tự như cách làm nổi bật nhất: cố gắng ẩn thanh cuộn. Điều này không lý tưởng vì nó thay đổi theo trình duyệt
mwm

6

Sử dụng

function reloadScrollBars() {
    document.documentElement.style.overflow = 'auto';  // Firefox, Chrome
    document.body.scroll = "yes"; // Internet Explorer only
}

function unloadScrollBars() {
    document.documentElement.style.overflow = 'hidden';  // firefox, chrome
    document.body.scroll = "no"; // Internet Explorer only
}

Gọi các hàm này cho bất kỳ điểm nào bạn muốn tải hoặc dỡ hoặc tải lại thanh cuộn. Nó vẫn có thể cuộn trong Chrome khi tôi đã thử nghiệm nó trong Chrome, nhưng tôi không chắc về các trình duyệt khác.


6

Điều này làm việc cho tôi:

scroll-content {
    overflow-x: hidden;
    overflow-y: scroll;
}

scroll-content::-webkit-scrollbar {
    width: 0;
}

5

Trên các trình duyệt hiện đại, bạn có thể sử dụng wheel event:

// Content is the element you want to apply the wheel scroll effect to
content.addEventListener('wheel', function(e) {
    const step = 100; // How many pixels to scroll

    if (e.deltaY > 0) // Scroll down
        content.scrollTop += step;
    else // Scroll up
        content.scrollTop -= step;
});

Đây là câu trả lời tôi đang tìm kiếm. Cảm ơn. Tôi đã sử dụng overflow: hiddenvà mã này, cho mat-card-content(trong góc 5, tất nhiên) có thể cuộn được và những điều này đã giải quyết vấn đề của tôi. Lưu ý: Tôi đã sử dụng e.deltaYnhư của tôi stepvà nó hoạt động như cuộn thông thường, vì vậy tôi nghĩ để cuộn bình thường nhưng với thanh cuộn bị ẩn, đây là kết hợp tốt nhất.
imans77

1
trang liên kết ở đây cảnh báo rằng phương pháp này không phù hợp?
jnnnnn

5

Vấn đề của tôi: Tôi không muốn bất kỳ phong cách nào trong nội dung HTML của mình. Tôi muốn cơ thể của mình có thể cuộn trực tiếp mà không cần bất kỳ thanh cuộn nào và chỉ có một cuộn dọc, hoạt động với các lưới CSS cho bất kỳ kích thước màn hình nào.

Các giải pháp đệm tác động giá trị kích thước hộp hoặc các giải pháp lề, chúng hoạt động với kích thước hộp: hộp nội dung .

Tôi vẫn cần chỉ thị "-moz-scrollbars-none", và như gdoron và Mr_Green, tôi phải ẩn thanh cuộn. Tôi đã thử -moz-transform-moz-padding-start, chỉ tác động đến Firefox, nhưng có những tác dụng phụ nhạy cảm cần quá nhiều công việc.

Giải pháp này hoạt động cho nội dung thân HTML với kiểu "display: Grid" và nó rất nhạy.

/* Hide HTML and body scroll bar in CSS grid context */
html, body {
  position: static; /* Or relative or fixed ... */
  box-sizing: content-box; /* Important for hidding scrollbar */
  display: grid; /* For CSS grid */

  /* Full screen */
  width: 100vw;
  min-width: 100vw;
  max-width: 100vw;
  height: 100vh;
  min-height: 100vh;
  max-height: 100vh;
  margin: 0;
  padding: 0;
}

html {
  -ms-overflow-style: none;  /* Internet Explorer 10+ */
  overflow: -moz-scrollbars-none; /* Should hide the scroll bar */
}

/* No scroll bar for Safari and Chrome */
html::-webkit-scrollbar,
body::-webkit-scrollbar {
  display: none; /* Might be enough */
  background: transparent;
  visibility: hidden;
  width: 0px;
}

/* Firefox only workaround */
@-moz-document url-prefix() {
  /* Make HTML with overflow hidden */
  html {
    overflow: hidden;
  }

  /* Make body max height auto */
  /* Set right scroll bar out the screen  */
  body {
    /* Enable scrolling content */
    max-height: auto;

    /* 100vw +15px: trick to set the scroll bar out the screen */
    width: calc(100vw + 15px);
    min-width: calc(100vw + 15px);
    max-width: calc(100vw + 15px);

    /* Set back the content inside the screen */
    padding-right: 15px;
  }
}

body {
  /* Allow vertical scroll */
  overflow-y: scroll;
}

4

Thêm phần đệm vào bên trong div, như trong câu trả lời hiện được chấp nhận, sẽ không hoạt động nếu vì lý do nào đó bạn muốn sử dụng box-model: border-box.

Điều gì làm việc trong cả hai trường hợp là tăng chiều rộng của bên trong divlên 100% cộng với chiều rộng của thanh cuộn (giả sử overflow: hiddentrên div bên ngoài).

Ví dụ: trong CSS:

.container2 {
    width: calc(100% + 19px);
}

Trong JavaScript, trình duyệt chéo:

var child = document.getElementById('container2');
var addWidth = child.offsetWidth - child.clientWidth + "px";
child.style.width = 'calc(100% + ' + addWidth + ')';

4

Đây là cách tôi làm cho cuộn ngang; chỉ CSS và hoạt động tốt với các khung như Bootstrap / col- *. Nó chỉ cần thêm hai divs và cha mẹ với một widthhoặc một max-widthbộ:

Bạn có thể chọn văn bản để làm cho nó cuộn hoặc cuộn nó bằng ngón tay nếu bạn có màn hình cảm ứng.

.overflow-x-scroll-no-scrollbar {
    overflow: hidden;
}
.overflow-x-scroll-no-scrollbar div {
    overflow-x: hidden;
    margin-bottom: -17px;
    overflow-y: hidden;
    width: 100%;
}
.overflow-x-scroll-no-scrollbar div * {
    overflow-x: auto;
    width: 100%;
    padding-bottom: 17px;
    white-space: nowrap;
    cursor: pointer
}

/* The following classes are only here to make the example looks nicer */
.row {
    width: 100%
}
.col-xs-4 {
    width: 33%;
    float: left
}
.col-xs-3 {
    width:25%;
    float:left
}
.bg-gray {
    background-color: #DDDDDD
}
.bg-orange {
    background-color:#FF9966
}
.bg-blue {
    background-color: #6699FF
}
.bg-orange-light{
    background-color: #FFAA88
}
.bg-blue-light{
    background-color: #88AAFF
}
<html><body>
  <div class="row">
    <div class="col-xs-4 bg-orange">Column 1</div>
    <div class="col-xs-3 bg-gray">Column 2</div>
    <div class="col-xs-4 bg-blue">Column 3</div>
  </div>
  <div class="row">
    <div class="col-xs-4 bg-orange-light">Content 1</div>
    <div class="col-xs-3 overflow-x-scroll-no-scrollbar">
      <div>
        <div>This content too long for the container, so it needs to be hidden but scrollable without scrollbars</div>
      </div>
    </div>
    <div class="col-xs-4 bg-blue-light">Content 3</div>
  </div>
</body></html>

Phiên bản ngắn dành cho người lười biếng:

.overflow-x-scroll-no-scrollbar {
    overflow: hidden;
}
.overflow-x-scroll-no-scrollbar div {
  overflow-x: hidden;
  margin-bottom: -17px;
  overflow-y: hidden;
  width: 100%;
}
.overflow-x-scroll-no-scrollbar div * {
  overflow-x: auto;
  width: 100%;
  padding-bottom: 17px;
  white-space: nowrap;
  cursor:pointer
}

/* The following classes are only here to make the example looks nicer */
.parent-style {
    width: 100px;
    background-color: #FF9966
}
<div class="parent-style overflow-x-scroll-no-scrollbar">
  <div>
    <div>This content too long for the container, so it needs to be hidden but scrollable without scrollbars</div>
  </div>
</div>


Cảm ơn, tôi đã cố gắng, nó hoạt động tuyệt vời. Một điều là tốt hơn là thay đổi margin-bottomđể được padding-bottomnhưng với cùng một giá trị. Điều này sẽ không ăn lên dưới không gian cho phần tử ở phía dưới. Nó ngăn ngừa chồng chéo.
haxpor 28/03/2017

@haxpor Điều margin-bottomnày là tiêu cực, tôi nghĩ không thể thay đổi thành a padding-bottom, không thể xử lý các giá trị âm
Jean

4

Kiểu SASS sau sẽ làm cho thanh cuộn của bạn trong suốt trên hầu hết các trình duyệt (Firefox không được hỗ trợ):

.hide-scrollbar {
  scrollbar-width: thin;
  scrollbar-color: transparent transparent;

  &::-webkit-scrollbar {
    width: 1px;
  }

  &::-webkit-scrollbar-track {
    background: transparent;
  }

  &::-webkit-scrollbar-thumb {
    background-color: transparent;
  }
}

3

Tôi tình cờ thử các giải pháp trên trong dự án của mình và vì một số lý do tôi không thể ẩn thanh cuộn do định vị div. Do đó, tôi quyết định ẩn thanh cuộn bằng cách giới thiệu một div bao phủ nó một cách hời hợt. Ví dụ dưới đây dành cho thanh cuộn ngang:

<div id="container">
  <div id="content">
     My content that could overflow horizontally
  </div>
  <div id="scroll-cover">
     &nbsp; 
  </div>
</div>

CSS tương ứng như sau:

#container{
   width: 100%;
   height: 100%;
   overflow: hidden;
   position: relative;
}

#content{
  width: 100%;
  height: 100%;
  overflow-x: scroll;
}
#scroll-cover{
  width: 100%;
  height: 20px;
  position: absolute;
  bottom: 0;
  background-color: #fff; /*change this to match color of page*/
}

3

Điều này sẽ ở cơ thể:

<div id="maincontainer" >
<div id="child">this is the 1st step</div>
<div id="child">this is the 2nd step</div>
<div id="child">this is the 3rd step</div>

Và đây là CSS:

#maincontainer
{
    background: grey;
    width: 101%;
    height: 101%;
    overflow: auto;
    position: fixed;
}

#child
{
    background: white;
    height:500px;
}

3

Đây là một giải pháp siêu viêm mà không cần làm việc cho tất cả các trình duyệt ...

Đánh dấu như sau và cần phải ở trong một cái gì đó có định vị tương đối (và chiều rộng của nó phải được đặt, ví dụ 400 pixel):

<div class="hide-scrollbar">
    <div class="scrollbar">
        <div class="scrollbar-inner">

        </div>
    </div>
</div>

CSS:

.hide-scrollbar {
    overflow: hidden;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}

.scrollbar {
    overflow-y: scroll;
    position: absolute;
    top: 0;
    left: 0;
    right: -50px;
    bottom: 0;
}

.scrollbar-inner {
    width: 400px;
}

3

Các perfect-scrollbarPlugin có vẻ là con đường để đi, xem: https://github.com/noraesae/perfect-scrollbar

Đây là một giải pháp dựa trên JavaScript được tài liệu tốt và đầy đủ cho vấn đề thanh cuộn.

Trang demo: http://noraesae.github.io/perinf-scrollbar/


2
Tôi không thể thấy điều này liên quan đến câu hỏi như thế nào?
Chris Nevill

3
Được nhìn chằm chằm vào thanh cuộn hoàn hảo trong 2 phút mà không có sự tiết lộ ngay lập tức về cách sử dụng nó để ẩn thanh cuộn . Nếu bạn mở rộng câu trả lời của mình về chủ đề đó, tôi chắc chắn bạn sẽ nhận được nhiều lượt ủng hộ hơn.
Christiaan Westerbeek

3

Bạn có thể sử dụng mã bên dưới để ẩn thanh cuộn, nhưng trong khi vẫn có thể cuộn:

.element::-webkit-scrollbar { 
    width: 0 !important 
}

2

Một cách tiếp cận hacky khác là làm overflow-y: hiddenvà sau đó cuộn thủ công phần tử với thứ như thế này:

function detectMouseWheelDirection(e) {
  var delta = null, direction = false;
  if (!e) { // If the event is not provided, we get it from the window object
    e = window.event;
  }
  if (e.wheelDelta) { // Will work in most cases
    delta = e.wheelDelta / 60;
  } else if (e.detail) { // Fallback for Firefox
    delta = -e.detail / 2;
  }
  if (delta !== null) {
    direction = delta > 0 ? -200 : 200;
  }
  return direction;
}

if (element.addEventListener) {
  element.addEventListener('DOMMouseScroll', function(e) {
    element.scrollBy({
      top: detectMouseWheelDirection(e),
      left: 0,
      behavior: 'smooth'
    });
  });
}

Có một bài viết tuyệt vời về cách phát hiện và xử lý onmousewheelcác sự kiện trong blog của deepmikoto . Điều này có thể làm việc cho bạn, nhưng nó chắc chắn không phải là một giải pháp thanh lịch.


2

Tôi chỉ muốn chia sẻ một đoạn kết hợp để ẩn thanh cuộn mà tôi sử dụng khi phát triển. Nó là một tập hợp của một số đoạn được tìm thấy trên Internet phù hợp với tôi:

.container {
    overflow-x: scroll; /* For horiz. scroll, otherwise overflow-y: scroll; */

    -ms-overflow-style: none;
    overflow: -moz-scrollbars-none;
    scrollbar-width: none;
}


.container::-webkit-scrollbar {
    display: none;  /* Safari and Chrome */
}

2

Để ẩn các thanh cuộn cho các thành phần có sử dụng nội dung tràn.

.div{

  scrollbar-width: none; /* The most elegant way for Firefox */

}    

Sự hỗ trợ trên thực tế không tồn tại ngoại trừ FF như bạn đã đề cập là quá ít so với những gì OP yêu cầu. Kiểm tra caniuse.com/#feat=mdn-css_properties_scrollbar-width
Adrien

@Adrien Vâng, câu hỏi ban đầu nói rằng họ có một giải pháp cho các trình duyệt khác. (Nhưng Mozilla Firefox và Internet Explorer dường như không hoạt động như vậy), ông nói, đó là lý do tôi đưa ra Giải pháp Firefox.
Alvin Moyo

Tôi thấy điều này hoạt động tốt khi kết hợp với tương đương: div :: - webkit-scrollbar {display: none; } cho Webkit / Chrome.
Hội trường Sean

1

Một bí quyết làm việc đơn giản khác :

#maincontainer {
    background: orange;
    width: 200px;
    height: 200px;
    overflow: hidden;
}

#childcontainer {
    background: yellow;
    position: relative;
    width: 200px;
    height: 200px;
    top: 20px;
    left: 20px;
    overflow: auto;
}

Tràn ẩn trên bộ chứa cha mẹ và tự động tràn trên bộ chứa con. Đơn giản.


Điều này không ẩn thanh cuộn, nó chỉ đẩy nó ra khỏi tầm nhìn với giá trị "bên trái".
robertmiles3

@ robertmiles3 không phải là điều tương tự? trốn và không thể xem?
Bryan Willis

1
@ robertmiles3 câu trả lời được chọn ở trên thực hiện điều tương tự từ bên phải. Có vẻ như tất cả các giải pháp đều bị hack cho đến khi FIrefox quyết định cho phép CSS ẩn thanh cuộn một lần nữa. blogs.msdn.com/b/kurlak/archive/2013/11/03/...
geoyws

Tôi phải đồng ý. Đây là một giải pháp tương tự được đề xuất bởi câu trả lời được chấp nhận. Nếu nó hoạt động nó hoạt động. được nâng cấp
JSON

1

Giải pháp phức tạp này hoạt động ngay cả trên trình duyệt web IE cũ

Đó là một cách giải quyết cho [ thanh cuộn dọc ]

<html>
<head>
<style>
html,body{
         overflow:-moz-scrollbars-vertical;
         overflow-x:hidden;
         overflow-y:hidden;
         height:100%;
         margin:0 0 0 0
         }
</style>
</head>
<body id=body
      style="overflow:auto;
             height:100%" 
      onload="document.getElementById('body').style.width=document.body.offsetWidth+20+'px'">
//your stuff here
</body> 
</html>

Hãy thử nó: jsfiddle


0

Chỉ cần đặt chiều rộng của chiều rộng của trẻ em thành 100%, đệm thành 15 pixel, overflow-xđể cuộn và overflow:hiddencho cha mẹ và bất kỳ chiều rộng nào bạn muốn.

Nó hoạt động hoàn hảo trên tất cả các trình duyệt chính, bao gồm Internet Explorer và Edge ngoại trừ Internet Explorer 8 trở xuống.

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.