I have a few simple CSS classes for a panel with a header. It works great when the background is a fixed color because I have to use that color to hide the border behind the
This is a common problem.
My solution is:
.panel-header
as the same of the background image.z-index: 0
to make it to the top layer.background-position
property.When you adjust the background-position
, you can also use jQuery to calculate the offset to make it accurate.
Hope it helps, see the snippet.
The effective code is just to add:
.panel-header {
z-index: 0;
background-image: url(http://placekitten.com/510/200);
background-position: -66px -38px;
}
.panel {
border: 2px solid #000000;
padding: 1em;
margin: 1em;
display: block;
}
.panel-header {
position: relative;
top: -1.5em;
// here!
z-index: 0;
background-image: url(http://placekitten.com/510/200);
background-position: -66px -38px;
padding-left: 0.4em;
padding-right: 0.4em;
font-size: 1.2rem;
font-weight: bold;
}
.panel-content {
margin-top: -0.5em;
}
<div class="panel">
<span class="panel-header">
Title Goes Here
</span>
<p class="panel-content">Glorious baklava ex librus hup hey ad infinitum. Non sequitur condominium facile et geranium incognito.</p>
</div>
<hr/>
<div style="background-image: url(http://placekitten.com/510/200); padding: 2em;">
<div class="panel">
<span class="panel-header">
Title Goes Here
</span>
<p class="panel-content">Glorious baklava ex librus hup hey ad infinitum. Non sequitur condominium facile et geranium incognito.</p>
</div>
</div>
here's the sample of what you need:
Firs of all, you need a container div with your Background (i've grabbed one from internet for this example).
After this, you need to use and snippets from HTML.
Your CSS
div {
padding: 30px;
background: url(https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSkAuRoZnkLBZlEYtgL5GJ5w_2Tufpxh5PqkOf-Negy7eL-JGC5Mk-DW-I) no-repeat center center;
background-size: cover;
}
fieldset {
border: 2px solid black;
padding: 10px;
}
Your HTML
<div>
<fieldset>
<legend>Personalia:</legend>
<p>some text here</p>
</fieldset>
</div>
Here you can see the Fiddle
I think this is a more useable version, that only requires one extra div and will be transferable to almost any image. Plus and this is a big plus, no extra image section would be required. It's reusable!
.panel-wrapper {
overflow: hidden;
}
.panel {
border: 2px solid #000000;
border-top: 0;
padding: 1em;
margin: 1em 0 0;
}
.panel-header {
position: relative;
top: -1.5em;
padding-left: 0.4em;
padding-right: 0.4em;
font-size: 1.2rem;
font-weight: bold;
}
.panel-header:before,
.panel-header:after {
content: "";
position: absolute;
height: 2px;
background: #000;
top: 50%;
}
.panel-header:before {
width: 100px;
left: -100px;
}
.panel-header:after {
width: 1000px;
right: -1000px;
}
.panel-content {
margin-top: -0.5em;
}
<div>
<div class="panel-wrapper">
<div class="panel">
<span class="panel-header">
Title Goes Here
</span>
<p class="panel-content">Glorious baklava ex librus hup hey ad infinitum. Non sequitur condominium facile et geranium incognito.</p>
</div>
</div>
</div>
<div style="background-image: url(http://placekitten.com/510/200); padding: 2em;">
<div class="panel-wrapper">
<div class="panel">
<span class="panel-header">
Title Goes Here
</span>
<p class="panel-content">Glorious baklava ex librus hup hey ad infinitum. Non sequitur condominium facile et geranium incognito.</p>
</div>
</div>
</div>