Menu
が開くと、ページのスクロールバーが消えます。 これはページレイアウトに影響を与える可能性があります。 私の場合、すべてが右にジャンプします。これは視覚的なバグです。
A)ライブラリでこれを修正するか、B)ドキュメントでこの動作に注意し、それを解決する方法を提供します。
https://material-ui-next.com/demos/menus/
ジャンプするもののコンテナはabsolute, left: 0, right: 0
で、セクションはtext-align: center
またはdisplay: flex; flex-direction: column; align-items: center;
いずれかです。
| 技術| バージョン|
| -------------- | --------- |
| 素材-UI | 1.0.0-beta.29 |
これらはすべて閉じられており、解決策が見つかりませんでした。
私の場合、すべてが右にジャンプします。これは視覚的なバグです。
@lorensr複製の例はありますか? これは、スクロールバーを無効にすることのよく知られた制限です。 .mui-fixed
クラス名を持つ絶対位置の要素を処理します。
それを文書化する必要があります!
参考までに、私が見つけたもう1つのことは、 .mui-fixed
修正は、固定要素にも
box-sizing: content-box;
おかげで、クラスの追加はうまくいきました。 content-box
は必要ありませんborder-box
です。
スクロールバーを削除すると、 right: 0
要素内のブロックヘッダーがブラウザの右端まで伸びないことにも注意してください。
right: -20px
変更することで修正されたため、cssは次のようになります。
main {
position: absolute;
box-sizing: border-box;
left: 0;
right: -20px;
overflow-x: hidden;
}
欠点は、スクロールバーが存在する場合、中央に配置された子が中央から10ピクセル右になり、オーバーフローを非表示にする必要があることです。
場合によっては、mui-fixedcssクラスを一部の固定要素に適用できないことがあります。 たとえば、私のページの下部にある鮮明なチャットウィジェット。 おそらくインターコムウィジェットでも発生します。
他の誰かが同じ問題を抱えていて、解決策を見つけましたか?
同様の問題がありましたが、コンテナは絶対的なものではありませんでした。 私にとってそれを修正したのは、次のように私のパディングに!important
を追加すること
padding: 0 !important;
これが正しい方法かどうかは100%わかりませんが、次のcssプロパティを<body>
タグに追加しました
`` `css
体 {
位置:絶対;
左:-17px;
右:-17px;
パディングトップ:0;
パディング-右:17px;
パディング-左:17px;
padding-bottom:0px;
オーバーフロー-x:非表示;
オーバーフロー-y:auto!important //スクロールバーを非表示にする場合は!importantを削除します
}
「」
うまくいけば、これは他の誰かを助けるでしょう:
@chrisshaddadのように、overflow-y: scroll
を強制したためにシフトしていることがわかりました。 ページの長さが異なるためにシフトしないように、アプリ全体でy軸スクロールバーを強制しました。y軸スクロールが必要なものとそうでないものがあります。
余分なbody
やインラインスタイルを大量に配置する代わりに、固定のAppBar / Headerの下のコンテンツにoverflow-y: scroll
を分離することで、シフトを修正することができました。 これで、ウィンドウ全体ではなく、ページコンテンツ用の常緑のスクロールバーができました。スクロールバーはbody
ではなくページコンテンツにアタッチされているため、モーダル/メニューからシフトすることはありません。
参考までに、DOMは次のようになります。
<div>
<Header />
<div className="pageContent">
<div className="page">
<Route exact path="/pathToPage"> component={PageContent} />
</div>
</div>
</div>
およびCSS(ヘッダーの高さは45px):
.pageContent {
position: absolute;
top: 45px;
left: 0;
right: 0;
bottom: 0;
}
.pageContent .page {
height: 100%;
overflow-y: scroll;
}
こんにちは、
私は現在これと同じ問題を抱えており、言及された解決策のいずれにも自分の幸せを見つけることができないことを認めなければなりません。
私が理解したところによると、 Modal
はスクロールバーの使用を許可していません。これは、 Modal
を使用して高度な検索を実行し、 Modal
が必ずしも必要ではないため問題があります。短い内容にする。
あなたが言及した問題と解決策について考えると、Material-UIがModal
、 Dialog
、 Menu
関連するすべてのスクロール可能なプロパティを実装できないのはなぜだろうと思っていました。 Menu
およびその他のポップアップ要素。 デフォルトでは、このブールプロパティはfalseになりますが、コンポーネントにスクロールバーを表示できるようにするにはtrueにすることができます。
これが不可能な場合は、以前のアイデアを好む場合でも、 ScrollBar
コンポーネントを完全に実装することができます。
これは口で言うほど簡単ではないのではないかと思います。 したがって、私はあなたがしている並外れた仕事に感謝したいと思います。
FWIWグローバルbody { overflow-y: scroll }
を設定したところ、すべてがうまく機能しているようです。
@avddこれは、モーダルではなくボディをスクロールできるため、
@rememberYouモーダルは低レベルのプリミティブです。代わりにダイアログを使用することをお勧めします: https : //material-ui.com/demos/dialogs/#scrolling-long-content 。
@rememberYou ModalManagerは、モーダルが表示されているときにコンテナ要素(本体)に直接overflow:hidden
を設定し、モーダルが終了するとリセットするので、はい、機能します。
@oliviertassinariソリューションをありがとうございます。
@avdd申し訳ありませんが、 ModalManager
試してみません
@lorensrこれはまだ問題ですか?
@oliviertassinari最後に、 Dialog
を試してみましたが、うまく機能しますが、より具体的なデザインが必要なため、 Modals
を使用するのが好きです。
問題は、ログインに戻るためのリンクがある2番目のModal
(サインアップ)を開くためのリンクがあるModal
(ログイン)があることです。
この場合、私が使用する必要がありますModalManager
簡単に追加および削除するModal
? 問題の主題から抜け出して申し訳ありませんが、主題に関するドキュメントは見つかりませんでした。
@nathanmarksはい、モーダルコンポーネントのドキュメントページにはまだ.mui-fixed
記載されていないようです
3.5.1を使用-ダイアログは閉じる前に左にシフトします。
ここで再現可能https://material-ui.com/demos/dialogs/-シンプルダイアログのデモを開いたり閉じたりします。
テスト後、これはv3.3で開始されました。
@ stephen099ご報告ありがとうございます! 確認しましたが、別の問題です。
ヘッダー(最新のmuiを使用)では、クラス名にmui-fixed
が追加されていますが、スタイルが割り当てられていないことに気付きました(ヘッダーを調べると、 mui-fixed
はありません)
そもそもなぜこの「パディングの追加」が行われるのか、なぜ必要なのか疑問に思います。 私にとっては、 Menu
コンポーネントによって壊れています。
cssスタイリングを!important
オーバーライドせずにこれが発生しないようにするにはどうすればよいですか...? ありがとう
@vajnorcan mui-fixed
クラス名は、body要素のスクロールをロックすると要素の位置が変更されることをモーダルコンポーネント(メニューで使用)に通知します。 スクロールバーの幅の削除は、一時的なパディング右スタイルで補正します。 CodeSandboxでの最小限の複製例を提供できますか? ありがとうございました。
.mui-fixedをどこに置きますか? メニューを開く選択でこの問題が発生します。
@ capsule5メニューを開いたときにスクロールバーが無効になっているために「ジャンプ」する要素に追加する必要があり(通常、これは右側に固定された要素である必要があります)、そのパディングが処理されます。
また、前述のように、これをグローバルスタイルに追加する必要がある場合があることにも注意してください。
.mui-fixed {
/*
* make sure that added right padding
* actually pushes contents to the left
*/
box-sizing: content-box;
}
このスレッドには複製はありません。 閉店します。
@ cvara #
わかりません、これは解決しましたか? v0.9からv4にアップグレードしましたが、モーダルを開くと、コンテンツが左にジャンプします( padding-right: 17px
取得します)? そのための推奨される解決策は何ですか?
後で編集:
私の場合、 overflow-y: scroll !important;
があったので、このジャンプの問題を修正するためにpadding-right: 0px !important;
も追加する必要がありました。
私が修正した方法は、コンポーネントにdisableScrollLock={ true }
を追加すること
@Toshiukどのコンポーネント?
@wongjiahauモーダルコンポーネントv4 +
メニューにdisableScrollLockを追加することもできます
これは私にも再現しています。 メニュー項目を追加するサードパーティのコンポーネントを使用しているため、disableScrollLockを追加することは妥当ではありません。 これは修正する必要があります。 スクロールバーが実際に表示されるかどうかを検出するかもしれません。
@archfz複製はありますか?
Select
コンポーネントを使用しているときにもこれを目撃しています。 Select
ドロップダウンが開かれるたびに、 overflow: hidden, padding-right: 15px
がアプリのメインのbody
タグに追加されます。 スタイルをオーバーライドする以外に、これに対する解決策はありますか? これは予期された動作ではないように感じます
@WholemealDropフォロー#17353。
@oliviertassinariああ、どうやら私の検索スキルはそれほど素晴らしいものではありません。 ありがとうございました!
@oliviertassinari私は問題をコアに減らすことができました。 問題は、表示時に何らかの理由で誤った計算があることであるようです:flex + minHeight:100vh + bodyパディングなしとマージンが組み合わされています。 コードはそこにスクロールバーがあることを期待しているように見えますが、実際にはありません。 このコードは問題を再現するはずです。
import React, {FunctionComponent, SyntheticEvent, useState} from 'react';
import {IconButton, Menu, MenuItem, Tooltip} from "@material-ui/core";
import TranslateIcon from "@material-ui/icons/Translate";
import MuiAppBar from "@material-ui/core/AppBar";
import Toolbar from "@material-ui/core/Toolbar";
const AdminAppContainer: FunctionComponent = () => {
const handleMenu = (event: SyntheticEvent) => setAnchorEl(event.currentTarget);
const [anchorEl, setAnchorEl] = useState<Element | null>(null);
const open = Boolean(anchorEl);
const handleClose = () => setAnchorEl(null);
const body = document.getElementsByTagName('body')[0];
body.style.margin = "0";
body.style.padding = "0";
return (
<div style={{ display: 'flex', minHeight: '100vh'}}>
<MuiAppBar color="secondary" >
<Toolbar>
<div style={{flex: 1}}></div>
<div>
<Tooltip title='asd'>
<IconButton onClick={handleMenu}><TranslateIcon /></IconButton>
</Tooltip>
<Menu anchorEl={anchorEl} open={open} onClose={handleClose}>
<MenuItem key={'test'} onClick={handleClose}>Test</MenuItem>
</Menu>
</div>
</Toolbar>
</MuiAppBar>
</div>
)
};
@archfzコードサンドボックスを作成していただけませんか。 (ドキュメントの例の1つから始めることができます。)
@archfz申し訳ありませんが、これを逃しました。
ここで何を探していますか? レイアウトの変更はありません。
@archfz申し訳ありませんが、これを逃しました。
ここで何を探していますか? レイアウトの変更はありません。
右上の文字をクリックすると、メニュー項目が開くと左に移動し、メニュー項目が閉じると右に戻ります。
新しい号を開いていただけませんか? 何か新しいようです。
@archfzわかりました、ツールチップとの競合です。 無視しましょう。
@oliviertassinariそれは本当の問題なので、無視してはいけません。 React-adminはマテリアルUIを使用しており、実際には箱から出してすぐに問題になります。 ここで問題を作成しましたhttps://github.com/mui-org/material-ui/issues/19203
@Toshiukによって
メニュー、StyledMenu:
disableScrollLock={ true }
選択する:
MenuProps={{ disableScrollLock: true }}
ソリューションをもっと簡単に見つけられるようにする必要があります。 :-)
メニューを開いたときにツールバーの背景色に問題があり、スクロールバーが非表示になります
ここに例があります:
https://codesandbox.io/s/material-demo-nj80l
それがどのように修正されるか誰かを知っていますか?
次のCSSを追加するだけです
body {padding-right:0px!important; }
こんにちは、私のアプリではこのソリューションを使用しています。
コンポーネント<Menu>
とCSSにdisableScrollLock={true} disablePortal={true} id="custom"
を追加します#custom {
.MuiPopover-paper,
.MuiPopover-paper {
max-height: inherit !important;
}
}
私の場合、これは完全に機能します。 このトリックがお役に立てば幸いです。
Dialogsで同じ問題が発生しました。 以下は、私が試した唯一の解決策であり、コンテンツのシフトを削除し、基になるページのスクロールをロックするか、スクロールバーを削除します。
解決:
アプリ内の最も外側のコンテナーdivまたは任意の最も外側のdiv(アプリ全体をカプセル化するコンテナー)に移動し、その幅を次のように設定します。
width: calc(100vw - 1px);
1px
は、 34px
またはその他の低い値に置き換えることができます。 これにより、ダイアログを開くと、下にあるページのスクロールバーが存在する場合は非表示になり、コンテンツの位置にいかなる種類のシフトも発生しなくなります。 スクロールは基になるページに対して引き続きロックされており、ダイアログに対してもスクロールが可能です。
disableScrollLock = {true}
あなたはただ素晴らしいです、ありがとう
最も参考になるコメント
私が修正した方法は、コンポーネントに
disableScrollLock={ true }
を追加すること