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 размер.

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