2016-06-12 2 views
2

Я стремлюсь, чтобы получить страницу HTML, который выглядит следующим образомСовместите три кнопки, так что они находятся в нижней части двух Bootstrap JumboTron контейнеров

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

Я не совсем уверен, что ваша цель - это только два jumbotrons с двумя кнопками в одной и одной кнопке в другой, что может быть достигнуто с использованием макета сетки 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>