回答編集履歴

2

コード追加

2020/03/19 04:44

投稿

hatena19
hatena19

スコア33740

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- 方法としては、スクリプトで一度heightに100%を設定して、時の高さの絶対値を取得しておいて、それをもとにアニメーショさせることになります。
11
+ 方法としては、スクリプトで一度heightにautoを設定して、オリジナルの高さの絶対値を取得しておいて、それをもとにアニメーショさせることになります。
12
12
 
13
13
 
14
14
 
@@ -25,3 +25,87 @@
25
25
 
26
26
 
27
27
  [jQueryで文章をグラデーションで隠してアニメーションで開閉するボックスを作った | hatena chips](https://hatena19.com/box-that-opens-and-closes-an-animation-with-a-jquery/)
28
+
29
+
30
+
31
+
32
+
33
+ ---
34
+
35
+ 質問のコードを修正するなら下記のような感じでご希望に沿いますでしょうか。
36
+
37
+
38
+
39
+ ```css
40
+
41
+ .wrap{
42
+
43
+ width: 50%;
44
+
45
+ }
46
+
47
+
48
+
49
+ .txt_inr {
50
+
51
+ height: 50px;
52
+
53
+ overflow: hidden;
54
+
55
+ }
56
+
57
+
58
+
59
+ .link{
60
+
61
+ background-color: red;
62
+
63
+ }
64
+
65
+ ```
66
+
67
+ ```js
68
+
69
+ $(function () {
70
+
71
+ const min_height = 50; //initial height 50px
72
+
73
+ const ani_duration = 800; //アニメーション時間 0.8s
74
+
75
+ $('.link').click(function () {
76
+
77
+ let athis = $(this);
78
+
79
+ let show_text = athis.prev();
80
+
81
+ let original_height = show_text.css({height : 'auto'}).height();
82
+
83
+ if (show_text.hasClass('active')) {
84
+
85
+ show_text.stop()
86
+
87
+ .animate({height:min_height}, ani_duration,
88
+
89
+ function(){athis.text('もっと見る')});
90
+
91
+ show_text.removeClass('active');
92
+
93
+ } else {
94
+
95
+ show_text.height(min_height).stop()
96
+
97
+ .animate({height:original_height},ani_duration,
98
+
99
+ function(){athis.text('閉じる')});
100
+
101
+ show_text.addClass('active');
102
+
103
+ }
104
+
105
+ });
106
+
107
+ });
108
+
109
+ ```
110
+
111
+ [codepenサンプル](https://codepen.io/hatena19/pen/qBdKGWN)

1

説明修正

2020/03/19 04:44

投稿

hatena19
hatena19

スコア33740

test CHANGED
@@ -1,4 +1,8 @@
1
- cssのtransitonは 100% というような相対値には効きません。
1
+ ~~cssのtransitonは 100% というような相対値には効きません。~~
2
+
3
+ 要素の高さを中身のテキスト内容に合わせるには100%ではなくautoですね。
4
+
5
+ autoも固定値でないのでtransitonは効きません。
2
6
 
3
7
  pxで固定値で指定すれば有効になりますがそれではだめですよね。
4
8