==
сравнивает ссылки на объекты.
.equals()
сравнивает значения String.
Иногда ==
дает иллюзии сравнения значений String, как в следующих случаях:
String a="Test";
String b="Test";
if(a==b) ===> true
Это связано с тем, что при создании любого строкового литерала JVM сначала ищет этот литерал в пуле строк, и если он найдет совпадение, эта же ссылка будет передана новой String. Из-за этого получаем:
(a == b) ===> true
String Pool
b -----------------> "test" <-----------------a
Однако ==
не выполняется в следующем случае:
String a="test";
String b=new String("test");
if (a==b) ===> false
В этом случае для new String("test")
оператор new String будет создан в куче, и эта ссылка будет указана на b
, поэтому b
будет дана ссылка на кучу, а не на String pool.
Теперь a
указывает на String в пуле String, а b
указывает на String в куче. Из-за этого мы получаем:
, если (a == b) ===> false.
String Pool
"test" <-------------------- a
Heap
"test" <-------------------- b
Пока .equals()
всегда сравнивает значение String, поэтому дает true в обоих случаях:
String a="Test";
String b="Test";
if(a.equals(b)) ===> true
String a="test";
String b=new String("test");
if(a.equals(b)) ===> true
Таким образом, использование .equals()
всегда лучше.
Вы сталкиваетесь с настройкой по умолчанию для flexbox.
Элемент flex не может быть меньше размера его содержимого вдоль
По умолчанию ...
min-width: auto
min-height: auto
... для гибких элементов в направлении строки и столбца соответственно.
Вы можете переопределить эти значения по умолчанию, установив элементы гибкости:
min-width: 0
min-height: 0
overflow: hidden
(или любое другое значение, кроме visible
) 4.5. Автоматический минимальный размер элементов Flex
Чтобы обеспечить более разумный минимальный размер по умолчанию для элементов flex, эта спецификация вводит новое значение
blockquote>auto
в качестве начального значенияmin-width
иmin-height
, определенные в CSS 2.1.Что касается значения
auto
...В элементе flex чей
blockquote>overflow
являетсяvisible
на главной оси, если указано в параметре минимального размера основной оси гибкого элемента, задается автоматический минимальный размер . В противном случае он вычисляется в0
.Другими словами:
- Значения
min-width: auto
иmin-height: auto
применяются только тогда, когдаoverflow
имеет значениеvisible
.- Если значение
overflow
неvisible
, значение свойства min-size равно0
.- Следовательно,
overflow: hidden
может быть заменитеmin-width: 0
иmin-height: 0
.и ...
- Алгоритм минимального размера применяется только к главной оси.
- Например, элемент flex в контейнере с указателем строки не получает
min-height: auto
по умолчанию.- Более подробное объяснение см. в этом сообщении: рендеринг минимальной ширины по-разному в flex -direction: row и flex-direction: column
Вы применили min-width: 0, и элемент все еще не сжимается?
Вложенные контейнеры Flex
Если вы используете элементы flex на нескольких уровнях структуры HTML, может потребоваться переопределить значение по умолчанию
min-width: auto
/min-height: auto
на элементах на более высоких уровнях.В принципе, более высокий уровень сгибает его em с
min-width: auto
может предотвратить сжатие элементов, вложенных ниже, с помощьюmin-width: 0
.Примеры:
- Элемент Flex не уменьшается меньше его содержимого
- Установка дочернего элемента в родительский
- свойство пробела white-space создает проблемы с flex
Примечания к визуализации браузера
- Chrome против Firefox / Edge . Как минимум 2017, Chrome выглядит как (1), возвращаясь к
min-width: 0
/min-height: 0
по умолчанию или (2) автоматически применяя0
по умолчанию в определенных ситуациях, основанных на тайном алгоритме. (Это может быть то, что они называют вмешательством .) В результате многие люди видят, что их макет (особенно желаемые полосы прокрутки) работают должным образом в Chrome, но не в Firefox / Edge. Эта проблема более подробно рассмотрена здесь: несоответствие гибких ограничений между Firefox и Chrome- IE11 Как отмечено в спецификации, значение
auto
для свойствmin-width
иmin-height
является «новым». Это означает, что некоторые браузеры могут по-прежнему отображать значение0
по умолчанию, поскольку они реализовали гибкую компоновку до того, как значение было обновлено, и поскольку0
является начальным значением дляmin-width
иmin-height
в CSS 2.1 . Одним из таких браузеров является IE11. Другие браузеры обновлены до более нового значенияauto
, как определено в спецификации flexbox .
Пересмотренная демонстрация
.container { display: flex; } .col { min-height: 200px; padding: 30px; word-break: break-word } .col1 { flex: 1; background: orange; font-size: 80px; min-width: 0; /* NEW */ } .col2 { flex: 3; background: yellow } .col3 { flex: 4; background: skyblue } .col4 { flex: 4; background: red }
<div class="container"> <div class="col col1">Lorem ipsum dolor</div> <div class="col col2">Lorem ipsum dolor</div> <div class="col col3">Lorem ipsum dolor</div> <div class="col col4">Lorem ipsum dolor</div> </div>