CSS animationをChatGPTとGoogle Bardに作らせてみる

ベトナム語文法変換スクリプトに生成イラストを付与するようになってから、自分のiPhone13 miniの縦画面だとセリフが小さくて読みづらいなと感じていた。


なので、タップすると画面いっぱいに拡大する機能を実装しようと思った。

それで検索して調べると色々な手法があるようだった。

普通、プログラムの世界では車輪の再発明はしないという原則があり、既に存在しているプログラムがあるなら一から作らずに使わせてもらい、手間を減らすのが一般的である。

しかし、JavascriptもCSSも再学習中の私にとっては練習の一環なので既存のスクリプトを流用はせず、ロジックを確認して自分で実装するのが良いと判断して実装。

CSSのclassで拡大時のclass、zoomを別途用意してJavascriptでclassを書き換える。

この方針として実装。ちょっと悩んだところもあったが無事実装完了。


タップして拡大するだけでなく、再度タップすると縮小する処理も実装完了。

ここまで来て、拡大、縮小時にアニメーションで徐々に拡大、徐々に縮小するようにしたいと思った。

またちょっと調べるとCSSのアニメーション処理にはtransitionとanimationがあるらしい事がわかる。

どちらで実装するのが良いかはちょっとわからなかった。

そこでふと思った。ChatGPTに聞いてみようと。

     以下のCSS class right_sideからzoomにjavascriptで切り替えます
その際にcss animationで50%から100%に1秒で変化させたいです
css animationを追加してほしい
     .right_side{
width:50%;
float:right;
      }

      .zoom{
width:100%;
float:right;
      }

するとChatGPTからは以下の返答

ChatGPT
       .right_side{
width:50%;
float:right;
  transition: width 1s;
      }

      .zoom{
width:100%;
float:right;
      }

このアニメーションは、.right_side要素の幅を変更する際に1秒の時間をかけて滑らかにアニメーションさせます。.zoomクラスに切り替えるだけで、幅がアニメーション付きで変化します。

このCSSをHTMLファイルの<style>タグ内に追加するか、外部のCSSファイルに保存してリンクしてください。

CSS animationではなくtransitionを用いている。

そして.zoomクラスに切り替えるとアニメーション付きで変化すると説明があるが、どう見ても.right_sideに切り替えるときにアニメーション付きになり、.zoomの拡大時にはアニメーションしない。

説明とCSSが逆になっている。

しかし、まぁ人間が間違いに気がつけば十分役に立つ。

拡大側の.zoomにもtransitionを追加して実装してみるとなめらかに拡大縮小出来るようになった。

ChatGPT-4にも同じように依頼すると、同じコードが生成された。つまり同じミスをしている。GPT-4の違いはどこでアニメーションを指定しているかをコメントに記載されている点と、Javascriptでclassを切り替える方法も付記されていた点。

こうなるとGoogle Bardにも確認してみたくなる。

Google Bard
CSS
.right_side {
  width: 50%;
  float: right;
}

.zoom {
  width: 100%;
  float: right;
  animation: zoom 1s ease-in-out forwards;
}

@keyframes zoom {
  0% {
    width: 50%;
  }

  100% {
    width: 100%;
  }
}
このCSSを追加することで、.right_sideクラスの要素の幅が50%から100%に1秒かけてアニメーションで変化します。


お、Google BardはCSS animationをきっちり使っている。それに.zoom側をアニメーションさせているので要望通り。
この比較ではGoogle Bardの圧勝でChatGPTはGPT-4でも間違った返答をしている。
実装したアニメーション動作はこの様になっている。



なお、アニメーション動作自体はどちらもほとんど同じで1秒間の間に拡大縮小が行われる。
拡大側の動作はどちらも変わらないが、縮小側の動作についてはページ初回表示時に差がある。
ページを開く時、transitionの方は初期値の縮小状態のまま普通にアニメーション無しで表示される。
animationの方はページを開くときに、拡大状態から縮小状態にアニメーションして表示される。
初期値が縮小状態である事を考えるとアニメーションしないtransitionの方が適切に思えるし、SEOの観点からは読み込み中に画面が動くとCLS値の減点になるのでtransitionの方が良いことになる。
animation指定してしまうとページ読み込み中に100%の画像が表示されて縮小されていくのでSEO的にマイナスなのは勿論、ちょっと鬱陶しく感じるかもしれない。

またtransitionは一行CSSを付与するだけのシンプルな構造だが、animationの方は@keyframesで動作を指定するので行数が多い。

シンプルでわかりやすく、SEO的にもtransitionで実装しておくのが無難に思える。
だがしかし、面白いからGoogle Bardが作成したanimationの方で本番反映しておこう!







コメント

このブログの人気の投稿

Googleスプレッドシートの正規表現置換で改行文字

名作と定評のあるスーパーファミコンの『ザ・モノポリーゲーム2』を今更ながら遊んでみた

Googleスプレッドシートのimportxml関数をhtmlに使う