Overflow Scroll css không hoạt động trong div


124

Tôi đang tìm giải pháp CSS / Javascript cho vấn đề cuộn trang HTML của mình.

Tôi có ba div chứa div, tiêu đề và div trình bao bọc,

Tôi cần một thanh cuộn dọc trong div trình bao bọc, chiều cao phải là tự động hoặc 100% dựa trên nội dung.

Tiêu đề phải được sửa và tôi không muốn có toàn bộ thanh cuộn nên tôi đã đưa overflow:hiddenvào thẻ body,

Tôi cần thanh cuộn dọc trong div trình bao bọc của mình. Làm thế nào tôi có thể sửa lỗi này?

HTML

<div id="container">

    <div class="header"></div>

    <div class="wrapper">
        <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus porta tortor sed metus. Nam pretium. Sed tempor. Integer ullamcorper, odio quis porttitor sagittis, nisl erat tincidunt massa, eu eleifend eros nibh sollicitudin est. Nulla dignissim. Mauris sollicitudin, arcu id sagittis placerat, tellus mauris egestas felis, eget interdum mi nibh vel lorem. Aliquam egestas hendrerit massa. Suspendisse sed nunc et lacus feugiat hendrerit. Nam cursus euismod augue. Aenean vehicula nisl eu quam luctus adipiscing. Nunc consequat justo pretium orci. Mauris hendrerit fermentum massa. Aenean consectetuer est ut arcu. Aliquam nisl massa, blandit at, accumsan sed, porta vel, metus. Duis fringilla quam ut eros.</p>
        <!-- Lots more paragraphs-->
    </div>

</div>

CSS

body{ margin:0; padding:0; overflow:hidden; height:100%}
#container { width:1000px; margin:0 auto;}
.header { width:1000px; height:30px; background-color:#dadada;}
.wrapper{ width:1000px; overflow:scroll; position:relative;}

Vui lòng tham khảo JS Fiddle này

Câu trả lời:


152

Bạn đang thiếu thuộc tính heightCSS.

Thêm nó, bạn sẽ nhận thấy rằng thanh cuộn sẽ xuất hiện.

.wrapper{ 
    // width: 1000px;
    width:600px; 
    overflow-y:scroll; 
    position:relative;
    height: 300px;
}

JSFIDDLE

Từ tài liệu :

overflow-y

Thuộc tính CSSflow-y chỉ định cắt nội dung, hiển thị thanh cuộn hoặc hiển thị nội dung tràn của phần tử cấp khối khi nó tràn ở các cạnh trên cùng và dưới cùng.


8
làm thế nào để làm cho độ cao dừng lại ở khung nhìn? Tôi không muốn hardcode bằng pixel, vì nó does't làm việc cho các kích cỡ màn hình khác nhau
djechlin

@djechlin Đặt câu hỏi cho điều đó. Có lẽ bạn có thể sử dụng giá trị phần trăm hoặc dislpay: fixed... Tôi không chắc bạn đang cố gắng làm gì.
Ionică Bizău

12
sử dụng thuộc tính chiều cao khung nhìn: height: 100vh
Joseph

32

Giải pháp là thêm height:100%;vào tất cả các phần tử cha của bạn .wrapper-div. Vì thế:

html{
    height: 100%;
}

body{ 
    margin:0;
    padding:0;
    overflow:hidden;
    height:100%;
}

#container{
    width:1000px;
    margin:0 auto;
    height:100%;
}

24

Nếu bạn thêm chiều cao trong .wrapperlớp thì cuộn của bạn đang hoạt động, không có heightcuộn thì không hoạt động.

Hãy thử http://jsfiddle.net/ZcrFr/3/ này

CSS:

.wrapper {
  position: relative;
  overflow: scroll;
  width: 1000px;
  height: 800px;
}

4
Cảm ơn, nhưng yêu cầu thực tế của tôi là tôi không nên cung cấp bất kỳ chiều cao nào có thể là 100% hoặc tự động, nội dung phải theo cửa sổ trình duyệt, bạn có thể giải pháp nào khác trong CSS / JAVASCRIPT không?
user2493730

2
lý do tại sao nó không làm việc khi tôi được chiều cao tính bằng tỷ lệ phần trăm nhưheight:100%
Mã hóa thế giới

7

Bạn đã không cung cấp chiều cao cho div. Vì vậy, nó sẽ tự động giãn ra khi nhiều nội dung được thêm vào. Cung cấp cho nó một chiều cao cố định và các thanh cuộn sẽ hiển thị.


2
Cảm ơn, nhưng yêu cầu thực tế của tôi là tôi không nên cung cấp bất kỳ chiều cao nào có thể là 100% hoặc tự động, nội dung phải theo cửa sổ trình duyệt, bạn có thể giải pháp nào khác trong CSS / JAVASCRIPT không?
user2493730

1
Cung cấp cho nó chiều cao là 100%. Sau đó, bạn đáp ứng các yêu cầu cho tràn và chính bạn.
Nick

6

Nếu bạn đặt chiều cao tĩnh cho tiêu đề của mình, bạn có thể sử dụng chiều cao đó để tính toán kích thước của trình bao bọc của bạn.

http://jsfiddle.net/ske5Lqyv/5/

Sử dụng mã mẫu của bạn, bạn có thể thêm CSS này:

html, body {
  margin: 0px;
  padding: 0px;
  height: 100%;
}

#container {
  height: 100%;
}

.header {
  height: 64px;
  background-color: lightblue;
}

.wrapper {
  height: calc(100% - 64px);
  overflow-y: auto;
}

Hoặc, bạn có thể sử dụng flexbox để có cách tiếp cận năng động hơn http://jsfiddle.net/19zbs7je/3/

<div id="container">
  <div class="section">
    <div class="header">Heading</div>
    <div class="wrapper">
      <p>Large Text</p>
    </div>
  </div>
</div>

html, body {
  margin: 0px;
  padding: 0px;
  height: 100%;
}

#container {
  display: flex;
  flex-direction: column;
  height: 100%;
}

.section {
  flex-grow: 1;
  display: flex;
  flex-direction: column;
  min-height: 0;
}

.header {
  height: 64px;
  background-color: lightblue;
  flex-shrink: 0;
}

.wrapper {
  flex-grow: 1;
  overflow: auto;
  min-height: 100%; 
}

Và nếu bạn muốn trở nên độc đáo hơn nữa, hãy xem câu trả lời của tôi cho câu hỏi này https://stackoverflow.com/a/52416148/1513083


4

Tôi đã chỉnh sửa của bạn: Fiddle

html, body{ margin:0; padding:0; overflow:hidden; height:100% }
.header { margin: 0 auto; width:500px; height:30px; background-color:#dadada;}
.wrapper{ margin: 0 auto; width:500px; overflow:scroll; height: 100%;}

Giải pháp cho thẻ html là 100%. Tôi cũng đã xóa div vùng chứa. Bạn không cần nó khi bố cục của bạn vẫn như thế này.


Cảm ơn nó đang hoạt động, nhưng tôi đang sử dụng khái niệm coder slider của nó có div container chính, khu vực tiêu đề tôi có ba div nên được sửa, khu vực nội dung bên trong trình bao bọc chỉ nên cuộn, Bạn đã nói xóa vùng chứa, vậy làm cách nào để tôi có thể khắc phục sự cố này theo cách khác làm ơn?
user2493730

1

Tôi muốn nhận xét về @Ionica Bizau, nhưng tôi không có đủ danh tiếng.
Để trả lời câu hỏi của bạn về mã javascript:
Điều bạn cần làm là lấy chiều cao phần tử gốc (trừ đi bất kỳ phần tử nào chiếm dung lượng) và áp dụng điều đó cho các phần tử con.

function wrapperHeight(){
    var height = $(window).outerHeight() - $('#header').outerHeight(true);
    $('.wrapper').css({"max-height":height+"px"});      
}


Cửa sổ ghi chú có thể được thay thế bằng ".container" nếu cửa sổ đó không có con nổi hoặc có bản sửa lỗi để tính được chiều cao chính xác. Giải pháp này sử dụng jQuery.


Đó là một vấn đề CSS tại sao lại sử dụng Javascript?
GlennG

Bởi vì OP đã yêu cầu giải pháp CSS / Javascript. Đã có một giải pháp CSS tốt và tôi tin vào thời điểm đó OP đã hỏi trong một bình luận về câu trả lời được bình chọn nhiều nhất về cách thực hiện nó trong JS. Nhưng đã vài năm rồi nên chắc mình nhớ nhầm ;-)
Anima-t3d

1

Đối với Angular2 + Material2 + Sidenav, bạn cần thực hiện những việc sau:

 ngAfterViewInit() {
   this.element.nativeElement.getElementsByClassName('md-sidenav-content')[0].style.overflow = 'hidden'; 
  }

2
bất kỳ chi tiết hơn về điều đó? tại sao không thể bạn chỉ cần đặt overflow:hiddencsstrong trường hợp của material2?
kuncevic.dev

0

trong trường hợp của tôi, chỉ height: 100vhkhắc phục sự cố với hành vi mong đợi


-1

Hãy thử điều này cho thanh cuộn dọc:

overflow-y:scroll;

Nhưng nếu bạn đang sử dụng máy Mac chỉ có trackpad, điều này cũng sẽ không hoạt động.
RR
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.