質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

2040閲覧

react 画面外からboxを出すときに横にスクロールできてしまう。

ktaaa

総合スコア59

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/08/11 09:15

編集2021/08/11 09:16

reactを使っています。
buttonを押下したら画面外から青色のBoxを表示させたいです。
Boxが①の状態だと横スクロールできずにbuttonを押したら右からBoxが表示されます。しかし②だと横にスクロールできてしまいます。
なぜなのでしょうか?
わかる人いましたらご教授お願いしたいです。

コードはこちらに記載しました。
https://codesandbox.io/s/nameless-lake-w87fo?file=/src/App.js

left: click ? "0" : "-300px"

right: click ? "0" : "-300px"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k4a

2021/08/11 09:33

①と②のうち、質問者様が想定(希望)していた動作はどちらですか?
ktaaa

2021/08/11 09:38 編集

返信ありがとうございます。 ①です。 rightの時もleftと同じように横スクロールさせないようにしたいです。
guest

回答1

0

ベストアンサー

右側(縦方向の場合は下側)に要素をはみ出させたときにスクロールが出現するのは有る種当たり前の動作のように思えます。

viewport上で要素を配置すると、横の場合は右、縦の場合は下方向に積み重なっていきます。左上を原点として領域が拡張されていくイメージです。なので、今回right-300px、つまり右方向に300px移動したときに表示領域が拡張されスクロールが現れるのは自然な結果です。

positiontransformで原点よりマイナスの位置(左・上)に要素を配置したときにその方向に表示領域が拡張されてしまうと全ての位置が崩れます。なのでleftで左方向に300px移動したときにはスクロールが現れないのも自然な結果です。

ではブラウザサイズより右側に要素を移動させたときにスクロールを表示させないためにはどうするかですが、通常overflow-xで隠すのでは無いでしょうか。
下記のコードが最適だとは思えませんが、取り囲む要素をrelativeにしてabsoluteの基準に設定し、overflow-xhiddenにしてはみ出した要素を表示しない様にしています。

Diff

1const App: FC = () => { 2 const [click, setIsClick] = useState(false); 3 return ( 4 <div 5 style={{ 6 display: "flex", 7 justifyContent: "center", 8+ position: "relative", 9+ height: "100vh", 10+ overflowX: "hidden" 11 }} 12 > 13 <div 14 style={{ 15 background: "blue", 16 height: "100vh", 17 width: "300px", 18 position: "absolute", 19 right: click ? "0" : "-300px", 20+ top: "0px" 21 }} 22 ></div> 23 <button 24- style={{}} 25+ style={{ height: "20px" }} 26 onClick={() => setIsClick((isClick) => !isClick)} 27 > 28 click 29 </button> 30 </div> 31 ); 32};

投稿2021/08/11 09:59

k4a

総合スコア983

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ktaaa

2021/08/11 10:18 編集

返信ありがとうございます。 親要素にrelativeをつけないといけないのですね、、、 例えばheaderが一番上にあり、buttonが押されたら右からboxが表示される(headerよりも最前面に)ようにする場合はどうしたらいいのでしょうか?コードを更新しました https://codesandbox.io/s/nameless-lake-w87fo?file=/src/App.js
k4a

2021/08/11 10:36

ヘッダーも内包したコンテナを定義してそれを親とするんじゃないでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問