2016-06-12 31 views
2

我的目標得到一個HTML頁面,看起來像下面對齊三個按鈕,使它們在兩個引導超大屏幕容器

Goal

這裏的底部是一個MVCE

function resizeJumbotronToHaveEqualHeights() { 
 
    var elements = $(".js-cap-jumbotron") 
 
    var max_height = _.max(_.map(elements, function (element) { return $(element).height() })) 
 
    _.map(elements, function (element) { $(element).height(max_height) }) 
 
} 
 

 
function positionButtonsTowardsBottom() { 
 
    var buttons = $(".js-cap-jumbotron-bottom") 
 
    _.map(buttons, function(element) { 
 
     var button = $(element) 
 
     var parentContainer = button.parents(".js-cap-jumbotron") 
 
     var siblingContainer = button.siblings(".upper-cap-jumbotron") 
 
     var childContainers = _.toArray(button.parentsUntil(".js-cap-jumbotron")) 
 
     var newTop = $(parentContainer).outerHeight() 
 
     childContainers.forEach(function(container) { 
 
      newTop -= $(container).position().top 
 
     }) 
 
     newTop -= button.outerHeight(true); 
 
     newTop -= siblingContainer.outerHeight(true); 
 
     button.css({ "margin-top": newTop + "px" }) 
 
    }) 
 
} 
 

 
const onWindowResize = function() { 
 
    const width = $(window).width(); 
 
    console.log(width) 
 
    if (width > 992) { 
 
     var elements = $(".js-cap-jumbotron") 
 
     elements.css('height', 'auto'); 
 
     resizeJumbotronToHaveEqualHeights() 
 
     positionButtonsTowardsBottom() 
 
    } else { 
 
     var elements = $(".js-cap-jumbotron") 
 
     elements.css('height', 'auto'); 
 
     var buttons = $(".js-cap-jumbotron-bottom") 
 
     buttons.css({"margin-top": "auto"}) 
 
    } 
 
}; 
 

 
var throttledOnWindowResize = _.throttle(onWindowResize, 100, {leading: false}) 
 

 
window.onresize = function(event) { 
 
    throttledOnWindowResize() 
 
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<!doctype html> 
 
<html class="no-js" lang=""> 
 
<head> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
 
    <link rel="stylesheet" href="css/main.css"> 
 
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" 
 
      integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous"> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> 
 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" 
 
      integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" 
 
      crossorigin="anonymous"></script> 
 
    <script src="js/main.js"></script> 
 
</head> 
 
<body> 
 
<div class="container"> 
 
    <div class="row"> 
 
     <div class="col-md-8"> 
 
      <div class="js-cap-jumbotron jumbotron"> 
 
       <div class="row js-cap-jumbotron-inside"> 
 
        <div class="col-md-6"> 
 
         <div class="upper-cap-jumbotron"> 
 
          <h3>Lorem Ipsum 1</h3> 
 
          <p class="cap-jumbotron-paragraph">Lorem ipsum dolor sit amet.</p> 
 
         </div> 
 
         <input class="js-cap-jumbotron-bottom" /> 
 
        </div> 
 
        <div class="col-md-6"> 
 
         <div class="upper-cap-jumbotron"> 
 
          <h3>Lorem Ipsum 2</h3> 
 
          <p class="cap-jumbotron-paragraph">Text of arbitrary length</p> 
 
         </div> 
 
         <button class="js-cap-jumbotron-bottom btn btn-lg btn-default">Submit</button> 
 
        </div> 
 
       </div> 
 
      </div> 
 
     </div> 
 
     <div class="col-md-4"> 
 
      <div class="js-cap-jumbotron jumbotron"> 
 
       <div class="js-cap-jumbotron-inside"> 
 
        <div class="upper-cap-jumbotron"> 
 
         <h3>Lorem Ipsum 3</h3> 
 
         <p class="cap-jumbotron-paragraph">Text of arbitrary length</p> 
 
        </div> 
 
        <button class="js-cap-jumbotron-bottom btn btn-lg btn-default">Submit 2</button> 
 
       </div> 
 
      </div> 
 
     </div> 
 
    </div> 
 
</div> 
 
</body> 
 
</html>

正如你所看到的通過運行代碼片段(在屏幕寬度1000px +),當調整屏幕大小時,按鈕會上下晃動。當我調整屏幕大小時,我希望按鈕不要晃動,並且還要讓它們的頂部在jumbotrons的底部附近垂直對齊。我想有這個優雅的CSS解決方案。我會很感激任何提示。

回答

1

這裏是的CSS唯一的解決辦法

@media screen and (min-width: 992px) { 
 
    body { 
 
     padding-top: 30px; 
 
    } 
 
    .jumbotron-area { 
 
     margin-bottom: 30px; 
 
     position: relative; 
 
    } 
 
    .jumbotron-area .jumbotron { 
 
     padding-bottom: 70px; 
 
     background: none; 
 
     margin-bottom: 0; 
 
    } 
 
    .jumbotron-area [class^='col-md'] { 
 
     position: static; 
 
    } 
 
    .jumbotron-area .jumbotron:before { 
 
     width: calc(66.66666667% - 30px); 
 
     background-color: #eee; 
 
     position: absolute; 
 
     border-radius: 6px; 
 
     margin-left: -60px; 
 
     z-index: -1; 
 
     content: ''; 
 
     bottom: 0; 
 
     top: 0; 
 
    } 
 
    .jumbotron-area .col-md-4 .jumbotron:before { 
 
     width: calc(33.33333333% - 30px); 
 
    } 
 
    .jumbotron-area .jumbotron-bottom { 
 
     position: absolute; 
 
     bottom: 20px; 
 
    } 
 
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/> 
 
<div class="container"> 
 
    <div class="row jumbotron-area"> 
 
     <div class="col-md-8"> 
 
      <div class="js-cap-jumbotron jumbotron"> 
 
       <div class="row js-cap-jumbotron-inside"> 
 
        <div class="col-md-6"> 
 
         <div class="upper-cap-jumbotron"> 
 
          <h3>Lorem Ipsum 1</h3> 
 
          <p class="cap-jumbotron-paragraph">Lorem ipsum dolor sit amet.</p> 
 
         </div> 
 
         <div class="jumbotron-bottom"> 
 
          <input type="text" /> 
 
         </div> 
 
        </div> 
 
        <div class="col-md-6"> 
 
         <div class="upper-cap-jumbotron"> 
 
          <h3>Lorem Ipsum 2</h3> 
 
          <p class="cap-jumbotron-paragraph">Text of arbitrary lengthText of arbitrary lengthText of arbitrary lengthText of arbitrary lengthText of arbitrary lengthText of arbitrary lengthText of arbitrary </p> 
 
         </div> 
 
         <div class="jumbotron-bottom"> 
 
          <button class="btn btn-lg btn-default">Submit</button> 
 
         </div> 
 
        </div> 
 
       </div> 
 
      </div> 
 
     </div> 
 
     <div class="col-md-4"> 
 
      <div class="js-cap-jumbotron jumbotron"> 
 
       <div class="js-cap-jumbotron-inside"> 
 
        <div class="upper-cap-jumbotron"> 
 
         <h3>Lorem Ipsum 3</h3> 
 
         <p class="cap-jumbotron-paragraph">Text of arbitrary length</p> 
 
        </div> 
 
        <div class="jumbotron-bottom"> 
 
         <button class="btn btn-lg btn-default">Submit 2</button> 
 
        </div> 
 
       </div> 
 
      </div> 
 
     </div> 
 
    </div> 
 
</div> 
 
<div class="container"> 
 
    <div class="row jumbotron-area"> 
 
     <div class="col-md-8"> 
 
      <div class="js-cap-jumbotron jumbotron"> 
 
       <div class="row js-cap-jumbotron-inside"> 
 
        <div class="col-md-6"> 
 
         <div class="upper-cap-jumbotron"> 
 
          <h3>Lorem Ipsum 1</h3> 
 
          <p class="cap-jumbotron-paragraph">Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</p> 
 
         </div> 
 
         <input type="text" /> 
 
        </div> 
 
        <div class="col-md-6"> 
 
         <div class="upper-cap-jumbotron"> 
 
          <h3>Lorem Ipsum 2</h3> 
 
          <p class="cap-jumbotron-paragraph">Text of arbitrary length Text of arbitrary length Text of arbitrary length Text of arbitrary length Text of arbitrary length Text of arbitrary length </p> 
 
         </div> 
 
         <div class="jumbotron-bottom"> 
 
          <button class="btn btn-lg btn-default">Submit</button> 
 
         </div> 
 
        </div> 
 
       </div> 
 
      </div> 
 
     </div> 
 
     <div class="col-md-4"> 
 
      <div class="js-cap-jumbotron jumbotron"> 
 
       <div class="js-cap-jumbotron-inside"> 
 
        <div class="upper-cap-jumbotron"> 
 
         <h3>Lorem Ipsum 3</h3> 
 
         <p class="cap-jumbotron-paragraph">Text of arbitrary length Text of arbitrary length Text of arbitrary length Text of arbitrary length Text of arbitrary length Text of arbitrary length Text of arbitrary length </p> 
 
        </div> 
 
        <div class="jumbotron-bottom"> 
 
         <button class="js-cap-jumbotron-bottom btn btn-lg btn-default">Submit 2</button> 
 
        </div> 
 
       </div> 
 
      </div> 
 
     </div> 
 
    </div> 
 
</div>

注:我添加的樣式,將工作只以上992px,但你可以自定義根據你的需求。請在完整頁面模式下查看此演示。

2

我不確定你的目標是什麼,但是使用Bootstrap的網格佈局可以實現兩個按鈕之一和一個按鈕的兩個按鈕。

enter image description here

<div class="container"> 
    <div class="row"> 
     <div class="col-md-8"> 
      <div class="jumbotron"> 
       <div class="row"> 
        <div class="col-md-6"><p>Text</p></div> 
        <div class="col-md-6"><p>Text</p></div> 
       </div> 
       <div class="row"> 
        <div class="col-md-6"><p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p></div> 
        <div class="col-md-6"><p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p></div> 
       </div> 
      </div> 
     </div> 
     <div class="col-md-4"> 
      <div class="jumbotron"> 
       <p>Text</p> 
       <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p> 
      </div> 
     </div> 
    </div> 

</div> 

還有一個編輯

+0

嗯,我的目標是讓按鈕對準jumbotron的底部 – kshikama

1

JS Fiddle Demo

HTML:

<div class="container"> 
    <div class="row"> 
    <div class="col-md-8"> 
     <div class="js-cap-jumbotron jumbotron"> 
     <div class="row js-cap-jumbotron-inside"> 
      <div class="col-md-6"> 
      <div class="upper-cap-jumbotron"> 
       <h3>Lorem Ipsum 1</h3> 
       <p class="cap-jumbotron-paragraph">Lorem ipsum dolor sit amet.</p> 
      </div> 
      <input class="js-cap-jumbotron-bottom" /> 
      </div> 
      <div class="col-md-6"> 
      <div class="upper-cap-jumbotron"> 
       <h3>Lorem Ipsum 2</h3> 
       <p class="cap-jumbotron-paragraph">Text of arbitrary length</p> 
      </div> 
      <button id="submit1" class="js-cap-jumbotron-bottom btn btn-lg btn-default">Submit</button> 
      </div> 
     </div> 
     </div> 
    </div> 
    <div class="col-md-4"> 
     <div class="js-cap-jumbotron jumbotron"> 
     <div class="js-cap-jumbotron-inside"> 
      <div class="upper-cap-jumbotron"> 
      <h3>Lorem Ipsum 3</h3> 
      <p class="cap-jumbotron-paragraph">Text of arbitrary length</p> 
      </div> 
      <button id="submit2" class="js-cap-jumbotron-bottom btn btn-lg btn-default">Submit 2</button> 
     </div> 
     </div> 
    </div> 
    </div> 
</div> 

CSS:

@media only screen and (min-width: 992px) { 
    #submit1 { 
    margin-top: 7%; 
    } 
    #submit2 { 
    margin-top: -8%; 
    } 
} 

JS:

function resizeJumbotronToHaveEqualHeights() { 
    var elements = $(".js-cap-jumbotron") 
    var max_height = _.max(_.map(elements, function(element) { 
    return $(element).height() 
    })) 
    _.map(elements, function(element) { 
    $(element).height(max_height) 
    }) 
} 

function positionButtonsTowardsBottom() { 
    var buttons = $(".js-cap-jumbotron-bottom") 
    _.map(buttons, function(element) { 
    var button = $(element) 
    var parentContainer = button.parents(".js-cap-jumbotron") 
    var siblingContainer = button.siblings(".upper-cap-jumbotron") 
    var childContainers = _.toArray(button.parentsUntil(".js-cap-jumbotron")) 
    var newTop = $(parentContainer).outerHeight() 
    childContainers.forEach(function(container) { 
     newTop -= $(container).position().top 
    }) 
    newTop -= button.outerHeight(true); 
    newTop -= siblingContainer.outerHeight(true); 
    button.css({ 
     "margin-top": newTop + "px" 
    }) 
    }) 
} 

const onWindowResize = function() { 
    const width = $(window).width(); 
    console.log(width) 
    if (width > 992) { 
    var elements = $(".js-cap-jumbotron") 
    elements.css('height', 'auto'); 
    resizeJumbotronToHaveEqualHeights() 
    positionButtonsTowardsBottom() 
    } else { 
    var elements = $(".js-cap-jumbotron") 
    elements.css('height', 'auto'); 
    var buttons = $(".js-cap-jumbotron-bottom") 
    buttons.css({ 
     "margin-top": "auto" 
    }) 
    } 
}; 

var throttledOnWindowResize = _.throttle(onWindowResize, 100, { 
    leading: false 
}) 

window.onresize = function(event) { 
    throttledOnWindowResize() 
}; 
+0

感謝您的嘗試,但文本可以是任意長度的,所以我不能使用常量作爲邊距。 – kshikama

1

請試試這個,這將真正幫助到你..

不需要script.CSS是否足以執行。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<!doctype html> 
<html class="no-js" lang=""> 
<head> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="css/main.css"> 
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" 
      integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous"> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" 
      integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" 
      crossorigin="anonymous"></script> 
    <script src="js/main.js"></script> 
    <style type="text/css"> 
     .js-cap-jumbotron.jumbotron{ 
     min-height: 300px; 
     padding: 28px; 
     height: auto; 
     } 
    .height100per{ 
    height:100%; 
    } 
    body { 
    margin: 0; 
    padding: 20px; 
} 

    </style> 
</head> 
<body> 
<div class="container"> 
    <div class="row"> 
     <div class="col-md-8 col-md-8 col-sm-8 col-xs-8"> 
      <div class="js-cap-jumbotron jumbotron" style=""> 
       <div class="row js-cap-jumbotron-inside height100per"> 
        <div class="col-md-6 col-md-6 col-sm-6 col-xs-6 height100per" style=""> 
         <div class="upper-cap-jumbotron"> 
          <h3>Lorem Ipsum 1</h3> 
          <p class="cap-jumbotron-paragraph">Lorem ipsum dolor sit amet.</p> 
         </div> 
         <input class="js-cap-jumbotron-bottom" style="position: absolute; bottom: 0px; margin-top: auto;"> 
        </div> 
        <div class="col-md-6 col-md-6 col-sm-6 col-xs-6 height100per"> 
         <div class="upper-cap-jumbotron height100per"> 
          <h3>Lorem Ipsum 2</h3> 
          <p class="cap-jumbotron-paragraph">Text of arbitrary length</p> 
         </div> 
         <button class="js-cap-jumbotron-bottom btn btn-lg btn-default" style="margin-top: auto; position: absolute; bottom: 0px;">Submit</button> 
        </div> 
       </div> 
      </div> 
     </div> 
     <div class="col-md-4 col-md-4 col-sm-4 col-xs-4"> 
      <div class="js-cap-jumbotron jumbotron" style=""> 
       <div class="row js-cap-jumbotron-inside height100per"> 
       <div class="col-md-12 col-md-12 col-sm-12 col-xs-6 height100per"> 
        <div class="upper-cap-jumbotron"> 
         <h3>Lorem Ipsum 3</h3> 
         <p class="cap-jumbotron-paragraph">Text of arbitrary length</p> 
        </div> 
        <button style="margin-top: auto; position: absolute; bottom: 0px;" class="js-cap-jumbotron-bottom btn btn-lg btn-default">Submit 2</button> 
       </div> 
</div> 
      </div> 
     </div> 
    </div> 
</div> 
</body> 
</html>