I would like to hide some part of the child, so everything outside of the parent container isn't visible (so part of my picture should be cropped by the height of the container)
I followed lot of forums answer that told to put the container to relative (mine must be relative so this wasn't a problem)
.img-container {
margin : auto;
overflow:hidden;
width:250px;
position: relative;
height: 250px;
border : 5px dotted gray;
}
.img-container object, .img-container img{
position : absolute;
display: inline-block;
}
.img1{
top : 0px;
left : 0px;
width:60%;
}
.img2{
width: 52%;
left :120px;
top:50px;
}
<div class="img-container">
<object class='img1' data='https://svgshare.com/i/6Pz.svg'>
</object>
<object class='img2' data='https://svgshare.com/i/6Pz.svg'>
</object>
</div>
https://jsfiddle.net/u0upm3j3/2/
ANSWER :
Well well well... Something that i don't understand : it work now.
What did i do ? Nothing at all, apart of restarting Chrome.
Thanks you D3nj, Cavdi for your answer and Creaforge and Daniel for comment, sorry to make you lose a bit your time. But really, i don't understand how it can work now and not before...
The example in the pos is working good.
img-container {
margin : auto;
overflow-x: hidden;
overflow-y: hidden;
width:250px;
position: relative;
height: 250px;
border : 5px dotted gray;
}
.img-container object, .img-container img{
position : absolute;
display: inline-block;
}
.img1{
top : 0px;
left : 0px;
width:60%;
}
.img2{
width: 52%;
left :120px;
top:50px;
}
use this as general on your css and remove the overflow from the image style
*, html, body {
overflow-x: hidden;
}
I'm afraid I'm not understanding z-index properly, and can't get my CSS to layer as I'd like it to. I'm trying to get a description to float above a bottom fixed div, which I thought would be simple with z-index - give it an index of 3, higher than the two other units on the page. But for some reason it's not behaving as expected - can anyone tell me why?
HTML example:
<div id="wrapper">
<div class="portfolio-slideshow">
<div class="slideshow-meta">
<p class="slideshow-title">My Title</p>
</div>
</div>
</div>
<div id="footer-hairline">
</div>
CSS:
#wrapper {
margin: 0 190px 0 100px;
}
.portfolio-slideshow {
margin: 10px 0 0;
z-index: 1;
clear: both;
position: relative;
}
.slideshow-meta {
position: fixed;
bottom: 30px;
font-size: 13px;
color: #989799;
line-height: 14px;
z-index: 3;
}
#footer-hairline {
height: 70px;
width: 100%;
border-top: 1px solid #CCC;
background: #FFF;
position: fixed;
left: 0;
right: 0;
bottom: 0;
z-index: 2;
}
If I remove .portfolio-slideshow's z-index, it works as expected. But why should I have to do that? I'm missing something here, but I can't figure out what.
I made a JS Fiddle to demonstrate here: http://jsfiddle.net/qZzYM/1/
Just answered a similiar question a moment ago
z-index of elements in different parents in Chrome
basicaly
a child element can never have a higher z index then its parent. That's why it works when you remove the parent zindex
I would like to know how can i center this box?
HTML Code:
<div id="box"></div>
CSS Code:
#box
{
width : 30%;
height : auto;
overflow : auto ;
border : 1px solid #C5C5C5;
background : #F8F8F8;
position : absolute;
left : 33.6%;
border-top : none;
text-align : left;
display : none;
}
Try the following CSS:
#box
{
margin: 0 auto;
width: 100px; /* Or some other width */
}
Since #box is absolutely positioned, you would center it like so:
#box {
left: 50%; /* centers #box in its containing element */
margin-left: -15%; /* half the element's width (30%) */
}
Those properties are in addition to the ones you've set already.
The idea is to position #box's left edge in the center of its containing element (left: 50%), then move #box left by half its own width by giving it a negative margin (margin-left: -15%).
This works for me:
.Box {
background-color: lightgrey;
width: 400px;
border: 25px solid grey;
padding: 25px;
margin: 25px;
align-content:center;
position: fixed;
top: 50%;
left: 50%;
margin-top: -50px;
margin-left: -100px;
}
I have 2 ids on my page as;
<div id="a">
<div id="b"></div>
</div>
With styling;
#a {
height: 25px;
width: 100px;
background-color: #9DBA6A;
}
#b {
height: 25px;
width: 25px;
background-color: #FF7E00;
}
I want to stick div b on div a's bottom with some -ve margin or padding and I want to remain its position like that when div a's height changes. The layout cannot be altered.
Here is a diagram;
You can see my fiddle here and the complete layout here.
Check out this fiddle... http://jsfiddle.net/23gCd/
I've kept your <div id="b"></div> inside your <div id="a"></div>. It will stay below #a no matter the height, but if #b's height changes, you'd have to change it in the CSS.
CSS
#a {
height: 25px;
width: 100px;
background-color: #9DBA6A;
position: relative;
}
#b {
height: 25px;
width: 25px;
background-color: #FF7E00;
position: absolute;
bottom: -25px;
}
Adding the position: relative property to #a allows us to absolutely position #b relative to where #a is. So you can offset #b -25px from the bottom; if the height of #b changes, you'd have to change that offset as well.
I have tried this in your fiddle and it worked:
#a {
height: 10px;
width: 100px;
background-color: #9DBA6A;
position : relative;
}
#b {
height: 25px;
width: 25px;
background-color: #FF7E00;
position : absolute;
bottom : -25px;
}
greetings
Mh, I don't know a solution for doing this with plain css if the height is not hardcoded. But if the height is hardcoded, just use margin-top: 25px; on b...
How would you want to change the height of a? Or would you remove the height: 25px; in your production code?
Another way is setting position:relative on parent (that's not bad!) and position:absolute on child. The positions of child will be computed according to parent so bottom:0 will stick it to bottom.
See http://jsfiddle.net/shP3D/12/
I would like to make a position: fixed; popup box centered to the screen with a dynamic width and height. I used margin: 5% auto; for this. Without position: fixed; it centers fine horizontally, but not vertically. After adding position: fixed;, it's even not centering horizontally.
Here's the complete set:
.jqbox_innerhtml {
position: fixed;
width: 500px;
height: 200px;
margin: 5% auto;
padding: 10px;
border: 5px solid #ccc;
background-color: #fff;
}
<div class="jqbox_innerhtml">
This should be inside a horizontally
and vertically centered box.
</div>
How do I center this box in screen with CSS?
If your div has a known width and height, then you basically need to set top and left to 50% to center the left-top corner of the div. You also need to set the margin-top and margin-left to the negative half of the div's height and width to shift the center towards the middle of the div.
position: fixed;
width: 500px;
height: 200px;
top: 50%;
left: 50%;
margin-top: -100px; /* Negative half of height. */
margin-left: -250px; /* Negative half of width. */
Or, if your div has a dynamic/undefined width and/or height, then instead of the margin, set the transform to the negative half of the div's relative width and height.
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
Or, if your div has at least a fixed width and you don't care about centering vertically and old browsers such as IE6/7, then you can instead also add left: 0 and right: 0 to the element having a margin-left and margin-right of auto, so that the fixed positioned element having a fixed width knows where its left and right offsets start. In your case thus:
position: fixed;
width: 500px;
margin: 5% auto; /* Will not center vertically and won't work in IE6/7. */
left: 0;
right: 0;
Again, this works only in IE8+ if you care about IE, and this centers only horizontally not vertically.
I want to make a popup box centered to the screen with dynamic width and height.
Here is a modern approach for horizontally centering an element with a dynamic width - it works in all modern browsers; support can be seen here.
Updated Example
.jqbox_innerhtml {
position: fixed;
left: 50%;
transform: translateX(-50%);
}
For both vertical and horizontal centering you could use the following:
Updated Example
.jqbox_innerhtml {
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
You may wish to add in more vendor prefixed properties too (see the examples).
Or just add left: 0 and right: 0 to your original CSS, which makes it behave similarly to a regular non-fixed element and the usual auto-margin technique works:
.jqbox_innerhtml
{
position: fixed;
width:500px;
height:200px;
background-color:#FFF;
padding:10px;
border:5px solid #CCC;
z-index:200;
margin: 5% auto;
left: 0;
right: 0;
}
Note you need to use a valid (X)HTML DOCTYPE for it to behave correctly in IE (which you should of course have anyway..!)
Add a container like:
div {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
text-align: center;
}
Then put your box into this div will do the work.
Edit: as mentioned in the comments, the inner content needs to be set to display: inline-block assuming there're two divs like:
<div class="outer">
<div class="inner">
content goes here
</div>
</div>
Then the CSS for the inner needs to be:
.outer {
position: fixed;
text-align: center;
left: 0;
right: 0;
}
.inner {
display: inline-block;
}
Together with the outer div having a left: 0; right:0; and text-align: center this will align the inner div centered, without explicitly specifying the width of the inner div.
Just add:
left: calc(-50vw + 50%);
right: calc(-50vw + 50%);
margin-left: auto;
margin-right: auto;
Center fixed position element
(the simple & best way I know)
position:fixed;
top: 0; left: 0;
transform: translate(calc(50vw - 50%));
For centering it horizontally & vertically (if height is same as width)
position:fixed;
top: 0; left: 0;
transform: translate(calc(50vw - 50%), calc(50vh - 50%));
Both of these approaches will not limit centered element's width less than viewport width, when using margins in flexbox, inside centered element
#modal {
display: flex;
justify-content: space-around;
align-items: center;
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
inside it can be any element with diffenet width, height or without.
all are centered.
This solution does not require of you to define a width and height to your popup div.
http://jsfiddle.net/4Ly4B/33/
And instead of calculating the size of the popup, and minus half to the top, javascript is resizeing the popupContainer to fill out the whole screen...
(100% height, does not work when useing display:table-cell; (wich is required to center something vertically))...
Anyway it works :)
left: 0;
right: 0;
Was not working under IE7.
Changed to
left:auto;
right:auto;
Started working but in the rest browsers it stop working!
So used this way for IE7 below
if ($.browser.msie && parseInt($.browser.version, 10) <= 7) {
strAlertWrapper.css({position:'fixed', bottom:'0', height:'auto', left:'auto', right:'auto'});
}
I used vw (viewport width) and vh (viewport height). viewport is your entire screen. 100vw is your screens total width and 100vh is total height.
.class_name{
width: 50vw;
height: 50vh;
border: 1px solid red;
position: fixed;
left: 25vw;top: 25vh;
}
You can basically wrap it into another div and set its position to fixed.
.bg {
position: fixed;
width: 100%;
}
.jqbox_innerhtml {
width: 500px;
height: 200px;
margin: 5% auto;
padding: 10px;
border: 5px solid #ccc;
background-color: #fff;
}
<div class="bg">
<div class="jqbox_innerhtml">
This should be inside a horizontally and vertically centered box.
</div>
</div>
I just use something like this:
.c-dialogbox {
--width: 56rem;
--height: 32rem;
position: fixed;
width: var(--width);
height: var(--height);
left: calc( ( 100% - var(--width) ) / 2 );
right: calc( ( 100% - var(--width) ) / 2 );
top: calc( ( 100% - var(--height) ) / 2 );
bottom: calc( ( 100% - var(--height) ) / 2 );
}
It centers the dialog box both horizontally and vertically for me, and I can use different width and height to fit different screen resolutions to make it responsive, with media queries.
Not an option if you still need to provide support for browsers where CSS custom properties or calc() are not supported (check on caniuse.)
This one worked the best for me:
display: flex;
justify-content: center;
align-items: center;
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
To fix the position use this :
div {
position: fixed;
left: 68%;
transform: translateX(-8%);
}
simple, try this
position: fixed;
width: 500px;
height: 300px;
top: calc(50% - 150px);
left: calc(50% - 250px);
background-color: red;
One possible answer:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>CSS Center Background Demo</title>
<style type="text/css">
body {
margin: 0;
padding: 0;
}
div.centred_background_stage_1 {
position: fixed;
z-index:(-1 );
top: 45%;
left: 50%;
}
div.centred_background_stage_2 {
position: relative;
left: -50%;
top: -208px;
/* % does not work.
According to the
http://reeddesign.co.uk/test/points-pixels.html
6pt is about 8px
In the case of this demo the background
text consists of three lines with
font size 80pt.
3 lines (with space between the lines)
times 80pt is about
~3*(1.3)*80pt*(8px/6pt)~ 416px
50% from the 416px = 208px
*/
text-align: left;
vertical-align: top;
}
#bells_and_wistles_for_the_demo {
font-family: monospace;
font-size: 80pt;
font-weight: bold;
color: #E0E0E0;
}
div.centred_background_foreground {
z-index: 1;
position: relative;
}
</style>
</head>
<body>
<div class="centred_background_stage_1">
<div class="centred_background_stage_2">
<div id="bells_and_wistles_for_the_demo">
World<br/>
Wide<br/>
Web
</div>
</div>
</div>
<div class="centred_background_foreground">
This is a demo for <br/>
<a href="http://stackoverflow.com/questions/2005954/center-element-with-positionfixed">
http://stackoverflow.com/questions/2005954/center-element-with-positionfixed
</a>
<br/><br/>
<a href="http://www.starwreck.com/" style="border: 0px;">
<img src="./star_wreck_in_the_perkinnintg.jpg"
style="opacity:0.1;"/>
</a>
<br/>
</div>
</body>
</html>
Try using this for horizontal elements that won't center correctly.
width: calc (width: 100% - width whatever else is off centering it)
For example if your side navigation bar is 200px:
width: calc(100% - 200px);
This works wonderfully when you don't know the size of the thing you are centering, and you want it centered in all screen sizes:
.modal {
position: fixed;
width: 90%;
height: 90%;
top: 5%; /* (100 - height) / 2 */
left: 5%; /* (100 - width) / 2 */
}
What I use is simple. For example I have a nav bar that is position : fixed so I adjust it to leave a small space to the edges like this.
nav {
right: 1%;
width: 98%;
position: fixed;
margin: auto;
padding: 0;
}
The idea is to take the remainder percentage of the width "in this case 2%" and use the half of it.
Had this problem so I concluded that using a (invisible) container is the best option (based on answer #Romulus Urakagi Ts'ai). To make it with flexbox:
.zoom-alert {
position: fixed;
justify-content: center;
display: flex;
bottom: 24px;
right: 0;
left: 0;
z-index: 100000;
width: 100%;
&__alert {
flex: 0 0 500px;
padding: 24px;
background-color: rgba(212, 193, 105, 0.9);
border: 1px solid rgb(80, 87, 23);
border-radius: 10px;
}
}
(the syntax is SCSS but can be easily modified to pure CSS)
Center element of a div with the property of
position:fixed
Html and Css code
.jqbox_innerhtml {
position: fixed;
width:100%;
height:100%;
display: flex;
justify-content: space-around;
align-items: center;
left: 0;
top: 0;
width: 100%;
height: 100%;
border: 5px solid #ccc;
background-color: #fff;
}
<div class="jqbox_innerhtml">
This should be inside a horizontally
and vertically centered box.
</div>
Another simple solution is to set the width of the element to fit-content and set the left and right to 0px;
width: fit-content;
position: fixed;
left: 0px;
right: 0px;
This is useful if you don't know the width of the element.
The only foolproof solution is to use table align=center as in:
<table align=center><tr><td>
<div>
...
</div>
</td></tr></table>
I cannot believe people all over the world wasting these copious amount to silly time to solve such a fundamental problem as centering a div. css solution does not work for all browsers, jquery solution is a software computational solution and is not an option for other reasons.
I have wasted too much time repeatedly to avoid using table, but experience tell me to stop fighting it. Use table for centering div. Works all the time in all browsers! Never worry any more.