CSS Percentages completely fails in IE - html

I just finished designing a webpage for my photography. I used Chrome as my test browser.
But opening my page on IE, nothing was visible. After some trouble, I isolated the problem to the fact that I'm using percentages. I searched online for solutions but everything is about minor variations (related to padding and percentages).
Here is a simple HTML file that works perfectly in Chrome, but not all in IE (the div is a pixel-less box, slightly expanded by the presence of text). Your help is greatly appreciated. If I can't solve this issue, I'll have to completely redesign my site.
<html>
<head>
<title>A test HTML</title>
<style type="text/css">
#currpage
{
position: absolute;
bottom: 18%;
right: 10%;
left: 35%;
top: 15%;
border:2px solid green;
z-index: 240;
}
</style>
</head>
<body>
<div id="currpage" style="visibility: visible; opacity: 1;">
This is just a test.
</div>
</body>
</html>

Have you tried... actually making a well-formed HTML file?
Without a DOCTYPE, the browser renders the page in Quirks Mode. In the case of IE, it renders as it would in IE5.5, which didn't support a lot of now-basic stuff.
Add <!DOCTYPE HTML> to the start of the file.
EDIT: While you're at it, always include a Content-Type <meta> tag (such as <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> so that the browser knows what the encoding is. Also consider adding <meta http-equiv="X-UA-Compatible" content="IE=edge" /> to force IE to use the strictest standards mode it has. These appear on every single one of my pages, even the blank template. The DOCTYPE and Content-Type are required (if you want it to actually work), and the Compatible header is optional (I mainly use it to get rid of the Compatibility Mode button that is annoyingly close to the Refresh button...)

Well, I'm on mac, so I can't check it, but it seems that you don't have a doctype in your HTML, so the IE might be in trouble because he doesn't know how to parse your code.
At the very first line (even before the <html>-Tag write the following:
<!DOCTYPE html>
This is for a HTML5 document.
Edit: ....edit.... forget that point.

Set height and width of the containing element explicitly. I had a similar issue with one of my old pages (worked fine in Firefox and Chrome, went to hell in IE) and what I found that that in that Firefox and Chrome will automatically set the dimensions of the containing element if none are explicitly assigned and then base those percentages off those assumptions. IE makes no such assumptions so when it looks at the percentages it basically says "um 35% of what?"

Related

Why is my container wider than its child in other browsers than Chrome?

I need some help. While I was working on a project in Chrome, I wanted to test it in Firefox and was puzzled as to why it looked so different.
Can anyone explain to me why the green div containing the image doesn't adjust its width relative to the child? Is it a bug? Is it a feature? Is it a bugfeature?
Research
It works, as I expect in Chrome, where it looks like this:
But in Firefox, there is a lot of weird white space (this is the same image as the first):
Also, here is a screenshot of the following browsers (starting from the left) Firefox, Opera and Internet Explorer 11:
As you can see, it works like I expect in Opera, but not in FF and IE11. It doesn't work in Edge either.
My findings
It looks to me like Firefox forgets to recalculate the parent's width after the image has been resized.
Here is a screenshot without height constraints (100% of the parents 200px height):
If I readd the height constraint, it looks like this:
As you can see, the width is the same. Note that the green div's width is 510px. That is the the same as the image (500px) + the padding (5px + 5px).
The code
I tried to add a jsFiddle, for your convenience, but curiously, I were not able to reproduce the error there (it worked as it was supposed to).
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style>
.wrapper {
height: 200px;
}
.div1 {
float: left;
background-color: green;
}
.div1 img {
height: 100%;
padding: 5px;
}
.div2 {
background-color: blue;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="div1">
<img src="http://placehold.it/500x500">
</div>
<div class="div2">
<h1>Heading</h1>
</div>
</div>
</body>
</html>
I'll answer my own question in hope of helping someone else
TLDR:
I was missing the HTML5 doctype declaration, which looks like this: <!DOCTYPE html>.
Longer version:
While writing this question, it suddenly struck me that it could be caused by the lack of a doctype declaration. A quick test confirmed my suspicion. All I was missing was the <!DOCTYPE html> declaration!
It's safe to say that I'll update my snippet to include a doctype. I used Visual Studio's doc snippet and never gave it another thought. Note that the html snippet already includes a doctype. (In VS: If you type html or doc and hit tab in an HTML document, a quick HTML template will appear)
Why
Without a doctype declaration, the browser renders the page as best it can, in the so called quirks mode. In quirks mode the browser has to guess how the page is supposed to look with primary focus on backwards compabillity. Therefor the result naturally deviates from newer specifications.
The doctypes was invented to differentiate legacy sites from those using newer specs back when IE and Netscape was a thing. You can read more about it on MDN here:
Doctype
Quirks mode
Nice to know:
Make sure you put the DOCTYPE right at the beginning of your HTML document. Anything before the DOCTYPE, like a comment or an XML declaration will trigger quirks mode in Internet Explorer 9 and older.
-MDN
In HTML5, the only purpose of the DOCTYPE is to activate full standards mode.
-MDN
How to see which mode is being used
On Windows, click alt to bring up the good old toolbar, then go to Tools ➡ Page info

Internet Explorer 9+ has problems resizing a flash object in a table

I have a flash-based video player that is embedded in a html-table based layout. The expected behaviour is that the video player resizes automatically, depending on the size of the browser window. This works well in many tested browsers (Firefox, Chrome, Safari, Internet Explorer up to 8).
In IE 9 and 10, tested on Windows 7 and 8.1, resizing works well in the x-axis, and enlarging works well in the y-axis. However, when the user shrinks the window size vertically, the flash player size stays the same and IE "helpfully" adds a vertical scrollbar to the window, instead of adapting the size to fill the smaller space.
The smallest possible HTML code that I came up with to demonstrate this behaviour is:
<html>
<head>
<title>simplest testcase</title>
</head>
<body>
<table style="width: 100%; height: 100%;"><tr><td>
<object type="application/x-shockwave-flash"
style="width: 100%; height: 100%;" data="jwplayer.flash.swf"></object>
</td></tr></table>
</body>
</html>
Note that it does not depend on jwplayer, I was able to reproduce the problem with any .swf I tried. Also note that jwplayer rightfully displays an error message for missing configuration - this is not the problem, it's just about the resizing of the flash object in the HTML page. Also note that IE 8 and below do not understand the <object type="application/x-shockwave-flash"> method of embedding - again, this is not the problem here; a more complex page that uses the appropriate embedding method displays the same problem.
This example html page can be accessed at http://guardian.werft22.net/public/test-ie.html
When I replace the <object> with an <img> resizing works as expected, suggesting the problem is not entirely within IE's size-determining-engine.
Removing the table around the Flash object makes it work correctly as well. However, the original embedded video player is a quite complex table-based layout beast, and I'd like to avoid having to re-engineer it.
When I add
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">
into the HTML header to force IE to downgrade to a different rendering method, it works correctly.
So, now my questions: Has anybody ever experienced something like this? If so, is there a more elegant workaround?
Does anybody has any ideas on whom (and how) to report this bug to? Microsoft or Adobe?
Thank you very much in advance!
I had a similar problem embedding a Silverlight component in an object tag.
The solution was to add style="position: absolute;" on the object tag and style="position: relative" on the td tag. The last (relative) tag is important if you have elements that are supposed to be placed above the embedded element, or else you may see that the elements are placed on top of each other.
Seems to be a bug? when using default positioning.
<html>
<head>
<title>simplest testcase</title>
</head>
<body>
<table style="width: 100%; height: 100%; position:relative"><tr><td>
<object type="application/x-shockwave-flash"
style="width: 100%; height: 100%; position=absolute;" data="jwplayer.flash.swf"></object>
</td></tr></table>
</body>
</html>

broken css on internet explorer

I have a web project that just breaks when I run it on Internet Explorer. Here it is, working as I want it to, on jsfiddle.
On IE, the display_area goes up and mixes with the toolbar up top. Also, the posts mixes into the side_display_area instead of them being confined to main_display_area, as is on the jsfiddle.
The problem I had was because IE, by default, uses 'Quirky' mode for its CSS rendering for the sake of compatibility with older code that was written ad hoc for IE. Although IE currently has different standard compliant modes(I can't attest to how compliant, however), it still defaults to this compatibility mode.
The solution is to override, or explicitly set, the rendering mode of IE via the X-UA-Compatible header. You can do this through html tags with:
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
</head>
more info
I think this may help http://css-tricks.com/the-css-overflow-property/
Consider adding some div to you horizontal menu and put some height on that
div.hmenu {
margin-left:auto;
margin-right:auto;
height: 20px;
min-width:1000px;
max-width:90%;
overflow:auto;
}

Firefox text 1px lower than chrome and ie

This is driving me crazy. Firefox text is 1px lower than in chrome and ie. It's not a margin or padding issue on html or body, tried that. Doesn't seem to be a rounding issue either. Here is an image:
First "Hello" is Firefox 13, Second "Hello" is IE9 and "Hello World" is Chrome.
Here is the code (pretty simple):
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<!-- Always force latest IE rendering engine and chrome frame -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Pixel Bug?</title>
<style type="text/css">
html{
font-size: 100%;
}
body{
font-size: 1em;
line-height: 1.5;
background: white url('images/grid16.png') -4px -6px;
}
p{
margin: 1.5em 0;
}
</style>
</head>
<body>
<p>Hello World!</p>
<p>Hello World 2!</p>
</body>
</html>
Is it just a bug? What is going on here? I don't want a FireFox only work around, I just want to understand why this is happening.
EDIT:
Upon further research it seems to be a rendering bug, but it still confuses me. For example, the height of the text should be 24px. Which shouldn't really cause rounding errors that would cause this. Yet, if I change the line-height to 23px explicitly it lines up. I have no idea why.
EDIT2: Possible reason? https://bugzilla.mozilla.org/show_bug.cgi?id=442139
EDIT3: Lines up using a 20px font and 40px line height. Makes me think this is just so rendering bug. It's sucks cause 16/24 is pretty standard :/
See my earlier answer here::
CSS white-space and list-style-image do not stack in Firefox 11+
You are not using reset.css thus creating problems
Here you can find many links for the reset.css
Reason for using reset.css is because it will make all user-agent(browser) css to a base settings, so that they don't look different in different browsers.
Edit::
As the OP used the reset.css . I can't reproduce the issue. So the other reasons might be
Font rendering issue of different broser engine. No particuar fix Read more
Issue with hardware. Joel talks about it in his blog.
Also, I agree with what #steveax said.
Edit 2::
If you want to go in depth about it .
Raise a bug
Try tuning your browser yourself

Positioning issues in IE

I've made a theme for the blogging platform Tumblr, and it works fine on all browsers except IE.
IE won't fix the position of a div on the bottom of the screen, and squishes everything to the left instead of most of them being fixed to the right.
The address is 009panelstheme.tumblr.com
Here's a screenshot in IE: http://i56.tinypic.com/2b30jk.png
Same thing in Chrome: http://i55.tinypic.com/2d8172o.png
I've tried the whole Doctype thing, and I found someone who said to add this line:
<!--[if IE]>
<style type="text/css">
#media screen {
* html {overflow-y: hidden;}
* html body {height: 100%; overflow: auto;}
}
</style>
<![endif]-->
But nothing I do works.
Any suggestions would be wonderful. Thank you so much.
Your attempt at adding a doctype failed. Using IE's Developer Tools (press F12), you can clearly see it's rendering in Quirks Mode. Changing it to Standards Mode in the Developer Tools makes it work.
When I look at the source, I see this:
<meta http-equiv="x-dns-prefetch-control" content="off"/><!DOCTYPE HTML>
<html lang="en">
...
The doctype needs to be the very first thing on the page!
Where does that meta tag come from? Can you move it into the head?
Speaking of which, further down the page I see this:
<header>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...
header isn't what you should be using there. It's head. header is something else entirely.