Material-ui: [๋ชจ๋‹ฌ] ์Šคํฌ๋กค๋ฐ” ๋ฐ ํŒจ๋”ฉ ๋ฌธ์ œ

์— ๋งŒ๋“  2018๋…„ 01์›” 23์ผ  ยท  47์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mui-org/material-ui

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;

๋‹น์‹ ์˜ ํ™˜๊ฒฝ

| ๊ธฐ์ˆ  | ๋ฒ„์ „ |
| -------------- | --------- |
| Material-UI | 1.0.0- ๋ฒ ํƒ€ .29 |

๊ด€๋ จ ๋ฌธ์ œ

์ด๋“ค์€ ๋ชจ๋‘ ๋‹ซํ˜€ ์žˆ์œผ๋ฉฐ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

8475 # 7431 # 6656 # 8710

bug ๐Ÿ› Modal

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚ด๊ฐ€ ๊ณ ์นœ ๋ฐฉ๋ฒ•์€ ๋‚ด ๊ตฌ์„ฑ ์š”์†Œ์— disableScrollLock={ true } ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

๋ชจ๋“  47 ๋Œ“๊ธ€

์ œ ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋Š”๋ฐ ์ด๋Š” ์‹œ๊ฐ์  ์ธ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค.

@lorensr ๋ณต์ œ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์Šคํฌ๋กค๋ฐ” ๋น„ํ™œ์„ฑํ™”์— ๋Œ€ํ•œ ์ž˜ ์•Œ๋ ค์ง„ ์ œํ•œ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. .mui-fixed ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ ˆ๋Œ€ ์œ„์น˜ ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
๋ฌธ์„œํ™”ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค!

์ฐธ๊ณ ๋กœ, ์ œ๊ฐ€ ์ฐพ์€ ๋˜ ๋‹ค๋ฅธ ์‚ฌ์‹ค์€ .mui-fixed ์ˆ˜์ •์€ ๊ณ ์ • ์š”์†Œ์—๋„ ๋‹ค์Œ์ด์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

box-sizing: content-box;

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์—…์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. content-box ํ•„์š”ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์š”์†Œ๋Š” border-box ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์Šคํฌ๋กค ๋ง‰๋Œ€๊ฐ€ ์ œ๊ฑฐ ๋  ๋•Œ right: 0 ์š”์†Œ ๋‚ด๋ถ€์˜ ๋ธ”๋ก ํ—ค๋”๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์˜ ์˜ค๋ฅธ์ชฝ ๊ฐ€์žฅ์ž๋ฆฌ๋กœ ๋Š˜์–ด๋‚˜์ง€ ์•Š์•˜๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

image

right: -20px ๋ณ€๊ฒฝํ•˜์—ฌ ์ˆ˜์ •๋˜์—ˆ์œผ๋ฏ€๋กœ ์ด์ œ CSS๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

main {
  position: absolute;
  box-sizing: border-box;
  left: 0;
  right: -20px;
  overflow-x: hidden;
}

๋‹จ์ ์€ ์Šคํฌ๋กค๋ฐ”๊ฐ€์žˆ์„ ๋•Œ ๊ฐ€์šด๋ฐ ์ •๋ ฌ ๋œ ์ž์‹์ด ์ด์ œ ๊ฐ€์šด๋ฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 10 ํ”ฝ์…€์ด๋˜์–ด ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ์ˆจ๊ฒจ์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์ผ๋ถ€ ๊ณ ์ • ์š”์†Œ์— mui-fixed css ํด๋ž˜์Šค๋ฅผ ์ ์šฉ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด ํŽ˜์ด์ง€ ํ•˜๋‹จ์˜ ์„ ๋ช…ํ•œ ์ฑ„ํŒ… ์œ„์ ฏ. ์•„๋งˆ๋„ ์ธํ„ฐ์ฝค ์œ„์ ฏ์—์„œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ?
localhost_4000

๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ ˆ๋Œ€์ ์ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋ฅผ ์œ„ํ•ด ๊ณ ์นœ ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚ด ํŒจ๋”ฉ์— !important ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

padding: 0 !important;

์ด๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ธ์ง€ 100 % ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ <body> ํƒœ๊ทธ์— ๋‹ค์Œ CSS ์†์„ฑ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

```css
์‹ ์ฒด {
์œ„์น˜ : ์ ˆ๋Œ€;
์™ผ์ชฝ : -17px;
์˜ค๋ฅธ์ชฝ : -17px;
padding-top : 0;
padding-right : 17px;
padding-left : 17px;
padding-bottom : 0px;
overflow-x : ์ˆจ๊น€;
overflow-y : auto! important // ์Šคํฌ๋กค ๋ง‰๋Œ€๋ฅผ ์‚ฌ๋ผ์ง€๊ฒŒํ•˜๋ ค๋ฉด! important ์ œ๊ฑฐ
}
````

๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ๋„์›€์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ @chrisshaddad ์™€ ๊ฐ™์ด ์ž˜๋ชป ๋Š๊ปด์ง€๋Š” ๋‹ค์–‘ํ•œ CSS ์žฌ์ •์˜๋ฅผ ์‹œ๋„ํ•œ ํ›„ ์ด์ „์— ์ „์ฒด ์•ฑ์— overflow-y: scroll ์„ (๋ฅผ) ๊ฐ•์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ๋˜๊ณ  ์žˆ์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€์˜ ๊ธธ์ด๊ฐ€ ๋‹ค์–‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ฑ ์ „์ฒด์—์„œ y ์ถ• ์Šคํฌ๋กค๋ฐ”๋ฅผ ๊ฐ•์ œ๋กœ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€๋Š” y ์ถ• ์Šคํฌ๋กค์ด ํ•„์š”ํ•˜๊ณ  ์ผ๋ถ€๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ body ๋˜๋Š” ์ธ๋ผ์ธ ์Šคํƒ€์ผ์„ ๋ฐฐ์น˜ํ•˜๋Š” ๋Œ€์‹  overflow-y: scroll ๋ฅผ ๊ณ ์ • ๋œ AppBar / Header ์•„๋ž˜์˜ ์ฝ˜ํ…์ธ ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ด๋™์„ ์ˆ˜์ •ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์Šคํฌ๋กค๋ฐ”๊ฐ€ 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 ์„ค์ •ํ•˜๊ณ  ๋ชจ๋‹ฌ์ด ์™„๋ฃŒ๋˜๋ฉด ์žฌ์„ค์ •ํ•˜๋ฏ€๋กœ ์ €์—๊ฒŒ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

https://github.com/mui-org/material-ui/blob/7d4aeaf4c9cdf00a9c7eb41bd9bb7cac61840739/packages/material-ui/src/Modal/ModalManager.js#L24

@oliviertassinari ์†”๋ฃจ์…˜์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
@avdd ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ModalManager ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@lorensr ์ด๊ฒƒ์ด ์—ฌ์ „ํžˆ ๋ฌธ์ œ์ž…๋‹ˆ๊นŒ?

@oliviertassinari ๋งˆ์ง€๋ง‰์œผ๋กœ Dialog ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ๋” ํŠน๋ณ„ํ•œ ๋””์ž์ธ์„ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Modals ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ๋กœ๊ทธ์ธ์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ๋งํฌ๊ฐ€์žˆ๋Š” ๋‘ ๋ฒˆ์งธ Modal (SignUp)์„ ์—ฌ๋Š” ๋งํฌ๊ฐ€์žˆ๋Š” Modal (๋กœ๊ทธ์ธ)์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ, ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ ModalManager ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•˜๊ณ  ์ œ๊ฑฐ Modal ? ๋ฌธ์ œ์˜ ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚˜์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์ œ์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

@nathanmarks ์˜ˆ, ๋ชจ๋‹ฌ ๊ตฌ์„ฑ ์š”์†Œ ๋ฌธ์„œ ํŽ˜์ด์ง€์— ์—ฌ์ „ํžˆ .mui-fixed ์–ธ๊ธ‰๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

3.5.1 ์‚ฌ์šฉ-๋‹ซ๊ธฐ ์ „์— ๋Œ€ํ™” ์ƒ์ž๊ฐ€ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ์žฌํ˜„ ๊ฐ€๋Šฅ https://material-ui.com/demos/dialogs/-Simple Dialog ๋ฐ๋ชจ๋ฅผ ์—ด๊ณ  ๋‹ซ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ํ›„ v3.3์—์„œ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@ stephen099 ๋ณด๊ณ  ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ํ™•์ธํ–ˆ์ง€๋งŒ ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

ํ—ค๋” (์ตœ์‹  mui ์‚ฌ์šฉ)์—์„œ mui-fixed ๊ฐ€ ํด๋ž˜์Šค ์ด๋ฆ„์— ์ถ”๊ฐ€๋˜์—ˆ์ง€๋งŒ ํ• ๋‹น ๋œ ์Šคํƒ€์ผ์ด ์—†์Šต๋‹ˆ๋‹ค (ํ—ค๋”๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ mui-fixed ๊ฐ€ ์—†์Œ).

์™œ์ด 'ํŒจ๋”ฉ ์ถ”๊ฐ€'๊ฐ€ ์ฒ˜์Œ์— ๋ฐœ์ƒํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์™œ ํ•„์š”ํ•œ๊ฐ€์š”? ๋‚˜๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ์€ Menu ๊ตฌ์„ฑ ์š”์†Œ์— ์˜ํ•ด ๊นจ์กŒ์Šต๋‹ˆ๋‹ค.

!important ...๋กœ CSS ์Šคํƒ€์ผ์„ ์žฌ์ •์˜ํ•˜์ง€ ์•Š๊ณ ๋„์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋กํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ๊ฐ์‚ฌ

@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 ์šฐ๋ฆฌ๋Š” # 9275์—์„œ ๊ทธ๊ฒƒ์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.

์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€์š”, ํ•ด๊ฒฐ ๋˜์—ˆ๋‚˜์š”? 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 ahah ๋ถ„๋ช…ํžˆ ๋‚ด ๊ฒ€์ƒ‰ ๊ธฐ์ˆ ์ด ๊ทธ๋‹ค์ง€ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@oliviertassinari ์ €๋Š” ๋ฌธ์ œ๋ฅผ ํ•ต์‹ฌ์œผ๋กœ ์ค„์ผ ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” display : flex + minHeight : 100vh + body no padding and margin์ด ๊ฒฐํ•ฉ ๋  ๋•Œ ์–ด๋–ป๊ฒŒ ๋“  ์ž˜๋ชป๋œ ๊ณ„์‚ฐ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ๊ฑฐ๊ธฐ์— ์Šคํฌ๋กค๋ฐ”๊ฐ€์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

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 codesandbox ๋ฅผ ๋งŒ๋“œ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (๋ฌธ์„œ ์˜ˆ์ œ ์ค‘ ํ•˜๋‚˜๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

@archfz ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค, ์ด๊ฒƒ์„ ๋†“์ณค์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌด์—‡์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@archfz ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค, ์ด๊ฒƒ์„ ๋†“์ณค์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌด์—‡์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์˜ ๋ฌธ์ž๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋ฉ”๋‰ด ํ•ญ๋ชฉ์ด ์—ด๋ฆฌ๋ฉด ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๊ณ  ๋ฉ”๋‰ด ํ•ญ๋ชฉ์ด ๋‹ซํžˆ๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋‹ค์‹œ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ด โ€‹โ€‹์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ญ”๊ฐ€ ์ƒˆ๋กœ์šด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@archfz ์ข‹์•„, ๋„๊ตฌ ์„ค๋ช…๊ณผ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์‹œํ•ฉ์‹œ๋‹ค.

@oliviertassinari ๊ธ€์Ž„, ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด ์ง„์งœ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์„ ๋ฌด์‹œํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. React-admin์€ ๋จธํ‹ฐ๋ฆฌ์–ผ UI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์‹ค์ œ๋กœ๋Š” ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค https://github.com/mui-org/material-ui/issues/19203

@Toshiuk ๊ฐ€ ๋‹ค์‹œ ๋ฐ˜๋ณตํ•˜๋Š” ์†”๋ฃจ์…˜์€ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ๋ฉ”๋‰ด, ์Šคํƒ€์ผ ๋ฉ”๋‰ด :
    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}

๋‹น์‹ ์€ ๋‹จ์ง€ ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰