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

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

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

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

1187閲覧

あるセクションをscrollしたときに、裏のカード(要素)を表示させたい

free_teku

総合スコア103

CSS3

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2021/12/27 14:29

前提・実現したいこと

表題の機能を反映させたく、質問します。
skills_itemまでスクロールしたときに、裏の要素(.pc-skills_back)
を表示させたい

試したこと

私のほうで試行錯誤し、下記のJsコードを書きましたが、うまくいきませんでした。
裏側の部分が既に表示されてしまいます。

該当のソースコード

HTML

1<!DOCTYPE html> 2<html> 3<head> 4 <title></title> 5 <link rel="stylesheet" href="./css/destyle.css"> 6 <link rel="stylesheet" href="./css/style.css"> 7</head> 8<body> 9 <section class="skills js-scroll" id="js-skills"> 10 <div class="container"> 11 <h2 class="skills-ttl">Skills</h2><!-- /.about-ttl --> 12 <ul class="skills_list"> 13 <li class="skills_item pc-skills passive" id="passive"> 14 <h3 class="pc-skills_ttl">HTML</h3><!-- /.pc-skills_ttl --> 15 <div class="pc-skills_img"><img alt="" src="./asserts/img/skills/html.png"></div><!-- /.skill_img --> 16 <a href=""></a> 17 </li><!-- /.skills_item --> 18 <!--2--> 19 <li class="skills_item pc-skills pc-skills_back active" id="active"> 20 <h3 class="pc-skills_ttl">HTML</h3><!-- /.pc-skills_ttl --> 21 <div class="pc-skills_img pc-skills_img_back"><img alt="" src="./asserts/img/skills/html.png"></div><!-- /.skill_img --> 22 <p class="skills-desc_back">HTML5は基本的な文法や基礎は自信をもってコードを書けます。</p><!-- /.skills-desc --> 23 <a href=""></a> 24 </li><!-- /.skills_item --> 25 </ul> 26 </div> 27 </section> 28</body> 29</html>

CSS

1 2.skills_list { 3 display: -ms-grid; 4 display: grid; 5 -ms-grid-columns: (minmax(26%, 1fr))[auto-fit]; 6 grid-template-columns: repeat(auto-fit, minmax(26%, 1fr)); 7 gap: 5%; 8} 9 10.skills_item { 11 width: 100%; 12 height: 80%; 13 margin-top: 60px; 14 -webkit-transform-style: preserve-3d; 15 transform-style: preserve-3d; 16 -webkit-transition: opacity 0.5s, -webkit-transform 1s; 17 transition: opacity 0.5s, -webkit-transform 1s; 18 transition: transform 1s, opacity 0.5s; 19 transition: transform 1s, opacity 0.5s, -webkit-transform 1s; 20 background-color: #fff; 21} 22 23.skills_item:nth-of-type(2n) { 24 margin: 60px 1%; 25} 26 27.skills_item .skills_img img { 28 width: 40%; 29} 30 31.skills_item > a { 32 position: absolute; 33 width: 100%; 34 height: 100%; 35 top: 0; 36 left: 0; 37 text-indent: 100%; 38 /*テキスト非表示*/ 39 white-space: nowrap; 40 /*テキスト非表示*/ 41 overflow: hidden; 42 /*テキスト非表示*/ 43} 44 45.skills_item > a:hover { 46 opacity: .5; 47 -webkit-transform: rotate(-180deg); 48 transform: rotate(-180deg); 49} 50 51.pc-skills { 52 position: relative; 53 background-color: rgba(255, 255, 255, 0.7); 54 -webkit-box-shadow: 1px 1px 20px rgba(0, 0, 0, 0.15); 55 box-shadow: 1px 1px 20px rgba(0, 0, 0, 0.15); 56 padding: 0 30px 30px 30px; 57 border-radius: 30px; 58} 59 60.pc-skills.passive { 61 z-index: 1; 62 -webkit-transform: rotateY(0deg); 63 transform: rotateY(0deg); 64} 65 66.pc-skills_ttl { 67 text-align: center; 68 font-size: 2.5rem; 69 line-height: 3; 70 text-align: center; 71} 72 73.pc-skills_img { 74 width: 60%; 75 margin: 5% auto; 76} 77 78.pc-skills_back.active { 79 z-index: 0; 80 -webkit-transform: rotateY(-180deg); 81 transform: rotateY(-180deg); 82} 83 84.pc-skills_back .pc-skills_img_back { 85 opacity: .5; 86} 87 88.pc-skills_back .skills-desc_back { 89 color: #0fe4a4; 90 font-size: 1.0rem; 91}

JS

1$(function(){ 2 $(window).scroll(function() { 3 const sec_skill = $(".skills_item") 4 var fix = $(".skills_item"); 5 var fixskill = fix.offset().top; 6 7 if($(window).scrollTop() >= sec_skill) { 8 // $('.pc-skills_back').toggleClass('active') 9 $("#passive").css({'z-index':'0', 'transform':'rotateY(-180deg)'}); 10 $('#active').css({'z-index':'1', 'transform':'rotateY(0deg)'}); 11 } else{ 12 // $('.pc-skills').toggleClass('passive') 13 $("#active").css({'z-index':'0', 'transform':'rotateY(-180deg)'}); 14 $('#passive').css({'z-index':'1', 'transform':'rotateY(0deg)'}); 15 } 16 17}); 18})

補足情報(FW/ツールのバージョンなど)

裏表の切り返しのみ参考にしました

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

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

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

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

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

guest

回答1

0

ベストアンサー

ぱっと見た感じ、座標取ってるのはfixskillの方なので

javascript

1if($(window).scrollTop() >= sec_skill) { 23if ($(window).scrollTop() >= fixskill) {

でいけるんじゃないでしょうか?

codepenサンプル

裏表が別々に表示されてるのは問題ないんでしょうか?


一応アップデートしました。
codepenサンプル

skills_listと命名しているからには、html以外のスキルも書き連ねるのかな?と思いましたが
その場合ulを束ねる親要素にgridを当てないと
.skills_listにdisplay: grid;使ってたら
子要素はliになるわけで分離しちゃうのは当然かと思います。

.skills_containerというdivを作成して、そこに指定しました(現在コメントアウトしてdisplay:flex当ててます)。

その他htmlタグを変更したり、よくわからないclassは統廃合しました。

普通に作ると右から裏返ったら戻る時も右に裏返っていきますが
この方(https://www.kansuke-prg.com/jquery/rotation)の方法では、
常に同じ方向に回転しているように見えるんですね。

投稿2021/12/27 19:15

編集2021/12/28 20:58
recal

総合スコア1126

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

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

free_teku

2021/12/28 04:31 編集

確かに、動きました。しかし、裏側(#active)が表示されている状態となっています。 おっしゃる通り、問題です。↓ これは、z-indexのかしょのCSS下原因だと思われますが、うまくいきません。 解決策を教えていただけると幸いです。 よろしくお願いします。
free_teku

2021/12/29 05:18

recalさん、ご丁寧な的確なアドバイスありがとうございます。 ulをdivで囲まないと、といった件について、お伺いしたいです。 私の解釈だと、gridは並べたい要素の親要素に書くことで機能が発揮されると感じます。 これだと、ulがconatiner の子要素になるという解釈で間違えないでしょうか? また、-adjustはなぜされているのですか? 恐れ入りますが、解説していただけると幸いです
recal

2021/12/29 08:47

adjustは、カードが画面上部に到達した時点で裏返り処理が入ったら、みてる人には遅すぎると感じたので 画面上部に到達するする少し手前から裏返るように追加しました
recal

2021/12/29 09:05

でも、この人の方法だとiPhoneのSafariでうまく動いてない感じかします
free_teku

2021/12/29 10:31

recalさん、迅速にご回答ありがとうございます。 adjustについては理解できました。ありがとうございます。 ただ、一点、display: flex;について、理解できなかったので再度質問させていただきます。↓ Q. 補足で私が制作したいものをお伝えします。 実はgrid を使った意図が、ul に複数liを使った要素を書こうと考えています。 (R:gridはレスポンシブ時、便利だからです) イメージは↓ <ul> HTML <li></li> <li></li> CSS <li></li> <li></li> </ul> でこれを複数作るような認識でよろしいでしょうか? それとも、上記の組み合わせを一つだけですか? といったような構成で考えています。 gridを使う目的を加味すると、
recal

2021/12/29 10:46 編集

現状<div class="skills_container">にflexを付けているので その子要素から複製してください。gridに変更した場合も同様です。 この場合<ul class="skills_list" role="list">です。 こちら最小限のコードでわかりやすいと思います。 https://developer.mozilla.org/ja/docs/Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout また質問になかったので複数のカードの回転には対応してないです(jsの名称的に)。 そこらへんはul:nth-child的な感じで処理を分けてもらえたら行けるんじゃないかなぁ。。。どうでしょう。
free_teku

2021/12/30 02:55

複数回転にやや苦戦しています。私の考えだと、psssiveなどを付与するものが、開店する仕組みにしているため、回るのでは?と思ったのですが。。 回らないんですね?
recal

2021/12/30 03:55

idは1ページに1つしか使えませんしね…
free_teku

2021/12/30 05:55 編集

そうでしたね(苦笑) 今の現状としては、↓へスクロールしたときのみ裏表示されない現状があります。これって、z-indexが機能されないことが要因かなと思い、模索していましたが、なかなか解決できずにいます。 Jsは、recalさんが書いていただいた通りです。 codepenで反応するor しないの違いを知ってもらえるように、それぞれ記載していただいたにもかかわらず、分からず申し訳ないです。本当にご迷惑おかけしています<(_ _)> 原因は何なのでしょうか? やったこと classの_frontには、passive classの_backには、activeを表記しています
recal

2021/12/30 07:50

idをどんどん増やしていくか classを使うかですかねぇ codepenアップデートしました。 最初の質問の実現したいことはクリアできているはずなのに 要件があとからコメント欄で増えていくのはどうかなと思います。 別の質問をたててそちらで内容を詰めた質問をしたほうがいいんじゃないでしょうか。
free_teku

2021/12/30 08:34

失礼いたしました。。大変申し訳ございませんでした。。今回サポートしていただきありがとうございました。
free_teku

2021/12/30 09:33

できました。ありがとうございました。ここに感謝申し上げます。
recal

2021/12/30 09:57

よかったです 手を加えていて痛感したのは、サイズを固定できる仕様じゃないと 複数になったとき見栄えを揃えるのが厳しいなーと思いました。 あとは並んだ要素が一斉に裏返るのではなくタイムラグを持って裏返ったりしないと 刺激が強いだろうなぁとか。
free_teku

2021/12/31 04:08

最後まで、アドバイスありがとうございます。おっしゃる通りです。サイズには苦戦しています。(苦笑) ご存知かと思いますが、初めてPOrtfolioを使い、いろんなデザインンを見たうえで、いろいろ試していました。 サイズもそうですが、タイムラグも起こさないとですね。一度、考えて、実践してみます。 最後の最後まで、本当にありがとうございました。感謝申し上げます。<(_ _)>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問