у меня проблема с автоматической шириной для div, я не хочу давать div статическую ширину, я хочу, чтобы он автоматически устанавливал свою ширину, чтобы соответствовать содержимому внутри него. я пытаюсь создать div с 3 списками, я сделал списки (элемент ul) flex-column-wrap я хочу, чтобы растяжка div соответствовала спискам, если в списке больше столбца автоматически.
Это мой фрагмент кода:
* {
margin: 0;
padding: 0;
}
body {
position: relative;
height: 100vh;
width: 100%;
background-color: beige;
}
.link-list {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%);
background-color: aquamarine;
display: flex;
justify-content: space-around;
height: 200px;
max-width: 90%;
gap: 30px;
}
.inner-list {
width: fit-content;
display: flex;
flex-direction: column;
}
.inner-list ul {
list-style: none;
display: flex;
flex-direction: column;
flex-wrap: wrap;
height: 100%;
width: fit-content;
}<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta http-equiv = "X-UA-Compatible" content = "IE=edge">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel = "stylesheet" href = "test.css">
</head>
<body>
<div class = "list">
<div class = "inner-list">
<h6 class = "inner-list-title">Title</h6>
<ul>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
</ul>
</div>
<div class = "inner-list">
<h6 class = "inner-list-title">Title</h6>
<ul>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark social </a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark social </a></li>
</ul>
</div>
<div class = "inner-list">
<h6 class = "inner-list-title">Title</h6>
<ul>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
</ul>
</div>
</div>
</body>
</html>





Вы можете сделать это, используя display: inline-table; вместо flex и width: 30%;
.inner-list{
width: 30%;
display: inline-table;
}
*{
margin: 0;
padding: 0;
}
body{
position: relative;
height: 100vh;
width: 100%;
background-color: beige;
}
.link-list{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%);
background-color: aquamarine;
display: flex;
justify-content: space-around;
height: 200px;
max-width: 90%;
gap: 30px;
}
.inner-list{
width: 30%;
display: inline-table;
}
.inner-list ul{
list-style: none;
display: flex;
flex-direction: column;
flex-wrap: wrap;
height: 100%;
width: fit-content;
}<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta http-equiv = "X-UA-Compatible" content = "IE=edge">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel = "stylesheet" href = "test.css">
</head>
<body>
<div class = "list">
<div class = "inner-list">
<h6 class = "inner-list-title">Title</h6>
<ul>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
</ul>
</div>
<div class = "inner-list">
<h6 class = "inner-list-title">Title</h6>
<ul>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark social </a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark social </a></li>
</ul>
</div>
<div class = "inner-list">
<h6 class = "inner-list-title">Title</h6>
<ul>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
</ul>
</div>
</div>
</body>
</html>Во Flexbox есть несколько известных ошибок, и одна из них возникает при использовании flex-flow: column wrap. Некоторые браузеры неправильно определяют размер контейнера в зависимости от его содержимого, что может привести к нежелательному переполнению. Чтобы обойти это, вы можете настроить контейнер так, чтобы он отображал: flex и flex-direction: row со статической высотой, например:
При использовании flex-flow: обтекание столбца некоторые браузеры неправильно определяют размер контейнера в зависимости от его содержимого, что приводит к нежелательному переполнению.
Чтобы устранить поведение flex: column, вы можете использовать вместо него flex-flow: row wrap (обратите внимание на использование строки вместо столбца). Чтобы сымитировать поведение столбца, вы можете обновить режим записи контейнера (и сбросить его для элементов), например:
.list {
display: flex;
flex-direction: row;
height: 200px;
}
и разрешите flex: column с помощью flex-flow: row переноса (обратите внимание на строку вместо столбца) и подделайте поведение столбца, обновив режим записи контейнера (и сбросив его для элементов).
.inner-list {
width: fit-content;
display: flex;
flex-direction: column;
}
.inner-list ul {
list-style: none;
display: flex;
flex-direction: row;
flex-wrap: wrap;
height: 100%;
width: fit-content;
writing-mode: vertical-lr;
}
.inner-list li {
writing-mode: horizontal-tb;
padding: 0 6px;
}
Вот полный пример кода и демо, которые должны вам подойти.
* {
margin: 0;
padding: 0;
}
body {
position: relative;
height: 100vh;
width: 100%;
background-color: beige;
}
.list {
display: flex;
flex-direction: row;
height: 200px;
}
.link-list {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%);
background-color: aquamarine;
display: flex;
justify-content: space-around;
height: 200px;
max-width: 90%;
gap: 30px;
}
.inner-list {
width: fit-content;
display: flex;
flex-direction: column;
}
.inner-list ul {
list-style: none;
display: flex;
flex-direction: row;
flex-wrap: wrap;
height: 100%;
width: fit-content;
writing-mode: vertical-lr;
}
.inner-list li {
writing-mode: horizontal-tb;
padding: 0 6px;
}<div class = "list">
<div class = "inner-list">
<h6 class = "inner-list-title">Title</h6>
<ul>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
</ul>
</div>
<div class = "inner-list">
<h6 class = "inner-list-title">Title</h6>
<ul>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark social </a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">sark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark social </a></li>
</ul>
</div>
<div class = "inner-list">
<h6 class = "inner-list-title">Title</h6>
<ul>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
<li><a href = "#">Dark</a></li>
</ul>
</div>
</div>
Разве OP не сказал, что они «не хотят придавать div статическую ширину» и «хотят, чтобы он автоматически устанавливал свою ширину» [так в оригинале]?