Небольшая модификация кода Jeeped.
Если вы используете подобный подход, но с несколькими таблицами (например, более 10), то будет довольно громоздко пытаться вручную добавить каждое имя каждой таблицы. Это также проблема, если вы меняете имена таблиц, поскольку имена в VBA жестко связаны. Чтобы избежать дополнительной работы, рассмотрите следующее:
Итак, предположим следующее:
Затем Subbook Workbook_SheetChange в приведенном выше примере может выглядеть следующим образом:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim tbl As ListObject
For Each tbl In ActiveSheet.ListObjects
If Not Intersect(Target, tbl.Range.Offset(1, 0)) Is Nothing Then
On Error GoTo bm_Safe_Exit
Application.EnableEvents = False
Call update_Table
End If
Next tbl
bm_Safe_Exit:
Application.EnableEvents = True
End Sub
Изменить. Вторая процедура будет выглядеть так:
Private Sub update_Table()
Dim iTBL3rws As Long, rng As Range, rngOLDBDY As Range
Dim tbl As ListObject
Dim sht As Worksheet
iTBL3rws = 0
' consider all tables, excluding master table
For Each sht In ThisWorkbook.Worksheets
For Each tbl In sht.ListObjects
If tbl.Name <> "Table3" Then
iTBL3rws = iTBL3rws + tbl.DataBodyRange.Rows.Count
End If
Next tbl
Next sht
iTBL3rws = iTBL3rws + Sheet3.ListObjects("Table3").DataBodyRange.Cells(1, 1).Row - Sheet3.ListObjects("Table3").Range.Cells(1, 1).Row
With Sheet3.ListObjects("Table3")
Set rngOLDBDY = .DataBodyRange
.Resize .Range.Cells(1, 1).Resize(iTBL3rws, .DataBodyRange.Columns.Count)
If rngOLDBDY.Rows.Count > .DataBodyRange.Rows.Count Then
For Each rng In rngOLDBDY
If Intersect(rng, .DataBodyRange) Is Nothing Then
rng.Clear
End If
Next rng
End If
End With
End Sub
Эта процедура отличается от предыдущей, устраняя предварительно запрограммированные случаи. Когда на активном листе внесено изменение, любая таблица в этом листе, который должен быть изменен, вызовет процедуру update_Table.
В CSS родительский контейнер не знает, когда его дети обертывают. Следовательно, он продолжает масштабировать свой размер, не обращая внимания на то, что происходит внутри.
Другими словами, браузер отображает контейнер на начальном каскаде. Он не переплачивает документ, когда ребенок обертывается.
Вот почему контейнер не сжимает более узкий макет. Он просто продолжается, как будто ничего не завернуто, о чем свидетельствует зарезервированное пространство справа.
Максимальная длина горизонтального пробела - это длина элемента (ов), который контейнер ожидал там.
В следующей демонстрации можно видеть, что пробелы можно видеть и уходить, когда окно изменено по горизонтали: DEMO
Вам понадобится решение для JavaScript (см. здесь здесь и здесь ) ... или CSS-запросы (см. здесь ).
При работе с упаковкой текст, text-align: right
в контейнере может быть полезен в некоторых случаях.
Взгляните на мой Fiddle , в котором я изменил:
.holder
width
- max-width
(в классах .v
) .holder
на wrap
и space-around
, его дети .v
для ясности <br>'s
flex: 0 0
в .child
Flexbox почти всегда требует max-width
, который более гибкий, чем width
. В зависимости от того, как вам нужно .child
ren вести себя, измените flex-grow
и flex-shrink
в flex: 0 0
, чтобы удовлетворить ваши потребности. (результат flex: 1 0
выглядит неплохо)
... нет необходимости в Javascript ...
UPDATE Codrops Flexbox Reference действительно помогла мне много понимания FBL ...
Причина, по которой ваши блоки ведут себя так, происходит из-за CSS-рендеринга.
В первом случае, когда вы играете, браузеры не знают, когда блок становится слишком маленьким для его содержимого. Таким образом, он продолжает растягиваться до тех пор, пока он не достигнет максимума, а затем отобразит текст.
В последнем случае вы сообщаете браузеру, где нужно сломать, чтобы он знал, что элемент не должен расширяться.
Единственный способ, которым вы можете легко решить это, - это установить перерывы самостоятельно.