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

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

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

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

Q&A

解決済

1回答

1232閲覧

css animation で、ブロック要素を左端から右端へ移動してそのまま表示するには?

tfline_w

総合スコア37

CSS

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

0グッド

0クリップ

投稿2019/03/28 08:52

css アニメーション機能を使い、ブロック要素を画面の左端から右端に移動させ、そのまま表示させたいのですが、どのように記述したらいいでしょうか?

css

1@keyframes moveImage_c1 { 2 0% {left: 0px} 3 100% {right: 0px} 4}

css

1@keyframes moveImage_c1 { 2 0% {left: 0px} 3 100% {left: auto; right: 0px} 4}

などと書いてみましたが、うまく動きません。
windowサイズが一定ではないので、left で固定px の記述ができません。

移動させたいブロック要素は、

css

1position: absolute; 2width: 100px; 3height: 100px;

です。

@keyframes moveImage_c1 { 0% {left: 0px} 100% {left: 90%} }

と書くと、移動はするのですが、ぴったり右端にくっつきません。

どのように記述するのが正解でしょうか。

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

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

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

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

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

kei344

2019/03/28 09:11

書かれている状況が再現するコード(HTML/CSS/JavaScriptなど)か、再現するURLを質問文に追記されたほうが回答を得やすいと思います。
guest

回答1

0

ベストアンサー

「windowサイズが一定ではない」とのこと、「移動させたいブロック要素」は一定サイズと読みました。

CSS

1@keyframes moveImage_c1 { 2 0% {left: 0%} 3 100% {left: calc( 100% - 100px )} 4}

calc() - CSS: カスケーディングスタイルシート | MDN

条件に相違があればお知らせください。

コメントを受けて追記

手元のIE11で動作することを確認しました。

css

1div { 2 position: absolute; 3 width: 100px; 4 height: 100px; 5 background-color: gray; 6 animation: moveImage_c1 1s; 7 right: 0px; 8} 9 10@keyframes moveImage_c1 { 11 0% { 12 left: 0%; 13 transform: translateX(0%); 14 } 15 100% { 16 left: 100%; 17 transform: translateX(-100%); 18 } 19}

html

1<div></div>
コメントを受けて追記②

では、animation-fill-mode: forwards;で。
IE11で確認しました。

css

1div { 2 position: absolute; 3 width: 100px; 4 height: 100px; 5 background-color: gray; 6 left:-100px; 7 animation: moveImage_c1 1s forwards; 8} 9 10@keyframes moveImage_c1 { 11 0% { 12 left: 0%; 13 transform: translateX(0%); 14 } 15 100% { 16 left: 100%; 17 transform: translateX(-100%); 18 } 19}
コメントを受けて追記③

IE11のbody要素が広がってしまう現象は、overflow: hidden;で対処できそうです。
width:100%;もあった方がいいかも?)

css

1body { 2 overflow: hidden; 3} 4 5div { 6 position: absolute; 7 width: 100px; 8 height: 100px; 9 background-color: gray; 10 animation: moveImage_c1 1s forwards; 11} 12 13@keyframes moveImage_c1 { 14 0% { 15 left: 0%; 16 transform: translateX(0%); 17 } 18 100% { 19 left: 100%; 20 transform: translateX(-100%); 21 } 22}

投稿2019/03/28 09:13

編集2019/03/28 11:36
Lhankor_Mhy

総合スコア36074

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

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

tfline_w

2019/03/28 09:26

ありがとうございます。試してみました。 Chrome だと、問題なく動作しましたが、IE11 だと動作しません(animation自体が実行されません)でした。もう少し調査してみます。
tfline_w

2019/03/28 09:33

IE11でもcalc() は有効ということで、別の<div> にstyle="left: calc(100% - 100px)" と指定したところ、正常に配置されました。@keyframes に指定した場合のみ、うまくいかないということかもしれません。
Lhankor_Mhy

2019/03/28 10:17

追記しました。translateX を併用して、ボックスサイズを吸収しています。
kei344

2019/03/28 10:19

多分別のバグなのですが、IE11でcalcを使う場合「(」「)」の前後に空白があると無視されたことがあります。
Lhankor_Mhy

2019/03/28 10:24

おお、そうなのですね。 たしかにそのスペースは不要でした。 仕様はどうなっているのだろう……?
tfline_w

2019/03/28 10:26

ありがとうございます。 left: 100% で移動して、その後、translateX(-100%) だと、右端に100px分の余白が生まれてしまいました。
Lhankor_Mhy

2019/03/28 10:40

IE11、Chrome73、Firefox66 で動作確認しましたが、「右端に100px分の余白が生まれてしまいました」という問題は確認できませんでした。 問題が再現するコードをご提示いただいた方が早いかもしれません。
tfline_w

2019/03/28 10:50

すいません。こちらのコードだと、画面の外(左側)からボックスが移動してくる、という動作にするために、style="left: -100px" が入っていました。これを外したところ、右端の余白は生まれなくなりました。 left: -100px を入れると、余白が生まれてしまいます。これも、chromeでは生まれないのですが。
tfline_w

2019/03/28 11:09

たびたびありがとうございます。 説明が悪かったかもしれません。IE11の余白というのは、パッと見にはわからないのですが、横スクロールバーが発生しています。最後に修正していただいたコードでも、横スクロールバーが出ます。
tfline_w

2019/03/28 11:46

ありがとうございます! まさに今、同じ結論に達したところでした。 keyframes の開始が、left: 0%; だと、いきなり出現してしまうので、 0% { left: -100px; transform: translateX(0%); } と修正し、狙い通りの動きが実現できました。 長々と助けていただき、ありがとうございました。 #IE 滅びてほしい
Lhankor_Mhy

2019/03/28 11:59

ご解決されて何よりです。 > #IE 滅びてほしい 全くです。 幸いなことにEdgeは滅びましたので、時間の問題ですよね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問