angular / angular/components

bug(overlay): Push calculation is wrong with FlexibleConnectedPositionStrategy

オープン
#20,890 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る
area: cdk/overlay P3
主要言語
TypeScript
スター
25k
フォーク
6.8k
平均マージ
1日 8時間
マージ済み PR(30日)
91

説明

## Bug description

Push calculation is wrong [in this line](https://github.com/angular/components/blob/0b2d150339fb6e5736ea199bc62785ec1d2e8928/src/cdk/overlay/position/flexible-connected-position-strategy.ts#L614). Maybe in the next lines also, but I did not check it yet.

I tried to add an element, that perfectly fits, but I could not. I realized that the double of the original margin is used on the right side. I used LTR.

### Input

Take a document, that has 400px width. The margin is 20px on the viewport of the overlay. I tried to add one overlay at (300, 20) with size of (80,40). I will use this in the stackblitz and in the calculations.

#### Reproduction

https://stackblitz.com/edit/angular-ardamx

![overlay](https://user-images.githubusercontent.com/6360699/97225389-df307d00-17d2-11eb-8399-e5a339d20aca.gif)

As you see the overlay is positioned well at the begining. 100px is the container. 80px is the overlay. 10-80-10 is well positioned.

If the body element is 420px width, the position is right. 0-80-20.

If the body is shrinked more to 400px, the position will not be 0-80-20, however it could fit.

#### Expected Behavior

pushX to be 0 in this case. The element should fit without pushing it. The margin should be 20px on the right, too.

#### Actual Behavior

start.x is 300, the width is 80 as these are given. The viewport width is 360px (=400px-2*20px).

pushX will be -20 as overflowRight is 20. This is calculated by 300+80-360=20.

This is wrong. The element can fit without pushing it. The margin is now the double of the originally given, which is 40px in this case.

#### Environment

- Angular: 10.1.3
- CDK/Material: 10.2.5
- Browser(s): Chrome (Could be any)
- Operating System (e.g. Windows, macOS, Ubuntu): macOS (Could be any)

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

src/cdk/overlay/position/flexible-connected-position-strategy.ts の、リンクされた push 計算の行から開始し、StackBlitz の再現例と、指定された 400px の viewport、20px のマージン、80px の overlay を使用します。周辺のオーバーフロー計算を追跡し、overlay が右側に 20px のマージンを確保して収まることを確認します。この場合に追加のマージンを導入せず pushX が 0 のままであれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
angular, typescript
領域
frontend
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。