heading with horizontal line on either side

HtmlCssPseudo Class

Html Problem Overview


I am working on some CSS where the design calls for page titles (headings) to be centered with horizontal lines that are vertically centered on either side. Further, there is a background image on the page so the background of the title needs to be transparent.

I have centered the title and I can use pseudo class to create the line. But I need the line disappear when it cross the text of the title.

I considered using a background gradient that goes transparent where the words are, but since each title could be a different length, I wouldn't know where to put the stops.

Here is the CSS so far:

h1 {  
    text-align: center;  
    position: relative;  
    font-size: 30px;  
    z-index: 1;  
}  

h1:after {  
    content: '';  
	background-color: red;  
	height: 1px;  
	display: block;  
	position: absolute;  
	top: 18px;  
	left: 0;  
    width: 100%;  
}  

Here is where I'm at: http://jsfiddle.net/XWVxk/1/

Can this be done with CSS without adding any extra HTML?

Html Solutions


Solution 1 - Html

Look at this http://blog.goetter.fr/post/36084887039/tes-pas-cap-premiere-edition , here is your answer.

Here is your original code modified

h1 {
    position: relative;
    font-size: 30px;
    z-index: 1;
    overflow: hidden;
    text-align: center;
}
h1:before, h1:after {
    position: absolute;
    top: 51%;
    overflow: hidden;
    width: 50%;
    height: 1px;
    content: '\a0';
    background-color: red;
}
h1:before {
    margin-left: -50%;
    text-align: right;
}
.color {
    background-color: #ccc;
}

<h1>This is my Title</h1>
<h1>Another Similar Title</h1>
<div class="color"><h1>Just Title</h1></div>

Note: the article is not online anymore, here is the last good archived version: http://web.archive.org/web/20140213165403/http://blog.goetter.fr/post/36084887039/tes-pas-cap-premiere-edition

Solution 2 - Html

needed this a few days ago, but the accepted answer isn't working in IE.

this is what I came up with: works in every major browser (> ie8)

jsfiddle: http://jsfiddle.net/gKve7/

/* headlines with lines */
.decorated{
     overflow: hidden;
     text-align: center;
 }
.decorated > span{
    position: relative;
    display: inline-block;
}
.decorated > span:before, .decorated > span:after{
    content: '';
    position: absolute;
    top: 50%;
    border-bottom: 2px solid;
    width: 100vw;
    margin: 0 20px;
}
.decorated > span:before{
    right: 100%;
}
.decorated > span:after{
    left: 100%;
}

<h2 class="decorated"><span>My Title</span></h2>

Solution 3 - Html

This might work:

.floatClear {
  clear: both;
}
#wrapper {
  text-align: center;
  position: relative;
}
#wrapper .line {
  border-bottom: 2px solid red;
  position: absolute;
  width: 100%;
  top: 15px;
}
#wrapper .textbox {
  position: absolute;
  width: 100%;
}
#wrapper .textbox .text {
  background-color: white;
  margin: 0px auto;
  padding: 0px 10px;
  text-align: center;
  display: inline;
  font-size: 24px;
}

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <title>HTML</title>
  <link rel="stylesheet" href="main.css" type="text/css" />
</head>

<body>
  <div id="wrapper">
    <div class="line"></div>
    <div class="textbox">
      <div class="text">This is my Title</div>
    </div>
  </div>
</body>

</html>

What happens here is you set the text over the line the background and with the background-color plus the side padding so it will hide the line behind the text block.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTom GreeverView Question on Stackoverflow
Solution 1 - HtmlRomain PellerinView Answer on Stackoverflow
Solution 2 - HtmlelectrophanteauView Answer on Stackoverflow
Solution 3 - Htmluser1467267View Answer on Stackoverflow