回答編集履歴

2

調整

2025/02/20 08:51

投稿

yambejp
yambejp

スコア117203

test CHANGED
@@ -49,3 +49,59 @@
49
49
  </div>
50
50
  ```
51
51
  左要素の末尾のX座標と右要素の先頭のX座標をくらべて、食い込んでいたら2行改行する
52
+
53
+ # 追記
54
+ どうせなら動的に処理できるようにこんな感じ
55
+ (ブラウザの幅を変えると動的に避けてくれる)
56
+ ```html
57
+ <style>
58
+ .wrap{
59
+ border:1px solid;
60
+ position:relative;
61
+ }
62
+ .l{
63
+ background-Color:lime;
64
+ }
65
+ .r{
66
+ background-Color:yellow;
67
+ position:absolute;
68
+ right:0;
69
+ bottom:0;
70
+ }
71
+ </style>
72
+ <script>
73
+ const crossing=()=>{
74
+ document.querySelectorAll('.l').forEach(element=>{
75
+ element.parentNode.querySelectorAll('br').forEach(x=>x.remove());
76
+ const range = document.createRange();
77
+ range.selectNodeContents(element);
78
+ const rects = range.getClientRects();
79
+ const p1 = rects[rects.length -1 ].right;
80
+ const rect = element.parentNode.querySelector('.r').getBoundingClientRect();
81
+ const p2 = rect.left;
82
+ if(p1>p2) element.after(document.createElement('br'),document.createElement('br'));
83
+ console.log([p1,p2]);
84
+
85
+ });
86
+ }
87
+ window.addEventListener('DOMContentLoaded',crossing);
88
+ window.addEventListener('resize',crossing);
89
+
90
+ </script>
91
+ <div class="wrap">
92
+ <span class="l">ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ</span>
93
+ <span class="r">いいいいいい</span>
94
+ </div>
95
+ <div class="wrap">
96
+ <span class="l">あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ</span>
97
+ <span class="r">いいいいいい</span>
98
+ </div>
99
+ <div class="wrap">
100
+ <span class="l">ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ</span>
101
+ <span class="r">いいいいいい</span>
102
+ </div>
103
+ <div class="wrap">
104
+ <span class="l">あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ</span>
105
+ <span class="r">いいいいいい</span>
106
+ </div>
107
+ ```

1

ちょうせい

2025/02/20 08:30

投稿

yambejp
yambejp

スコア117203

test CHANGED
@@ -17,18 +17,15 @@
17
17
  }
18
18
  </style>
19
19
  <script>
20
-
21
20
  window.addEventListener('DOMContentLoaded', ()=>{
22
21
  document.querySelectorAll('.l').forEach(element=>{
23
22
  const range = document.createRange();
24
23
  range.selectNodeContents(element);
25
24
  const rects = range.getClientRects();
26
- const p1 = rects[rects.length -1 ].right + window.scrollX;
25
+ const p1 = rects[rects.length -1 ].right;
27
26
  const rect = element.nextElementSibling.getBoundingClientRect();
28
27
  const p2 = rect.left;
29
28
  if(p1>p2) element.after(document.createElement('br'),document.createElement('br'));
30
- // console.log([p1,p2]);
31
-
32
29
  });
33
30
  });
34
31
  </script>
@@ -51,3 +48,4 @@
51
48
  </div>
52
49
  </div>
53
50
  ```
51
+ 左要素の末尾のX座標と右要素の先頭のX座標をくらべて、食い込んでいたら2行改行する