回答編集履歴

1

調整

2025/03/14 04:48

投稿

yambejp
yambejp

スコア117413

test CHANGED
@@ -1,3 +1,86 @@
1
1
  > 最初にクリックをしていないのに勝手に半周してしまう
2
2
 
3
3
  前回私が提示したクラスの付替えとtransitionの状態をみてtransformすればよいのでは?
4
+
5
+ # 参考
6
+ こんな感じでどうでしょう?
7
+ ```html
8
+ <style>
9
+ .wrap{
10
+ position:static;
11
+ }
12
+ label:has(.acd-check){
13
+ position:relative;
14
+ z-index:2;
15
+ }
16
+ .acd-content p{
17
+ margin:0;
18
+ }
19
+ label:has(.acd-check:not(:checked)) ~ .acd-content{
20
+ transform:translateY(-1.5em);
21
+ height:0;
22
+ transition: 0.5s;
23
+ z-index:1;
24
+ }
25
+ label:has(.acd-check:checked) ~ .acd-content{
26
+ height:2.5em;
27
+ transition: 0.5s;
28
+ transform:translateY(0);
29
+ }
30
+ .acd-check ~ span{
31
+ display:inline-block;
32
+ }
33
+ .acd-check:not(:checked) ~ span.flag{
34
+ transform:rotate(calc(0deg ));
35
+ }
36
+ .acd-check:not(:checked) ~ span:not(.flag){
37
+ transform:rotate(calc(360deg ));
38
+ transition: 0.5s;
39
+ }
40
+ .acd-check:checked ~ span{
41
+ transform:rotate(180deg);
42
+ transition: 0.5s;
43
+ }
44
+
45
+ </style>
46
+ <script>
47
+ window.addEventListener('DOMContentLoaded', ()=>{
48
+ document.querySelectorAll('.acd-check ~ span').forEach(x=>x.classList.add('flag'));
49
+ });
50
+
51
+ document.addEventListener("click",e=> {
52
+ const t=e.target;
53
+ if(t.closest('.wrap').matches(':has(.running)')){
54
+ e.preventDefault();
55
+ }
56
+ },true);
57
+ document.addEventListener("transitionstart",e=> {
58
+ const t=e.target;
59
+ t.classList.add('running');
60
+ });
61
+ document.addEventListener("transitionend",e=> {
62
+ const t=e.target;
63
+ if(t.matches('.acd-check ~ span')){
64
+ t.classList.toggle('flag',t.matches('.acd-check:not(:checked) ~ span'));
65
+ }
66
+ t.classList.remove('running');
67
+ });
68
+ </script>
69
+ <body>
70
+ <div class="wrap">
71
+ <label><input class="acd-check" type="checkbox">クリックで開く1<span>↓</span></label>
72
+ <div class="acd-content"><p>hello.world!</p></div>
73
+ </div>
74
+ <div class="wrap">
75
+ <label><input class="acd-check" type="checkbox">クリックで開く2<span>↓</span></label>
76
+ <div class="acd-content"><p>hello.world2!</p></div>
77
+ </div>
78
+ <div class="wrap">
79
+ <label><input class="acd-check" type="checkbox">クリックで開く3</label>
80
+ <div class="acd-content"><p>hello.world3!</p></div>
81
+ </div>
82
+ <div class="wrap">
83
+ <label><input class="acd-check" type="checkbox">クリックで開く4</label>
84
+ <div class="acd-content"><p>hello.world4!</p></div>
85
+ </div>
86
+ ```