Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

overflow:hidden失效 #1446

Open
pba-cra opened this issue Jul 15, 2022 · 1 comment
Open

overflow:hidden失效 #1446

pba-cra opened this issue Jul 15, 2022 · 1 comment
Assignees
Labels
bug Something isn't working

Comments

@pba-cra
Copy link

pba-cra commented Jul 15, 2022

使用的 Kraken 版本 | What version of kraken are you using

master

重现步骤 | Steps To Reproduce

重现代码 | Code example:

    let box = document.createElement('div');
    document.body.style.background= '#f92';
    document.body.style.width= '300px';
    document.body.style.height= '300px';
    document.body.appendChild(box);

    box.style.width = '82px';
    box.style.height = '82px';
    box.style.marginLeft = '100px';
    box.style.marginTop = '100px';
    box.style.background = '#6ad0e2';
    box.style.overflow = 'hidden';


    const icon = document.createElement('div');
    icon.style.width = '82px';
    icon.style.height = '82px';
    icon.style.zIndex = 0;
    icon.style.background= '#f32'
    icon.style.transform = 'translate(-32px,-32px)';

    box.appendChild(icon);

预期结果 | Expected results:
截屏2022-07-15 下午8 35 31

实际结果 | Actual results:
截屏2022-07-15 下午8 35 53

@pba-cra pba-cra added the bug Something isn't working label Jul 15, 2022
@pba-cra pba-cra self-assigned this Jul 15, 2022
@pba-cra
Copy link
Author

pba-cra commented Jul 18, 2022

overflow.dart

  bool get clipX {
    RenderBoxModel renderBoxModel = this as RenderBoxModel;

    // Recycler layout not need repaintBoundary and scroll/pointer listeners,
    // ignoring overflowX or overflowY sets, which handle it self.
    if (renderBoxModel is RenderSliverListLayout) {
      return false;
    }

    List<Radius>? borderRadius = renderBoxModel.renderStyle.borderRadius;

    // The content of replaced elements is always trimmed to the content edge curve.
    // https://www.w3.org/TR/css-backgrounds-3/#corner-clipping
    if( borderRadius != null
      && this is RenderReplaced
      && renderStyle.intrinsicRatio != null
    ) {
      return true;
    }

    // Overflow value other than 'visible' always need to clip content.
    // https://www.w3.org/TR/css-overflow-3/#overflow-properties
    CSSOverflowType effectiveOverflowX = renderStyle.effectiveOverflowX;
    if (effectiveOverflowX != CSSOverflowType.visible) {
      Size scrollableSize = renderBoxModel.scrollableSize;
      Size scrollableViewportSize = renderBoxModel.scrollableViewportSize;
      // Border-radius always to clip inner content when overflow is not visible.
      if (scrollableSize.width > scrollableViewportSize.width
        || borderRadius != null
      ) {
        return true;
      }
    }

    return false;
  }

if (scrollableSize.width > scrollableViewportSize.width
|| borderRadius != null
)
判断条件未考虑到节点负向偏移的情况

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant