Я добавил классы d-flex и flex-column в класс Bootstrap card-body, чтобы выровнять содержащуюся кнопку по нижней части карты, как предлагается в верхнем ответе этот вопрос. Моя проблема в том, что это привело к тому, что кнопка расширилась, чтобы заполнить карточку. Как я могу заставить кнопку вернуться к сжатию, чтобы соответствовать тексту кнопки, как это было до того, как я добавил классы гибкости?
...
<div class = "row pt-4" id = "cards">
<div class = "card-deck">
// THIS IS THE CARD WITH THE WIDENED BUTTON
<div class = "card">
<img class = "card-img-top img-fluid" src = "{{url_for('static', filename='volunteer.png')}}" alt = "exercise_image" >
<div class = "card-body d-flex flex-column">
<h5 class = "card-title">Giving Back</h5>
<p class = "card-text">Help others and feel useful</p>
<a href = "#" class = "btn btn-primary mt-auto">Set a Goal</a>
</div>
</div>
// THIS CARD'S BUTTON SHRINKS TO FIT ITS TEXT
<div class = "card">
<img class = "card-img-top img-fluid" src = "{{url_for('static', filename='spirituality.png')}}" alt = "exercise_image" >
<div class = "card-body">
<h5 class = "card-title">Spirituality</h5>
<p class = "card-text">Connect to something larger than yourself</p>
<a href = "#" class = "btn btn-primary">Set a Goal</a>
</div>
</div>
...
</div>
</div>
...
Спасибо @wazz. Это хороший момент, поэтому я оставлю все как есть.






Просто оберните свой якорь в другой div
<div>
<a href = "#" class = "btn btn-primary mt-auto">Set a Goal</a>
</div>
<!DOCTYPE html>
<html lang = "en">
<head>
<title>Bootstrap Example</title>
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1">
<link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script src = "https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<div class = "container">
<div class = "row pt-4" id = "cards">
<div class = "card-deck">
<div class = "card">
<img class = "card-img-top img-fluid" src = "{{url_for('static', filename='volunteer.png')}}" alt = "exercise_image">
<div class = "card-body d-flex flex-column">
<h5 class = "card-title">Giving Back</h5>
<p class = "card-text">Help others and feel useful</p>
<div>
<a href = "#" class = "btn btn-primary mt-auto">Set a Goal</a>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>ИЛИ ЖЕ
Просто добавьте класс align-items-center в гибкий div
<!DOCTYPE html>
<html lang = "en">
<head>
<title>Bootstrap Example</title>
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1">
<link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script src = "https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<div class = "container">
<div class = "row pt-4" id = "cards">
<div class = "card-deck">
<div class = "card">
<img class = "card-img-top img-fluid" src = "{{url_for('static', filename='volunteer.png')}}" alt = "exercise_image">
<div class = "card-body d-flex flex-column align-items-center">
<h5 class = "card-title">Giving Back</h5>
<p class = "card-text">Help others and feel useful</p>
<a href = "#" class = "btn btn-primary mt-auto">Set a Goal</a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>Спасибо @Nandita. Добавление align-items-center в класс устранило проблему ширины и оставило кнопку выровненной по нижнему краю. С другой стороны, добавление div устранило проблему ширины, но удалило выравнивание по низу.
Не могли бы вы объяснить, почему каждая из ваших рекомендаций помогает решить проблему ширины?
ОК. Я не знал, что будет вашим требованием, поэтому добавил оба ответа :)
по умолчанию значение свойства align-items равно 'stretch', которое растягивает каждый дочерний элемент flex до полной ширины родительского элемента flex. Таким образом, добавление align-items: center больше не растягивает кнопку
Добавление div к кнопке делает кнопку больше не прямым потомком гибкого элемента, поэтому это не повлияет на него. Теперь div, оборачивающий кнопку, займет всю ширину, но кнопка будет иметь ширину только в соответствии с содержимым внутри нее :)
К классу кнопок добавьте mx-auto для центрирования кнопки и mt-auto для нажатия кнопки в нижней части карты.
<!DOCTYPE html>
<html lang = "en">
<head>
<title>Bootstrap Example</title>
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1">
<link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script src = "https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<div class = "container">
<div class = "row pt-4" id = "cards">
<div class = "card-deck">
<div class = "card">
<img class = "card-img-top img-fluid" src = "{{url_for('static', filename='volunteer.png')}}" alt = "exercise_image">
<div class = "card-body d-flex flex-column align-items-center">
<h5 class = "card-title">Giving Back</h5>
<p class = "card-text">Help others and feel useful</p>
<a href = "#" class = "btn btn-primary mt-auto mx-auto">Set a Goal</a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
Выглядит хорошо, и на что еще можно нажать. Оставь это, если можешь.