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

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

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

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

HTML5

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

1471閲覧

font-sizeでvw単位を使うと罫線がずれる

退会済みユーザー

退会済みユーザー

総合スコア0

CSS3

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

HTML5

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/04/18 05:29

編集2020/04/18 05:43

前提・実現したいこと

フォントサイズをウィンドウ幅基準で可変にしつつ、
ノートのような罫線を付けたい

発生している問題

フォントサイズのpx変換結果が小数点だと、ずれる
イメージ説明

該当のソースコード

css

1 * { 2 box-sizing: border-box; 3 margin: 0; 4 padding: 0; 5 } 6 7 html { 8 padding: 20px; 9 } 10 11 .parent { 12 background-color: red; 13 line-height: 1.5; 14 background-size: 100% 1.5em; 15 font-size: 3vw; 16 background-image: linear-gradient( 17 transparent 0%, 18 transparent calc(100% - 1px), 19 green calc(100% - 1px), 20 green 100%); 21 } 22 23 .child { 24 background-color: blue; 25 color: #fff; 26 }

html

1 <div class="parent"> 2 <span class="child">01あいうえお</span><br> 3 02あいうえお<br> 4 03あいうえお<br> 5 04あいうえお<br> 6 05あいうえお<br> 7 06あいうえお<br> 8 07あいうえお<br> 9 08あいうえお<br> 10 09あいうえお<br> 11 10あいうえお 12 </div>

試したこと

background-size: 100% 1.5em;だと小数点のときずれるので
小数点演算後1行の高さがどうなったか
javascriptで.childの高さのpx値を取得し、
background-size: 100% ★;の★に入れようと思った。
しかし1行目の上辺がそもそも親要素の上辺をわずかにはみ出ていたので失敗しました。
↓青の上辺が赤の上辺をわずかにはみ出てる
イメージ説明
↑ウィンドウ幅:866px(わざと半端にして小数点を出している)

気づいたこと

chromeとfirefoxで挙動が異なりました。
今まではchromeでテストしてました。
firefoxではfont-sizeが小数点のときも罫線がずれませんでした。

chromeウィンドウ幅:866px
イメージ説明

firefoxウィンドウ幅:866px
イメージ説明

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

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

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

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

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

guest

回答2

0

ベストアンサー

jQueryを使って文字の高さをpxで取得し、
それをline-heightとbackground-sizeの高さに適用することにしました。

javascript

1 Math.trunc = Math.trunc || function (x) { 2 return x < 0 ? Math.ceil(x) : Math.floor(x); 3 } 4 function underline() { 5 var target = $('.parent'); 6 var get_line_height = 'get_line_height'; 7 var get_line_height_br = 'get_line_height_br'; 8 var set_line_height = 1.5; 9 target.append('<br class="' + get_line_height_br + '"><span style="line-height:1em;" class="' + get_line_height + '">1行の高さ取得用</span>'); 10 //↓IE11用にcalc()で囲む 11 var height = "calc( " + Math.trunc($('.' + get_line_height).outerHeight() * set_line_height) + 'px )'; 12 target.css("background-size", "100% " + height); 13 target.css("line-height", height); 14 $('.' + get_line_height).remove(); 15 $('.' + get_line_height_br).remove(); 16 } 17 underline(); 18 $(window).resize(function () { 19 underline(); 20 });

投稿2020/04/18 08:32

編集2020/04/18 12:47
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

backgroundでの実装だとブラウザごとのズレを解消するのはかなり難しいと思います。
(CSS2以前のプロパティでは、小数点の扱いがブラウザごとにマチマチ)

JavaScript不要の別案を思いついたので、もし切り替える場合があるならご参考ください。

現状10行にしか対応していませんが、行数を増やす場合は50行くらい用意してoverflow: hidden;で隠す、
などすれば高さが増えても対応は可能と思われます。

CodePenでの実装

CSS

1* { 2 box-sizing: border-box; 3 margin: 0; 4 padding: 0; 5} 6 7html { 8 padding: 20px; 9} 10 11.parent { 12 position: relative; 13 background-color: red; 14 line-height: 1.5; 15 background-size: 100% 1.5em; 16 font-size: 3vw; 17 /* 18 background-image: linear-gradient( 19 transparent 0%, 20 transparent calc(100% - 1px), 21 green calc(100% - 1px), 22 green 100% 23 ); 24 */ 25} 26 27.child { 28 background-color: blue; 29 color: #fff; 30} 31 32/* 追加 */ 33.line-group { 34 position: absolute; 35 top: 0; 36 left: 0; 37 right: 0; 38 height: 45vw; /* (lineの数 - 1) * 5vw */ 39 display: flex; 40 flex-direction: column; 41} 42.line { 43 margin-top: auto; 44 margin-bottom: -1px; /* 高さ分を差し引く */ 45 width: 100%; 46 height: 1px; /* 線の太さは変わらない */ 47 background: green; 48 transform: translate(0, -0.5vw); /* 調整 */ 49}

HTML

1<div class="parent"> 2 <div class="line-group"> 3 <div class="line"></div> 4 <div class="line"></div> 5 <div class="line"></div> 6 <div class="line"></div> 7 <div class="line"></div> 8 <div class="line"></div> 9 <div class="line"></div> 10 <div class="line"></div> 11 <div class="line"></div> 12 <div class="line"></div> 13 </div> 14 01あいうえお<br> 15 02あいうえお<br> 16 03あいうえお<br> 17 04あいうえお<br> 18 05あいうえお<br> 19 06あいうえお<br> 20 07あいうえお<br> 21 08あいうえお<br> 22 09あいうえお<br> 23 10あいうえお 24</div>

案2として、別案を考えてみました。こちらのほうがズレは抑えられるのでは、と思います。
HTMLは共通、CSSの下記部分のみ書き換えてみてください。

CodePenでの実装 - 案2

CSS

1.line-group { 2 position: absolute; 3 top: 0; 4 left: 0; 5 right: 0; 6 pointer-events: none; 7} 8.line { 9 width: 100%; 10 box-shadow: 0 1px 0 0 green; /* 線の太さは変わらない */ 11} 12.line::before { 13 content: " "; /* 全角スペース */ 14 font-size: 3vw; 15 line-height: 1.5; 16 color: transparent; 17}

display: flex;で子要素にmargin-topを設定する..など工夫するアプローチよりも、
高さの計算として完全に同じ仕組みを用いることで「そもそもズレようがない」状態にできると考えます。

投稿2020/04/18 06:22

編集2020/04/18 08:52
new1ro

総合スコア4528

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

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

退会済みユーザー

退会済みユーザー

2020/04/18 07:35

ご回答ありがとうございます。 いただいたソースを埋め込んだtest.html(codePen形式ではない)を、chromeのレスポンシブモードでウィンドウ幅を555pxにして表示してみたところ、罫線がずれてしまいました。
new1ro

2020/04/18 08:48 編集

解決したようで、遅くなってしまいましたが 透明な文字を表示することで「同じ仕組みなのでズレようがない」というような案を 思いついたので、回答に追記しておきますね。
退会済みユーザー

退会済みユーザー

2020/04/18 09:00

ありがとうございます!今から拝見させていただきます!
退会済みユーザー

退会済みユーザー

2020/04/18 09:15

拝見しました。box-shadowをつけるんですね! 可変する行数にどうやって対応するかも考えてみます!
new1ro

2020/04/18 09:40

> 可変する行数にどうやって対応するかも考えてみます! せっかくなので..、 泥臭くなってしまうのですが以下のようになると思います。 <div class="line-group"> <div class="line"></div><!-- 50個、100個くらい置く --> </div> ---- .line-group { position: absolute; top: 0; left: 0; right: 0; bottom: 0; /* 追加 */ overflow: hidden; /* 追加 */ pointer-events: none; }
退会済みユーザー

退会済みユーザー

2020/04/18 09:53

ご返信ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問