В настоящее время я пытаюсь создать проект, имитирующий приложение погоды; Я хочу стилизовать некоторые пункты меню определенным образом. По сути, я хочу, чтобы отдельные элементы занимали весь объем контейнера, в котором они находятся, не переполняясь. В настоящее время я использую flexbox для распределения их по всему контейнеру, но я немного застрял в том, как заполнить весь контейнер. Мои отдельные пункты меню занимают мало места.
Я пытался настроить высоту и ширину блоков, но мне кажется, что есть способ лучше, более отзывчивый и менее громоздкий. Я также пытался удалить пробелы из моего HTML (как и в других сообщениях), но это, похоже, не решает мою проблему.
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<title>Weather</title>
<link rel = "stylesheet" href = "app.css">
<link rel = "stylesheet" href = "https://cdn.jsdelivr.net/npm/bulma@0.9.1/css/bulma.min.css">
<script src = "https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
</head>
<body>
<input type = "text" placeholder = "Timbuktu" name = "location">
<button>Click for current weather!</button>
<ul id = "temps"></ul>
<section>
<div class = "container">
<div class = "card">
<header class = "card-header">
<h1 class = "card-header-title">Mitch's Weather Widget</h1>
</header>
<div class = "card-content">
<div class = "columns is-mobile">
<div class = "column" id = "menu-column">
<aside class = "menu">
<ul class = "menu-list">
<li><a id = "current">Current Weather</a></li>
<li><a id = "hourly">Hourly Forecast</a></li>
<li><a id = "weekly">Next 7 Days</a></li>
<li><a id = "maps">Maps</a></li>
</ul>
</aside>
</div>
<div class = "column is-three-quarters">
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Dolorem iste minus quae numquam perspiciatis accusantium incidunt excepturi at quia aspernatur, nulla minima illum rerum quasi quisquam tempore labore nemo repellat.
Corporis, cumque quas sunt voluptatem, itaque ducimus eum nobis repellendus libero animi, dolorum saepe quae expedita adipisci eos? Autem, tenetur. Esse voluptatibus ab doloremque praesentium quo dolore, debitis molestiae harum.
Placeat iusto asperiores vel. Provident ex officia quidem at? Possimus, necessitatibus omnis cum autem deserunt rem maiores vel pariatur! Molestias asperiores accusamus quia qui maiores aut illum repudiandae optio tenetur?</p>
</div>
</div>
</div>
<footer class = "card-footer">
<p class = "card-footer-item">
<span>
View on <a href = "https://twitter.com/codinghorror/status/506010907021828096">Twitter</a>
</span>
</p>
<p class = "card-footer-item">
<span>
Share on <a href = "#">Facebook</a>
</span>
</p>
</footer>
</div>
</div>
</section>
<script src = "app.js"></script>
</body>
</html>
.container {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
min-height: 100vh;
}
.columns {
height: 60vh;
}
/* centering the title */
h1 {
display: flex;
justify-content: center;
}
/* vertical border beside the menu */
.column:first-child {
border-right: 1px solid hsl(0, 0%, 96%);
}
/* inherit the body-size of the parent column */
#menu-column,
.menu,
.menu-list {
width: inherit;
height: inherit;
}
/* distribute menu items evenly */
.menu-list {
display: flex;
flex-direction: column;
justify-content: space-around;
}
/* individual menu items */
#current,
#hourly,
#weekly,
#maps {
border: 2px solid green;
Извините, да, это лучший способ описать это. Я хочу, чтобы они «натыкались» друг на друга, не оставляя пробелов и не удваивая верхнюю/нижнюю границы!
я дал тебе решение
Чтобы решить вашу проблему, я создал два селектора для css. В первом селекторе растягиваем тег li
на все свободное место:
.menu-list li {
flex: 1;
box-sizing: border-box;
}
Во втором селекторе мы устанавливаем height: 100%
для тега a
:
.menu-list li a {
height: 100%;
}
Также для родительского селектора .menu-list
мы устанавливаем правило gap
для межкнопочного пространства 5 pixels
:
.menu-list {
...
gap: 5px;
}
И дополнительно создайте этот селектор для css:
#menu-column {
height: 100%;
}
Запустите фрагмент и проверьте его.
.container {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
min-height: 100vh;
}
.columns {
height: 60vh;
}
/* centering the title */
h1 {
display: flex;
justify-content: center;
}
/* vertical border beside the menu */
.column:first-child {
border-right: 1px solid hsl(0, 0%, 96%);
}
/* inherit the body-size of the parent column */
#menu-column,
.menu,
.menu-list {
width: inherit;
height: inherit;
}
#menu-column {
height: 100%;
}
/* distribute menu items evenly */
.menu-list {
display: flex;
flex-direction: column;
justify-content: space-around;
gap: 5px;
}
.menu-list li {
flex: 1;
box-sizing: border-box;
}
.menu-list li a {
height: 100%;
}
/* individual menu items */
#current,
#hourly,
#weekly,
#maps {
border: 2px solid green;
}
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<title>Weather</title>
<link rel = "stylesheet" href = "app.css">
<link rel = "stylesheet" href = "https://cdn.jsdelivr.net/npm/bulma@0.9.1/css/bulma.min.css">
<script src = "https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
</head>
<body>
<input type = "text" placeholder = "Timbuktu" name = "location">
<button>Click for current weather!</button>
<ul id = "temps"></ul>
<section>
<div class = "container">
<div class = "card">
<header class = "card-header">
<h1 class = "card-header-title">Mitch's Weather Widget</h1>
</header>
<div class = "card-content">
<div class = "columns is-mobile">
<div class = "column" id = "menu-column">
<aside class = "menu">
<ul class = "menu-list">
<li><a id = "current">Current Weather</a></li>
<li><a id = "hourly">Hourly Forecast</a></li>
<li><a id = "weekly">Next 7 Days</a></li>
<li><a id = "maps">Maps</a></li>
</ul>
</aside>
</div>
<div class = "column is-three-quarters">
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Dolorem iste minus quae numquam perspiciatis accusantium incidunt excepturi at quia aspernatur, nulla minima illum rerum quasi quisquam tempore labore nemo repellat.
Corporis, cumque quas sunt voluptatem, itaque ducimus eum nobis repellendus libero animi, dolorum saepe quae expedita adipisci eos? Autem, tenetur. Esse voluptatibus ab doloremque praesentium quo dolore, debitis molestiae harum.
Placeat iusto asperiores vel. Provident ex officia quidem at? Possimus, necessitatibus omnis cum autem deserunt rem maiores vel pariatur! Molestias asperiores accusamus quia qui maiores aut illum repudiandae optio tenetur?</p>
</div>
</div>
</div>
<footer class = "card-footer">
<p class = "card-footer-item">
<span>
View on <a href = "https://twitter.com/codinghorror/status/506010907021828096">Twitter</a>
</span>
</p>
<p class = "card-footer-item">
<span>
Share on <a href = "#">Facebook</a>
</span>
</p>
</footer>
</div>
</div>
</section>
<script src = "app.js"></script>
</body>
</html>
Большое вам спасибо за вашу помощь. Я поигрался с файлом, прежде чем вы прокомментировали, и нашел неуклюжий способ сделать это. Но это сильно очищает. В настоящее время я возвращаюсь и совершенствуюсь в своих основах CSS, чтобы меньше полагаться на фреймворки, чтобы избежать этой проблемы в будущем.
Я рад, что мой ответ заставил вас понять вашу проблему в css. Я также буду рад помочь вам в будущем. Лично я не пользуюсь фреймворками вроде бутстрапа и считаю, что лучше разобраться и сделать что-то самому. Хорошее кодирование, друг.
Не совсем понятно, что вы хотите. Вы хотите, чтобы кнопки с зеленой рамкой занимали всю высоту, не оставляя между собой промежутка?