Skip to content

minHeight/maxHeight по главной оси не применяются при авто-высоте канваса #17

Description

@RoboNET

Проблема

minHeightmaxHeight) не применяются, когда высота канваса вычисляется из содержимого — то есть при canvas.fixed: width или fixed: none. Свойство парсится, но на layout не влияет.

Как воспроизвести

repro.yaml:

template: { name: t, version: 1 }
canvas: { fixed: width, width: 576, background: "#ffffff" }
layout:
  - type: text
    content: "Hello receipt"
    size: 20
    minHeight: "800"
flexrender-cli debug-layout repro.yaml

Фактически (v0.13.0):

FlexElement: W=576,0, H=26,6 [column]
  TextElement: W=576,0, H=26,6

Ожидалось: высота элемента не меньше 800, канвас соответственно выше.

Результат одинаковый с minHeight и без него. Если обернуть содержимое во flex с minHeight — то же самое. Явный height: "800" работает (H=826,6), то есть проблема именно в min/max-ограничениях.

Причина

В ColumnFlexLayoutStrategy.LayoutColumnFlex блок, где вызывается LayoutHelpers.ResolveMinMax и делается ClampSize, целиком находится под if (!isAutoHeight) (src/FlexRender.Core/Layout/ColumnFlexLayoutStrategy.cs:80), а isAutoHeight = node.Height == 0 (:31) — при canvas.fixed: width это всегда верно для корня.

LayoutHelpers.ResolveFlexBasis тоже не учитывает MinHeight: базис клэмпится только по padding.

Итого min/max по главной оси работают лишь как ограничитель при распределении свободного места в контейнере с известной высотой. По CSS min-height должен ограничивать и content-based размер.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions