【CSS】borderを半分にする

borderを要素の途中で区切りたいときに使うCSSを紹介していきます。

タイトルではborderを半分にするとありますがborderプロパティは使わずに、疑似要素(今回はbefore)で実現します。

目次

width、heightとpositionで設定する

横線

.border {
  display: inline-block;
  position: relative;
  font-weight: bold;
  padding-bottom: 1em;
}
.border:before {
  position: absolute;
  content: "";
  width: 50%;
  height: 2px;
  background-color: blue;
  left: 0;
  /* left: 50%; ※右側に当てたい場合 */
  bottom: 0;
}

下線の幅を要素の幅と合わせるためにdisplay: inline-blockを当てています。
widthに50%を指定することでborderを半分にすることができます。

右側に寄せたい場合は疑似要素(before)にleft: 50%を当てましょう

縦線

.border {
  position: relative;
  font-weight: bold;
  padding-left: 1em;
}
.border:before {
  position: absolute;
  content: "";
  width: 2px;
  height: 50%;
  background-color: blue;
  top: 0;
  /* top: 50% ※下側に当てたい場合 */
  left: 0;
}

linear-gradientで設定する

続いてliner-gradientを使用しての方法です。疑似要素の背景色を編集してborderが半分の見栄えを再現します。

横線

.border {
  display: inline-block;
  position: relative;
  font-weight: bold;
  padding-bottom: 1em;
}
.border:before {
  position: absolute;
  content: "";
  width: 100%;
  height: 2px;
  left: 0;
  background: linear-gradient(to right, blue 0%, blue 50%, transparent 50%, transparent 100%);
  /* background: linear-gradient(to left, blue 0%, blue 50%, transparent 50%, transparent 100%) ※右側に当てたい場合 */
  bottom: 0;
}

注意しなければいけないのはlinear-gradientをbackgroundに当てることです。background-colorでは反映されません。

縦線

.border {
  position: relative;
  font-weight: bold;
  padding-left: 1em;
}
.border:before {
  position: absolute;
  content: "";
  width: 2px;
  height: 100%;
  background: linear-gradient(to bottom, blue 0%, blue 50%, transparent 50%, transparent 100%);
  /* background: linear-gradient(to top, blue 0%, blue 50%, transparent 50%, transparent 100%) ※下側に当てたい場合 */
  top: 0;
  left: 0;
}

要素が連続する場合(おまけ)

要素が連続して下記のような見栄えにしたいときのコードもご紹介します。

first-of-type、last-of-typeを使用します。要素が増えても表示崩れしません。

HTMLは単純に要素を3つ並べます

<div class="border" >縦線付き縦線付き縦線付き縦線付き</div>
<div class="border" >縦線付き縦線付き縦線付き縦線付き</div>
<div class="border" >縦線付き縦線付き縦線付き縦線付き</div>

height使用

.border {
  position: relative;
  font-weight: bold;
  padding-left: 1em;
}
.border:before {
  position: absolute;
  content: "";
  width: 2px;
  height: 100%;
  background-color: blue;
  top: 0;
  left: 0;
}
.border:first-of-type:before, .border2:last-of-type:before {
  height: 50%;
}
.border:first-of-type:before {
  top: 50%;
}

linear-gradient使用

.border {
  position: relative;
  font-weight: bold;
  padding-left: 1em;
}
.border:before {
  position: absolute;
  content: "";
  width: 2px;
  height: 100%;
  background-color: blue;
  top: 0;
  left: 0;
}
.border:first-of-type:before, .border2:last-of-type:before {
  background: linear-gradient(to top, blue 0%, blue 50%, transparent 50%, transparent 100%);
}
.border:last-of-type:before {
  background: linear-gradient(to bottom, blue 0%, blue 50%, transparent 50%, transparent 100%);
}
ページTOP
目次
閉じる