Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fixed header position in bootstrap 3 modal

I want to use a fixed header in my Bootstrap modal, however if I set .modal-header as position:fixed it scrolls along with the moda content. How do I create a trully fixed header in BS modal?

like image 853
Lucas Zardo Avatar asked Feb 05 '14 22:02

Lucas Zardo


People also ask

How do you fix a modal-header?

modal scrolls, so setting the . modal-header to fixed won't work. You'll need to stop the modal scrolling, set a height on the . modal-content and have that scroll instead.

How do I make my modal footer sticky?

To add sticky functionality we'll use two separate BEM modifiers: modal-header--sticky (header fixed top) modal-footer--sticky (footer fixed bottom)

How do you fix a header position in CSS?

To create a fixed top menu, use position:fixed and top:0 .

How do you position a modal?

Whenever possible, place your modal HTML in a top-level position to avoid potential interference from other elements. You'll likely run into issues when nesting a . modal within another fixed element. Once again, due to position: fixed , there are some caveats with using modals on mobile devices.


2 Answers

Instead of trying to make the header fixed, just fix the height of the body and make it scrollable. That way the header (and footer) will always be visible.

You can easily do this using the CSS3 vh unit together with calc. Both vh as calc have pretty good browser support (IE9+).

The vh unit is relative to the viewport (= browser window) height. 1 vh is 1% of the height and 100vh means 100% of the viewport height.

We just need to substract the height of the modal's header, footer and margins. It's going to be difficult it that dynamic. If those sizes are fixed, we just add all the heights.

Set either the height or max-height to calc(100vh - header+footer px).

.modal-body {     max-height: calc(100vh - 210px);     overflow-y: auto; } 

See the jsfiddle

like image 57
Arnold Daniels Avatar answered Nov 05 '22 18:11

Arnold Daniels


Here's a simple trick. Let me assume that i have to fix the div with class "fixedHeader"

Simple Jquery Way:

$('.modal').scroll(function() {      var a=$('.modal').scrollTop();      $('.fixedHeader').css('top',a+'px'); }); 

CSS

.fixedHeader {     position:fixed; } 

Whatever i have answered above is for normal bootstrap using jquery.But if someone is using angular bootstrap for the modal then

Angular

$timeout(function() {     angular.element('.modal').scroll(function() {         var a = angular.element('.modal').scrollTop();         angular.element('.fixedHeader').css('top', a + 'px');     }); }, 10); /*Put the above in modalinstance controller*/ /*timeout is necessary as you want to run the function after the modal is loaded or sometimes it may be unable to find the class '.modal' */ 

CSS

.fixedHeader {     position:fixed; } 

Make sure you have jquery dependency installed in both cases.

like image 29
ritz078 Avatar answered Nov 05 '22 19:11

ritz078