webkit htm5 css reset for input elements
This is somewhat annoying. It appears that webkit (through chrome 13 canary) is having a right go at styling various input types and it's clashing with the design in a major way.
In particular, these are causing me a headache:
- selected element glow (via outline)
- placeholder= text style
- ugly glow around focused textarea and input fields
I am using boilerplate and modernizr.
A simple input[type=search]
with a placeholder overrides the text styling.
I know you can target it via
input::-webkit-input-placeholder
However, this does not seem to be able to style things like text-shadow
- which is a bit crap. Does anyone know if this is likely a bug that will be fixed or do I need to fall back on to a javascript placeholder solution?
The search input comes out with a white bg and removes the rounded corners defined in the base CSS class. I found a reset code:
input[type=search]::-webkit-search-decoration,
input[type=search]::-webkit-search-cancel-button,
input[type=search]::-webkit-search-results-button,
input[type=search]::-webkit-search-results-decoration {
display: none;
}
input[type=search] {
/* the webkit overrides need to stay at the top */
-webkit-appearance: textfield;
-webkit-box-sizing: content-box;
/* your styles here */
}
and it kind of helps.
The glow around form elements I fix by setting outline: none
.
I guess what I am really after is a CSS reset that takes out any pre-defined styles in the user agent stylesheet
(according to web inspector) that affect it. Is there any reset available that can do that so despite of the doctype being HTML5, the elements are rendered as simply as they were before HTML5 and follow implicit rules setup for them in the base CSS?
I hate to say it but despite of all its memory hogging issues and slowness of plugins, FireFox 4 actually renders everything perfectly. Webkit should not be trying to style things for you, just provide an API that allows you to do so if you wanted to...
A good form reset stylesheet (with a wee bit of JS) is Formalize.
Formalize resets everything and than works to ensure consistent forms across browsers.
Although this may require you to define additional styling, I typically place -webkit-appearance:none
on most form elements.
This seems to be working perfectly for me:
input[type=search]::-webkit-search-cancel-button,
input[type=search]::-webkit-search-decoration,
input[type=search]::-webkit-search-results-button,
input[type=search]::-webkit-search-results-decoration {
-webkit-appearance:none;
}
input[type=search] {
-webkit-appearance:textfield;
-webkit-box-sizing:content-box;
}
Quoting from "HTML5: Up and Running" by Mark Pilgrim:
"The
placeholder
atttribute can only contain text, not HTML markup. However, there are some vendor-specific CSS extensions (http://trac.webkit.org/export/37527/trunk/LayoutTests/fast/forms/placeholder-pseudo-style.html) that allow you to style the placeholder text in some browsers.
So I imagine you will have to fall back on a scripted solution for that aspect of your question at least, especially given that so far no version of IE supports placeholder text.
CSS reset styles are always a good start, since they save you headhaches.
If you want to remove the glow you can probably play a little with the outline property like you said, also setting text-shadow:none
might help.
Anyway it's just guessing if you first don't try to reset the styles with a reset, after all they are made specifically for making webpaged displayed the same on every browser.
精彩评论