Как я могу сделать div не больше, чем его содержимое?

У меня есть макет, похожий на:

<div>
    <table>
    </table>
</div>

Я бы хотел, чтобы div расширялся только до такой ширины, какой становится мой table.

эффект называется «термоусадочная упаковка», и, как уже было сказано, есть несколько способов сделать это (float, inline, min / max-width), все из которых имеют побочные эффекты на выбор.

annakata 16.01.2009 19:32

Ни один из приведенных ниже ответов не помог мне, кроме: display: table -ИЛИ- height: fit-content !!!

AlphaX 22.08.2020 16:11
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2 226
2
1 579 639
40

Ответы 40

Не знаю, в каком контексте это появится, но я считаю, что свойство стиля CSS float, либо left, либо right, будет иметь такой эффект. С другой стороны, у него будут и другие побочные эффекты, например, возможность плавания текста вокруг него.

Пожалуйста, поправьте меня, если я ошибаюсь, я не уверен на 100% и в настоящее время не могу проверить это сам.

Да, в CSS 2.1. (CSS2.0 сделает плавающее на всю ширину, но на самом деле это делает только IE5 / Mac). Таблицы и плавающие объекты - единственные типы отображения, которые могут сжиматься, чтобы соответствовать их содержимому.

bobince 16.01.2009 19:14

Решение, совместимое с CSS2, заключается в использовании:

.my-div
{
    min-width: 100px;
}

Вы также можете перемещать свой div, чтобы он был как можно меньше, но вам нужно будет использовать clearfix, если что-то внутри вашего div плавает:

.my-div
{
    float: left;
}

Должно. Какой тип документа вы используете?

Soviut 19.10.2009 03:35

Вам нужен блочный элемент, у которого есть то, что CSS называет шириной shrink-to-fit, а спецификация не предоставляет благословенного способа получить такое. В CSS2 сжатие по размеру не является целью, а является средством решения ситуации, когда браузеру «приходится» получать ширину из воздуха. Вот эти ситуации:

  • плавать
  • абсолютно позиционированный элемент
  • встроенный блочный элемент
  • элемент таблицы

когда ширина не указана. Я слышал, что они думают добавить то, что вы хотите, в CSS3. А пока обойдемся одним из вышеперечисленных.

Решение не раскрывать эту функцию напрямую может показаться странным, но на то есть веская причина. Это дорого. Сжатие по размеру означает форматирование как минимум дважды: вы не можете начать форматирование элемента, пока не узнаете его ширину, и вы не можете вычислить ширину без прохождения всего содержимого. Кроме того, не так часто требуется усадочный элемент, как можно было бы подумать. Зачем вам нужен дополнительный div вокруг вашего стола? Возможно, вам понадобится только заголовок таблицы.

Я бы сказал, что inline-block как раз предназначен для этого и отлично решает проблему.

miahelf 17.11.2011 12:24

Я думаю, используя

display: inline-block;

будет работать, однако я не уверен в совместимости браузера.


Другое решение - обернуть ваш div в другой div (если вы хотите сохранить поведение блока):

HTML:

<div>
    <div class = "yourdiv">
        content
    </div>
</div>

CSS:

.yourdiv
{
    display: inline;
}

Чтобы ответить на вопрос совместимости браузера: это не будет работать с IE7 / 8 на элементах DIV. Вы должны использовать элементы SPAN.

Matt Brock 18.02.2011 17:26

@feeela - я всегда ставлю * перед зумом, например. *display: inline; *zoom: 1;. Я не тестировал эту конкретную ситуацию, но в прошлом я всегда обнаруживал, что взлом hasLayout требуется только для IE7 или IE8 в режиме IE7 (или IE8 в причудливых вариантах!).

robocat 08.08.2012 03:24

@robocat Да, включение inline-block в IE 7 - это действительно обходной путь.

feeela 08.08.2012 12:07

@feela - ваш комментарий не имеет смысла для меня! Я предлагал поставить * перед зумом, т. е. * масштабирование: 1;

robocat 22.08.2012 22:12

Пожалуйста, объясните, почему работает ваше решение inline-block.

HelloWorldNoMore 27.04.2016 01:43
display: -moz-inline-stack;
display: inline-block;
zoom: 1;
*display: inline;

Foo Hack - кроссбраузерная поддержка стилей встраиваемых блоков (19 ноября 2007 г.).

Любой, у кого есть эта проблема, должен добавить все эти стили. Firefox добавил поля, когда не используется -moz-inline-stack

Justin 17.07.2012 22:48

Решение - установить div на display: inline-block.

@ leif81 Вы можете использовать span, div или ul или что-то еще, важная часть - это контейнер, минимальная ширина которого должна быть минимальной, имеет свойство CSS display: inline-block.

miahelf 17.11.2011 12:23

если кто-то задается вопросом: затем можно центрировать родительский элемент таблицы, установив "text-align: center" для его родительского элемента и "text-align: left" для него (например, <body style = "text-align: center"> < span style = "text-align: left; display: inline-block;"> <table> ... </table> </span> </body>)

bernstein 16.02.2012 03:09

У меня он не работает на chrome с span, но работает с white-space: nowrap;

albanx 08.07.2012 00:07

Обратите внимание, что после установки свойства display: inline-blockmargin: 0 auto; не будет работать должным образом. В том случае, если в родительском контейнере есть text-align: center;, то элемент inline-block будет центрирован по горизонтали.

Savas Vedova 09.04.2014 16:09
<table cellpadding = "0" cellspacing = "0" border = "0">
    <tr>
        <td>
            <div id = "content_lalala">
                this content inside the div being inside a table, needs no inline properties and the table is the one expanding to the content of this div =)
            </div>
        </td>
    </tr>
</table>

Я знаю, что людям иногда не нравятся таблицы, но должен вам сказать, я пробовал встроенные хаки css, и они вроде работали в некоторых div, а в других - нет, так что было действительно проще заключить расширяющийся div в таблица ... и ... она может иметь или не иметь встроенное свойство, и все же таблица - это та, которая будет содержать общую ширину содержимого. знак равно

Это не «правильный» способ, но IE6 / 7/8 часто просто не играет хорошо, когда все становится немного сложнее, поэтому я полностью понимаю, почему вы так поступаете. Вы получили мой голос за.

Craigo 27.03.2012 10:26

Я бы сделал это, но я должен окружить каждое поле ввода, так что это много лишнего html.

NickSoft 01.09.2015 11:51
width:1px;
white-space: nowrap;

у меня отлично работает :)

Но опять же, мой случай был текстом внутри div, а не таблицей, подобной OP.

Rui Marques 03.01.2013 20:57

для слайдера ui jquery это здорово, потому что вам не нужно устанавливать ширину элемента содержимого

CoffeJunky 07.06.2013 01:14
width: auto; white-space: nowrap; сделал это за меня.
Antti Tanskanen 22.12.2020 15:14

Что мне подходит:

display: table;

в div. (Проверено на Fire Fox и Гугл Хром).

Да, особенно если вам нужно центрировать с маржей: авто. В этом случае встроенный блок не является решением.

Zsolt Szatmari 03.07.2014 17:12

Также обратите внимание, что если вы хотите, чтобы внутри этого элемента работали отступы, вы должны установить стиль border-collapse: separate;. Он используется по умолчанию во многих браузерах, но часто в CSS-фреймворках, например, при начальной загрузке, он сбрасывает его значение на collapse.

Ruslan Stelmachenko 20.05.2016 20:38

Протестировано на MSIE 6 на телефоне под управлением Windows Mobile 6.5, выпущенном в 2009 году: он плавно превращается в полноразмерный div (что вряд ли будет проблемой для телефона). Если кто-то использует на настольном компьютере версию Internet Explorer ниже 8, значит, он использует неподдерживаемую операционную систему (IE6 поставляется с XP, IE7 поставляется с Vista); Я бы перенаправил их на страницу, предлагающую им перейти на GNU / Linux, если они хотят продолжать безопасное использование Интернета на этой машине.

Silas S. Brown 10.07.2017 19:56

Мне кажется, это нормально работает во всех браузерах. Примером является реальное объявление, которое я использую в Интернете и в информационном бюллетене. Просто измените содержимое div. Он будет регулироваться и сжиматься в соответствии с указанным вами количеством отступов.

<div style = "float:left; border: 3px ridge red; background: aqua; padding:12px">
    <font color=red size=4>Need to fix a birth certificate? Learn <a href = "http://www.example.com">Photoshop in a Day</a>!
    </font>
</div>

шрифт полностью устарел. вероятно, отображается как <span> на любом текущем движке.

zanlok 02.04.2013 08:13

@zanlok Он говорит о информационном бюллетене, <font> все еще кажется честной игрой в мире электронной почты, несмотря на его устаревание (2-й ответ): stackoverflow.com/questions/8012799/…

Pabbles 24.04.2014 19:43

display: inline-block добавляет дополнительный запас к вашему элементу.

Я бы порекомендовал это:

#element {
    display: table; /* IE8+ and all other modern browsers */
}

Бонус: Теперь вы также можете легко центрировать этот модный новый #element, просто добавив margin: 0 auto.

+1 - это лучшее и наиболее чистое решение для современных браузеров, которое также позволяет центрировать элемент. Условный комментарий с position: absolute необходим для <IE8.

uınbɐɥs 06.07.2012 13:22

При указании display: inline-block поля не добавляются. Но CSS обрабатывает пробелы, отображаемые между встроенными элементами.

feeela 06.07.2012 19:05

Пожалуйста, объясните, почему ваше решение display: table работает.

HelloWorldNoMore 27.04.2016 01:44

inline-block делает невозможным позиционирование элемента в его родительском элементе (например, если есть text-align: center, вы не можете заставить его придерживаться влево) display: table идеально :)

FlorianB 02.07.2016 17:34

Это лучший вариант, если у вас есть position: absolute.

m4heshd 22.05.2018 05:40

Поработав с Firebug, я обнаружил значение свойства -moz-fit-content, которое точно выполняет то, что хотел OP, и его можно использовать следующим образом:

width: -moz-fit-content;

Хотя он работает только в Firefox, я не нашел эквивалента для других браузеров, таких как Chrome.

По состоянию на январь 2017 года IE (все версии, включая Edge и мобильные устройства) и Opera Mini не поддерживают fit-content. Firefox поддерживает только ширину. Другие браузеры хорошо это поддерживают.

Gavin 12.01.2017 01:30

Я решил аналогичную проблему (где я не хотел использовать display: inline-block, потому что элемент был центрирован), добавив тег span внутри тега div и переместив форматирование CSS из внешнего тега div в новый внутренний тег span. Просто выбросьте это как еще одну альтернативную идею, если display: inline block вам не подходит.

Я попробовал div.classname{display:table-cell;}, и он работал!

Вы можете попробовать fit-content (CSS3):

div {
  width: fit-content; 
  /* To adjust the height as well */ 
  height: fit-content;
}

@BartlomiejSkwira Любая замена, работающая в IE или Eclipse? другое решение, как встроенный блок, не работает для меня .. \

DAVIDBALAS1 09.05.2016 09:10

В этом слишком много смысла, конечно, без поддержки.

Sava B. 06.03.2018 20:33
fit-content, похоже, мне не подходит, но его кузены max-content и min-content работают нормально.
krubo 05.09.2020 20:38

Плохая поддержка браузерами для этого, гораздо лучше избегать и использовать более традиционный подход inline-block, если вам нужна надежность во всех браузерах.

plong0 21.10.2020 02:09

Для меня «ширина: -moz-fit-content; width: fit-content;» работал. В противном случае это не работало в Firefox (в ноябре 2020 г.).

S. Doe 06.11.2020 20:07

Ответ на ваш вопрос лежит в будущем, мой друг ...

а именно "внутреннее" идет с последним обновлением CSS3

width: intrinsic;

к сожалению, IE отстает, поэтому пока не поддерживает

Подробнее об этом: Модуль внутреннего и внешнего определения размеров CSS, уровень 3 и Могу ли я использовать?: Внутренние и внешние размеры.

На данный момент вы должны быть довольны настройкой <span> или <div> на

display: inline-block;
intrinsic как величина нестандартная. На самом деле это width: max-content. См. Страница MDN на этом или уже связанный черновик.
maryisdead 20.05.2015 12:36

Исправлено (работает, если у вас несколько детей): Вы можете использовать jQuery (посмотрите ссылку JSFiddle)

var d= $('div');
var w;


d.children().each(function(){
 w = w + $(this).outerWidth();
 d.css('width', w + 'px')
});

Не забудьте включить jQuery ...

См. JSfiddle здесь

Это не работает, если у вашего div несколько дочерних элементов; он просто устанавливает ширину div равной ширине дочернего элемента первый.

Mark Amery 28.09.2016 20:32

@MarkAmery Прежде всего, прежде чем вы проголосуете против, пожалуйста, внимательно прочтите вопрос, они просили одного ребенка. Если вам действительно интересно, как это можно сделать с несколькими детьми, см. Измененный ответ.

Bondsmith 30.09.2016 16:08

Вы можете сделать это просто с помощью display: inline; (или white-space: nowrap;).

Я надеюсь, вы найдете это полезным.

Лично я просто делаю это:

HTML код:

<div>
    <table>
    </table>
</div>

Код CSS:

div {
    display: inline;
}

Если вы примените float к своему div, он тоже работает, но, очевидно, вам нужно применить правила CSS «очистить оба» к следующему элементу HTML.

Если у вас есть контейнеры, разрывающие строки, после нескольких часов поиска хорошего решения CSS и не находящего его, вместо этого Я сейчас использую jQuery:

$('button').click(function(){

  $('nav ul').each(function(){
    
    $parent = $(this).parent();
    
    $parent.width( $(this).width() );
    
  });
});
nav {
  display: inline-block;
  text-align: left; /* doesn't do anything, unlike some might guess */
}
ul {
  display: inline;
}

/* needed style */
ul {
  padding: 0;
}
body {
  width: 420px;
}

/* just style */
body {
  background: #ddd;
  margin: 1em auto;
}
button {
  display: block;
}
nav {
  background: #bbb;
  margin: 1rem auto;
  padding: 0.5rem;
}
li {
  display: inline-block;
  width: 40px;
  height: 20px;
  border: solid thin #777;
  margin: 4px;
  background: #999;
  text-align: center;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button>fix</button>

<nav>
  <ul>
    <li>3</li>
    <li>.</li>
    <li>1</li>
    <li>4</li>
  </ul>
</nav>

<nav>
  <ul>
    <li>3</li>
    <li>.</li>
    <li>1</li>
    <li>4</li>
    <li>1</li>
    <li>5</li>
    <li>9</li>
    <li>2</li>
    <li>6</li>
    <li>5</li>
    <li>3</li>
    <li>5</li>
  </ul>
</nav>

Это явно нарушено во фрагменте для меня в Chrome; нажатие кнопки исправления во второй раз приводит к другим результатам, чем нажатие на нее в первый раз.

Mark Amery 28.09.2016 20:29

@MarkAmery на моем Mac Я просто попробовал его на Chrome, Safari и Firefox, и все в порядке: никаких видимых ошибок, ничего на консоли, последовательное поведение. может дело в окнах ...

cregox 28.09.2016 22:17

Рабочая демонстрация здесь-

.floating-box {
    display:-moz-inline-stack;
    display: inline-block;

    width: fit-content; 
    height: fit-content;

    width: 150px;
    height: 75px;
    margin: 10px;
    border: 3px solid #73AD21;  
}
<h2>The Way is using inline-block</h2>

Supporting elements are also added in CSS.

<div>
   <div class = "floating-box">Floating box</div>
   <div class = "floating-box">Floating box</div>
   <div class = "floating-box">Floating box</div>
   <div class = "floating-box">Floating box</div>
   <div class = "floating-box">Floating box</div>
   <div class = "floating-box">Floating box</div>
   <div class = "floating-box">Floating box</div>
   <div class = "floating-box">Floating box</div>
</div>

Есть два лучших решения

  1. display: inline-block;

    ИЛИ ЖЕ

  2. display: table;

Из этих двух лучше display:table;,, потому что display: inline-block; добавляет дополнительный запас.

Для display:inline-block; вы можете использовать метод отрицательного поля, чтобы исправить лишнее пространство.

Не могли бы вы объяснить, почему display:table лучше?

Nathaniel Ford 12.07.2016 02:29

Для display: inline-block вы должны использовать метод отрицательного поля, чтобы исправить дополнительный интервал.

Shuvo Habib 12.07.2016 09:09

@NathanielFord, display:table оставляет элемент в контексте форматирования блока, поэтому вы можете управлять его положением с полями и т. д. Как обычно. display:-inline-*, с другой стороны, помещает элемент во встроенный контекст форматирования, в результате чего браузер создает вокруг него анонимную оболочку блока, содержащую поле строки с унаследованными настройками шрифта / высоты строки, и вставляет блок в это поле строки ( выравнивание по вертикали по базовой линии по умолчанию). Это связано с большим количеством «магии» и, следовательно, с потенциальными сюрпризами.

Ilya Streltsyn 08.12.2017 10:46

Просто

<div style = "display: inline;">
    <table>
    </table>
</div>

Мое решение CSS3 flexbox в двух вариантах: верхний ведет себя как span, а нижний как div, принимая всю ширину с помощью обертки. Их классы - это «верхний», «нижний» и «нижний обертки» соответственно.

body {
    font-family: sans-serif;
}
.top {
    display: -webkit-inline-flex;
    display: inline-flex;
}
.top, .bottom {
    background-color: #3F3;
    border: 2px solid #FA6;
}
/* bottomwrapper will take the rest of the width */
.bottomwrapper {
    display: -webkit-flex;
    display: flex;
}
table {
    border-collapse: collapse;
}
table, th, td {
    width: 280px;
    border: 1px solid #666;
}
th {
    background-color: #282;
    color: #FFF;
}
td {
    color: #444;
}
th, td {
    padding: 0 4px 0 4px;
}
Is this
<div class = "top">
	<table>
        <tr>
            <th>OS</th>
            <th>Version</th> 
        </tr>
        <tr>
            <td>OpenBSD</td>
            <td>5.7</td> 
        </tr>
        <tr>
            <td>Windows</td>
            <td>Please upgrade to 10!</td> 
        </tr>
    </table>
</div>
what you are looking for?
<br>
Or may be...
<div class = "bottomwrapper">
    <div class = "bottom">
    	<table>
            <tr>
                <th>OS</th>
                <th>Version</th> 
            </tr>
            <tr>
                <td>OpenBSD</td>
                <td>5.7</td> 
            </tr>
            <tr>
                <td>Windows</td>
                <td>Please upgrade to 10!</td> 
            </tr>
        </table>
    </div>
</div>
this is what you are looking for.

Престижность для display: inline-flex;. Кстати, это работает без префикса для Chrome 62, firefox 57 и safari 11

Horacio 24.11.2017 06:06

Мы можем использовать любой из двух способов для элемента div:

display: table;

или же,

display: inline-block; 

Я предпочитаю использовать display: table;, потому что он самостоятельно обрабатывает все лишние пробелы. В то время как display: inline-block требует дополнительного места.

Вы можете использовать inline-block как @ user473598, но остерегайтесь старых браузеров.

/* Your're working with */
display: inline-block;

/* For IE 7 */
zoom: 1;
*display: inline;

/* For Mozilla Firefox < 3.0 */
display:-moz-inline-stack;

Mozilla вообще не поддерживает встроенный блок, но у них есть -moz-inline-stack, который примерно такой же

Некоторая кроссбраузерность вокруг атрибута отображения inline-block: https://css-tricks.com/snippets/css/cross-browser-inline-block/

Вы можете увидеть некоторые тесты с этим атрибутом в: https://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/

О чем ты говоришь? Mozilla Firefox поддерживает inline-block с 3.0 (2008 г.). Источник: developer.mozilla.org/en-US/docs/Web/CSS/…

Chazy Chaz 11.08.2017 22:23

Я бы просто padding: -whateverYouWantpx; поставил

Добро пожаловать в Stack Overflow! Пожалуйста, объясните, почему этот код помогает OP. Это поможет дать ответ будущим зрителям. См. Как ответить для получения дополнительной информации.

Heretic Monkey 22.10.2016 01:00

Это уменьшит размер коробки, чтобы он мог сделать ее «не больше, чем ее содержимое».

NathanielSantley 22.10.2016 19:32

Разве отрицательное заполнение не является недопустимым CSS?

David Rector 17.11.2016 02:06

Отнюдь не. Фактически, я использовал его много раз, и это совершенно законно.

NathanielSantley 19.11.2016 00:44
div{
  width:auto;
  height:auto;
}

Это не сработает, если div содержит встроенные (или встроенные-блочные) элементы, и у них другой размер шрифта и высота строки, чем у самого div.

quotesBro 13.02.2018 13:15
<div class = "parentDiv" style = "display:inline-block">
    // HTML elements
</div>

Это сделает ширину родительского div такой же, как и ширина самого большого элемента.

Есть ли способ применить это только для вертикального размера, чтобы минимизировать и сохранить горизонтальный размер большим?

Gobliins 22.02.2018 13:15

ХОРОШО, во многих случаях вам даже не нужно ничего делать, поскольку по умолчанию div имеет height и width как автоматический, но если это не ваш случай, применение отображения inline-block сработает для вас ... посмотрите на код, который я создаю для вас, и это делать то, что вы ищете:

div {
  display: inline-block;
}
<div>
  <table>
    <tr>
      <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ultrices feugiat massa sed laoreet. Maecenas et magna egestas, facilisis purus quis, vestibulum nibh.</td>
      <td>Nunc auctor aliquam est ac viverra. Sed enim nisi, feugiat sed accumsan eu, convallis eget felis. Pellentesque consequat eu leo nec pharetra. Aenean interdum enim dapibus diam.</td>
      <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ultrices feugiat massa sed laoreet. Maecenas et magna egestas, facilisis purus quis, vestibulum nibh.</td>
    </tr>
  </table>
</div>

Попробуйте display: inline-block;. Чтобы он был совместим с несколькими браузерами, используйте приведенный ниже код CSS.

div {
  display: inline-block;
  display:-moz-inline-stack;
  zoom:1;
  *display:inline;
  border-style: solid;
  border-color: #0000ff;
}
<div>
  <table>
    <tr>
      <td>Column1</td>
      <td>Column2</td>
      <td>Column3</td>
    </tr>
  </table>
</div>

Просто добавьте стиль в свой файл CSS

div { 
    width: fit-content; 
}

Я не думаю, что это кроссбраузерный вариант.

David Rector 19.05.2018 00:13

В настоящее время не работает в Edge: caniuse.com/#search=fit-content

molsson 24.05.2018 23:40

Вы можете использовать -moz-fit-content для FF, по-видимому, префиксы других поставщиков разрешат свои собственные ...

Benj 01.06.2019 11:16

Это то же самое, что и Ответ Виталия Федоренко

mfluehr 20.09.2019 18:11

Об этом упоминалось в комментариях, и его трудно найти в одном из ответов, поэтому:

Если по какой-либо причине вы используете display: flex, вы можете вместо этого использовать:

div {
    display: inline-flex;
}

Это также широко поддерживается браузерами.

Обратите внимание, что это не сработает, если ваш элемент div находится в контейнере, который является одновременно display: flex и flex-flow: column. Это связано с тем, что значение по умолчанию для align-items - stretch. В этой ситуации вы должны установить для align-items значение, отличное от stretch, чтобы это решение работало.

Caleb Jay 22.02.2021 06:23

Вы можете использовать display: flex для родительского элемента

#parentElement {
   display: flex;
   flex-direction: column;
   align-items: flex-start;
 }

Что, если мы определим глобальную переменную и будем использовать ее для обоих.

:root {
    --table-width: 400px;
}

.container{
     width:var(--table-width);
     border: 1px solid black;   // easy visualization
}
.inner-table {
     width:var(--table-width);
     border: 1px solid red;   // easy visualization
}
<div class = "container">
    <table class = "inner-table">
       <tr>
           <td>abc</td>
       </tr>
    </table>
</div>

У меня есть span внутри div, и просто установка margin: auto в контейнер, div у меня сработала.

Вы можете попробовать этот код. Следуйте коду в разделе CSS.

div {
  display: inline-block;
  padding: 2vw;
  background-color: green;
}

table {
  width: 70vw;
  background-color: white;
}
<div>
    <table border = "colapsed">
      <tr>
        <td>Apple</td>
        <td>Banana</td>
        <td>Strawberry</td>
      </tr>
      <tr>
        <td>Apple</td>
        <td>Banana</td>
        <td>Strawberry</td>
      </tr>
      <tr>
        <td>Apple</td>
        <td>Banana</td>
        <td>Strawberry</td>
      </tr>

    </table>
</div>

Вы можете использовать height: 100% и ширину по своему выбору. Это делает div не больше, чем его содержимое.

если вы установите высоту 100%, это будет 100% от общего размера окна

nalm 05.11.2019 15:52

Попробуйте использовать свойство width: max-content, чтобы настроить ширину div по размеру его содержимого.

Попробуйте этот пример,

<!DOCTYPE html>
<html>
<head>
<style>
div.ex1 {
  width:500px;
  margin: auto;
  border: 3px solid #73AD21;
}

div.ex2 {
  width: max-content;
  margin: auto;
  border: 3px solid #73AD21;
}
</style>
</head>
<body>

<div class = "ex1">This div element has width 500px;</div>
<br>
<div class = "ex2">Width by content size</div>

</body>
</html>

div{
width:fit-content;
}
<div>
    <table>
    </table>
</div>

Для работы в Firefox должен быть width: -moz-fit-content;.

egdavid 22.03.2021 17:43

Другие вопросы по теме