MENU

CSSで作る背景色に依存しないテキストの左右に水平線がある見出し4種類

だいぶ前からあるテクニックですが、見出しの文字部分に下地の背景色と同じ色を指定しなければならない方法が多いです。しかし、今では背景色に依存しない便利な方法が出てきているので紹介します。

overflow:hidden


Heading


h1 
{
  text-align: center;
  overflow: hidden;
}
h1 span 
{
  display: inline-block;
  position: relative;
  padding: 0 .6em;
}
h1 span:before,
h1 span:after 
{
  position: absolute;
  top: 50%;
  width: 99em;
  content: '';
  border-top: 2px solid currentColor;
}
h1 span:before 
{
  right: 100%;
}
h1 span:after 
{
  left: 100%;
}

overflow:hidden; で左右のボーダーを隠す方法です。ボーダーの横幅は 99em と大きめにとってあります。IE9+で使えます。

linear-gradient


Heading


h1 
{
  text-align: center;
  overflow: hidden;
}
h1 span 
{
  display: inline-block;
  position: relative;
  padding: 0 .6em;
}
h1 span:before,
h1 span:after 
{
  position: absolute;
  top: 0;
  width: 99em;
  height: 100%;
  content: '';
  background: -webkit-linear-gradient(top, currentColor 0%, currentColor 100%);
  background: linear-gradient(to bottom, currentColor 0%, currentColor 100%);
  background-size: 100% 2px;
  background-position: center;
  background-repeat: no-repeat;
}
h1 span:before 
{
  right: 100%;
}
h1 span:after 
{
  left: 100%;
}

先ほどの方法を border ではなく、linear-gradient を使ったバージョンです。グラデーションを使うので、IE10+です。

display:flex


Heading


h1 
{
  display: -webkit-box;   /* Android */
  display: -webkit-flex;  /* Safari */
  display: -ms-flexbox;   /* IE10 */
  display: flex;
  -webkit-box-align: center;
  -webkit-align-items: center;
  -ms-flex-align: center;
  align-items: center;
}
h1:before,
h1:after 
{
  display: inline-block;
  -webkit-box-flex: 1;   /* Android */
  -webkit-flex-grow: 1;  /* Safari */
  -ms-flex-positive: 1;  /* IE10 */
  flex-grow: 1;
  content: '';
  border-top: 2px solid currentColor;
}
h1:before 
{
  margin-right: .6em;
}
h1:after 
{
  margin-left: .6em;
}

flex を使うのでIE10+です。

display:table-cell


Heading


h1 
{
  display: table;
}
h1:before,
h1:after 
{
  display: table-cell;
  width: 50%;
  content: '';
  background: -webkit-linear-gradient(top, currentColor 0%, currentColor 100%);
  background: linear-gradient(to bottom, currentColor 0%, currentColor 100%);
  background-size: 100% 2px;
  background-position: center;
  background-repeat: no-repeat;
  -webkit-background-clip: padding;
  background-clip: padding;
}
h1:before 
{
  border-right: .6em solid transparent;
}
h1:after 
{
  border-left: .6em solid transparent;
}

こちらもグラデーションを使うのでIE10+です。