Home : Table of CSS3 border-radius Compliance

Table of CSS3 border-radius Compliance

Content last updated Aug 17, 2011 – First impression of Firefox 6.

border-radius seems to be a hot topic these days, what with CSS3 including it and some broswer vendors already implementing it. I just think it looks nice.

I originally created this table to see how the various browsers acted, but it’s also a very useful table of examples of how to use border-radius in your designs. Even after many readings, some of the wording in the proposed specification can be confusing. I’ve done my best to get things right here.

The top half of this table is looking pretty good these days, if you ignore the elephant in the room whose name will not be mentioned (until later). Eventually this page will be a syntax reference instead of a compliance table. That will be a Good Thing.

Safari and Chrome
Big news, everyone! Safari 5 is out and has caught up with Google Chrome. And with Safari 5.1 we finally have support for expressing the radii as percentages.

If you do not need to support older versions of Chrome or Safari (and Apple’s Software Update will make sure Safari 4 goes away very quickly), then the -webkit- prefix is a thing of the past!

Firefox 3
As of Firefox 3.6.3, it is still necessary to use the -moz- prefix. More importantly, the syntax for specifying individual corners is different for Mozilla. I tested to see if the latest might also accept the syntax from the spec, but it did not. For the time being I believe it’s better to use the shorthand to specify the different corners. That way your CSS markup will be the same as the standard except for the -moz- prefix.

Firefox 4 and 5 and… 6?
Firefox 6? Really? Are we suddenly in a rush to bigger version numbers? Anyway, no big change since Firefox 4. I’m going to add some new tests, but I won’t go back and fill in old browser versions. At first glance, at least, FF6 = FF5 = FF4.

The biggest news with Firefox 4 is the move to the standard CSS for specifying individual corners. Hooray! It will still accept the old -moz-wrong-order prefixes, but going forward Firefox will be playing well with others. Firefox worked out a couple of other kinks as well, and is looking pretty good overall.

Opera
Opera 10.5 has border-radius and it’s pretty complete. There are a couple of odd bugs that make me think they just need to look at this page and their programmer will slap his head and say “d’oh!” and all will be well in the next release. [Note: Opera 10.6 still has those bugs.]

Internet Explorer
Wow! Internet Explorer 9 beta has, as of this writing, the best border-radius support of any browser. It will be a good day when we don’t have to support Internet Explorer 8 anymore.

Other notes
I used SVG graphics to create most of the images for the specification column. That way I was able to type in the exact drawing commands based on my interpretation of the spec. The graphics are my own work and any errors are all my fault.

So here’s the table. I’ll try to remember to update this as new browser releases come out, but you can help too! If there are interesting cases that should be in the table, or if I’m slacking and browser support has changed, please drop me a note!


Select the browsers to include in the table:









property definitionCSS3 SpecificationIE 9Opera 10.6Safari 4
Safari 4
with -webkit- prefix
Webkit
Safari 5.1
Chrome 12.0.742.122
Firefox 3.6.3
with -moz- prefix
Firefox 4 & 5your browser
with prefixes
your browser
standard CSS
border-radius: 15px;std-br-15std-br-15std-br-15std-br-15std-br-15std-br-15std-br-15
border-radius: 20px 10px;moz-br-20-10moz-br-20-10moz-br-20-10std-br-20-10moz-br-20-10moz-br-20-10moz-br-20-10
border-top-left-radius: 20px;

/* -moz-border-radius-topleft */
std-t-r-20std-t-r-20std-t-r-20std-t-r-20std-t-r-20std-t-r-20std-t-r-20
border-top-left-radius: 40px 20px;std-t-r-40-20std-t-r-40-20std-t-r-40-20std-t-r-40-20std-t-r-40-20std-t-r-40-20std-t-r-40-20
border-radius: 20px 10px 5px 30px;std-br-20-10-5-30std-br-20-10-5-30std-br-20-10-5-30std-br-20-10-5-30std-br-20-10-5-30std-br-20-10-5-30std-br-20-10-5-30
border-radius: 20px / 10px;std-br-20-10std-br-20-10std-br-20-10boxstd-br-20-10std-br-20-10std-br-20-10
border-radius: 20px 10px / 20px 10px;moz-br-20-10moz-br-20-10moz-br-20-10boxmoz-br-20-10moz-br-20-10moz-br-20-10
border-radius: 20px 10px 5px 15px / 10px 25px;std-br-20-15-5-40_10-25std-br-20-15-5-40_10-25std-br-20-15-5-40_10-25boxstd-br-20-15-5-40_10-25std-br-20-15-5-40_10-25std-br-20-15-5-40_10-25
border-top-left-radius: 20px 10px; border-top-right-radius: 10px 25px; border-bottom-right-radius: 5px 10px; border-bottom-left-radius: 15px 25px;std-br-20-15-5-40_10-25std-br-20-15-5-40_10-25std-br-20-15-5-40_10-25std-br-20-15-5-40_10-25std-br-20-15-5-40_10-25std-br-20-15-5-40_10-25std-br-20-15-5-40_10-25
border-radius:50%;box
border-left: solid 20px; border-top: solid 20px; border-top-left-radius:40px;

/* radius is applied to outer edge of border */
std-tl40_TL20std-tl40_TL20std-tl40_TL20std-tl40_TL20std-tl40_TL20std-tl40_TL20std-tl40_TL20
border-left: solid 30px; border-top: solid 30px; border-top-left-radius:20px;

/* radius less than border thickness */
std-tl20_TL30std-tl20_TL30opera-tl20_TL30std-tl20_TL30std-tl20_TL30std-tl20_TL30std-tl20_TL30
border-left: solid 4px; border-top: solid 30px; border-top-left-radius:20px;

/* radius less than thicker edge */
std-tl20_T30-L4std-tl20_T30-L4opera-tl20_T30-L4wbk-tl20_T30-L4std-tl20_T30-L4std-tl20_T30-L4std-tl20_T30-L4
border-left: solid 4px; border-top: solid 15px; border-top-left-radius:30px;

/* radius greater than thicker edge */
std-tl30_T15-L4moz-tl30_T15-L4moz-tl30_T15-L4wbk-tl30_T15-L4std-tl30_T15-L4moz-tl30_T15-L4moz-tl30_T15-L4
border-top: solid 15px; border-top-left-radius:30px;

/* thick edge on top, no border on side */
std-tl30_T15-L0std-tl30_T15-L0std-tl30_T15-L0wbk-tl30_T15-L0std-tl30_T15-L0moz-tl30_T15-L0moz-tl30_T15-L0
border-left: solid 20px white; border-top: solid 20px white; border-top-left-radius:40px;

/* border lighter than div's background */
border-top-left-radius: 120px 60px; border-top-right-radius: 120px 60px; border-bottom-right-radius: 20px 20px; border-bottom-left-radius: 20px 20px;

/* top horizontal radii add up to 240px, four times the width of the div. Therefore ALL radii are divided by four. */
std-br30-30-5-5_15-15-5-5std-br30-30-5-5_15-15-5-5std-br30-30-5-5_15-15-5-5std-br30-30-5-5_15-15-5-5std-br30-30-5-5_15-15-5-5std-br30-30-5-5_15-15-5-5std-br30-30-5-5_15-15-5-5
border-top-left-radius: 200% 100%; border-top-right-radius: 200% 100%; border-bottom-right-radius: 33% 33%; border-bottom-left-radius: 33% 33%;

/* top horizontal radii add up to 400%, therefore ALL radii are divided by four. */
std-br30-30-5-5_15-15-5-5std-br30-30-5-5_15-15-5-5std-br30-30-5-5_15-15-5-5boxstd-br30-30-5-5_15-15-5-5std-br30-30-5-5_15-15-5-5std-br30-30-5-5_15-15-5-5
border-left: dashed 2px; border-top: dashed 2px; border-top-left-radius: 40px 20px;std-tl40-20_dashedstd-tl40-20_dashedstd-tl40-20_dashedstd-tl40-20_dashedstd-tl40-20_dashedmoz-tl40-20_dashedmoz-tl40-20_dashed
border-left: dotted 10px; border-top: dotted 15px; border-top-left-radius: 40px 20px;opera-tl40-20_T15dot-L10dotopera-tl40-20_T15dot-L10dotwebkit-tl40-20_T15dot-L10dotwebkit-tl40-20_T15dot-L10dotmoz-tl40-20_T15dot-L10dotmoz-tl40-20_T15dot-L10dot
border-left: solid 15px blue; border-top: solid 15px red; border-top-left-radius: 50px 25px;Who the heck knows?
Click to see my attempt at interpreting the spec.
moz-tl40-20_Tred-Lbluemoz-tl40-20_Tred-Lbluewbk-tl40-20_Tred-Lbluewbk-tl40-20_Tred-Lbluemoz-tl40-20_Tred-Lbluemoz-tl40-20_Tred-Lblue
border-left: solid 30px blue; border-top: solid 30px red; border-top-left-radius: 40px/20px;

NOTE: I have been working on an implementation of border-radius here that addresses most (but not yet all) of the errors browsers encounter. It's a work in progress so it might be broken at any given moment, but it's not to shabby. I've made no effort to test this on various browsers.

Border is drawn in a way that does not match the proposed specification.

Border is drawn correctly but property name is different. Specifically, Mozilla specifies individual corners differently. Web designers should use the different syntax with the understanding that it will be obsolete later. Later rows in the table assume you understand that Mozilla is different.

Technically wrong, but not by much. Considering the things that the draft doesn't specify, the angle of the line between the colors seems pretty minor. The spec also "recommends" a gradient. NOTE: I am reviewing this right now; I suspect that Webkit is also subtly wrong. The spec uses English to describe a complex geometric relationship, rather than using math. There are several places they could have removed ambiguity and made compliance easier just by using numbers rather than words.

These two rows are exactly equivalent in terms of the CSS3 specification. I color-coded the values to indicate how the browser should expand the shorthand into the longhand.

The CSS3 draft merely says the transition between borders of different thicknesses be smooth, so although the Mozilla implementation does not match the illustration in the spec (it uses an elliptical curve on the interior where the illustration in the draft uses a circular curve), it is probably compliant. Web developers note that they cannot rely on inner borders looking exactly the same between fully-compliant browsers.

Note:

I recently updated my “Who the hell knows?” page. I added a section on how I think the standard should be for defining the transition between two styles at a curved corner. While I was at it, I corrected a couple of errors in the formulas as they were printed on the page. My interactive demo actually outperforms all current browsers for solid borders. The new section is really pretty slick!

Firefox 3 note
I should have tested with the latest Firefox 3 (3.6.12, I think) before chucking it off my computer. I’ll probably go back and test it at some point, or if anyone out there wants to check and give me an update, that would be great!

More on Webkit (Safari and Chrome)
The overhaul I said was necessary has happened. I don’t know if my test thingie helped them or not, but some very smart people went in and made things a lot better. Still waiting for dots, though…

Hire Jerry Seeger

Copyright © 2009 Jerry Seeger
All Rights reserved until I get that creative commons thing figured out.

77 Responses to “Table of CSS3 border-radius Compliance”

  1. +2 Vote -1 Vote +1
    Jerry
    says:

    Boy, I tell you, being able to type the drawing instructions into an SVG graphic file sure made drawing the exact images a lot easier. Too bad I couldn’t use the .svg images in the page. *cough*InternetExplorer*cough*

  2. [...] Until more browsers begin to support CSS3, these options are a good way to increasing backwards compatibility with pure CSS. If you’re wondering how specific browsers handle the specification, this table has the results organized nicely. [...]

  3. [...] This post was mentioned on Twitter by Cala, Alexey Simonenko. Alexey Simonenko said: Отличия реализации #CSS3-свойства border-radius в текущих браузерах: http://bit.ly/KUxXM [...]

  4. Vote -1 Vote +1
    aMeen
    says:

    Very interesting.

    By the way, in the 3rd and 4th row I think it should be:
    top-left
    while it is now:
    top-right

    Ameen

  5. Vote -1 Vote +1
    choen
    says:

    thank you, very complete guide

  6. Vote -1 Vote +1
    Jerry
    says:

    Updated to Firefox 3.5.4. No changes that I could detect; I checked for support of non-prefixed standard border-top-left-radius but no change there either.

  7. [...] Web | Table of CSS3 border-radius Compliance Vía | CSS [...]

  8. What a great compat. table! It should be noted that Chrome 4b’s webkit (on Mac) get’s nearly everything right, except the 3 thick-thin tests towards the bottom.

  9. [...] Table of CSS3 border-radius Compliance Tableau du support de la propriété CSS 3 border-radius [...]

  10. [...] Table of CSS3 border-radius Compliance – Es ist an der Browser-Front noch viel zu tun bis man von wirklich umfassender [...]

  11. Interesting overview, thanks!

    One minor issue: your sidebar hides the table partly – can you reduce the width somehow?

    • Vote -1 Vote +1
      Jerry
      says:

      If you look at the css for this page, you will see the class ‘fatass’. I tried to make the table skinnier, but I didn’t want line breaks in the code fragments, and I wanted the pictures to be big enough to be useful.

      When I make my window thinner, though, the sidebar does not overlap the main table, and I’m surprised it did for you. What browser are you using?

      • Vote -1 Vote +1
        Jason
        says:

        Good overview, but the same thing happens for me in all my browsers:
        - Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
        - Google Chrome 3.0.195.33
        - IE 8.0.6001.18821
        - Safari 4.0.4 (531.21.10)

        It’s affecting the table with id=”corner_table”

        • Vote -1 Vote +1
          Jerry
          says:

          Thanks – it’s something to do with the preformatted setting I used for whitespace. I have no idea why the line breaks are not being respected on some browsers (all except the one I normally use). I’ll fiddle with it and get things working.

          [Edit] to be specific, single line breaks were working, while two consecutive line breaks were ignored (Except in Safari for Mac). Everything should be fine now.

  12. [...] em CSS transformando cantos de div em bordas com cantos arredondados. « [...]

  13. [...] This post was Twitted by indie_preneur [...]

  14. Vote -1 Vote +1
    Jorge
    says:

    Opera has gone the plain border-radius way, as you can check in their latest builds available in http://my.opera.com/desktopteam/blog/

    It’s still pre-alpha quality, but comes with lots of goodies http://my.opera.com/ODIN/blog/opera-10-5-pre-alpha-build-released-here-is-whats-new

    • Vote -1 Vote +1
      Jerry
      says:

      Very exciting! Thanks!

      • Vote -1 Vote +1
        lucideer
        says:

        You’ve commented in the blog that you won’t add this until it’s a stable release, but for any passers by reading this blog, all examples match the CSS3 Spec perfectly in Opera 10.5 except for /* radius less than border thickness */ and /* radius less than thicker edge */ which both look really bizarre in Opera.

        Screenshot: http://files.myopera.com/lucideer/files/border-radius.png

        They look somewhat similar to some effect you might expect to get using SVG paths actually…

        • Vote -1 Vote +1
          Jerry
          says:

          I expect they are using their SVG library to draw the borders, and with just a little more tweaking they will have it all correct. Hooray Opera! If they do a really good job I won’t need to add a column to the table. No telling how long it will take them to get 10.5 even to beta, though.

          I really should have thought of putting a link to a screen shot at least, and now you’ve saved me the trouble. Thanks!

          WebKit has some pretty ugly hacks in their border-drawing code and eventually I think they are going to have to redo large parts of it. At that point I wouldn’t be surprised to see SVG in use there as well. Ellipses are much easier with SVG than with the ‘native’ WebKit path api.

  15. [...] Так как CSS3 ещё не является утвержденным стандартом, то браузеры используют собственные методы скругления. Чтобы понять специфику скругления каждым браузером, приводим таблицу: [...]

  16. [...] Table of CSS3 border-radius Compliance (visual illustration) Possibly related posts: (automatically generated)Best Collection of CSS Rounded Corners Tutorials This entry was written by Gnocchi, posted on January 7, 2010 at 10:24 pm, filed under CSS. Bookmark the permalink. Follow any comments here with the RSS feed for this post. Post a comment or leave a trackback: Trackback URL. « CSS: text shadow [...]

  17. Vote -1 Vote +1
    lucideer
    says:

    Here’s some more issues with border-radius implementations not adhering to spec if anyone’s interested: http://frans.lowter.us/test/2010/border-radius/

  18. Vote -1 Vote +1
    thany
    says:

    Nice work!

    Altough I would also love to see percentage border-radii tested, e.g.:
    border-radius:50%;

    The above would effectively draw a circle (or ellipse, for that matter)

    Also, maybe you could include Opera 10.5 (pre-alpha at the time writing) in the tests?

    Thanks again!

    • Vote -1 Vote +1
      Jerry
      says:

      Sure enough, percentages are in the spec. I’ll play with those; there are a couple of edge cases I’m curious about.

      Opera 10.5 is discussed above (there’s a link to a screen shot in the comments), and by the time it reaches beta I’ll have to figure out how to make this table even wider – unless they do such a good job I can make the first column “the spec and Opera”. Here’s hoping…

    • Vote -1 Vote +1
      Jerry
      says:

      Good call on the percentages. WebKit does not even have them implemented in the nightly builds yet.

  19. [...] things. For now, just make a mental note about it. If you are too curious, then you can go [ Here ] and read all about it! Share How to Styles and themes, UBB.threads, Version 7.5.5, [...]

  20. Vote -1 Vote +1
    oily
    says:

    [paraphrase]
    I do not like the seagull, and I wish you would get rid of it.
    [/paraphrase]

    Edited by Jerry

    • Vote -1 Vote +1
      Jerry
      says:

      The duck is far more appropriate in this place than your language, and is a reminder to myself not to take all this nonsense too seriously.

      • Vote -1 Vote +1
        Jesse
        says:

        Since I’ve complained about the bird before, I just want you to know I’m not oily. ERrr, at least not the commenter oily. As for my hair/personality/investment strategy, Ha! THe color legend might be helpful if it came before the table. Since the table is so long, and it takes a while to get to explanation of why you colored stuff.

  21. [...] Table of CSS3 border-radius Compliance [...]

  22. .border-radius is not supported by Internet Explorer.

  23. Do you have any plans to update this page? I notice that there’s been much improvement, but some things still don’t work. Also, IE9 seems to have mastered border-radius.

    • Vote -1 Vote +1
      Jerry
      says:

      I do keep the table up to date, but there are a couple of things missing right now – a column for Opera and one for the latest Chrome release. Google has been faster than Apple at getting webkit advances to the public (the green-outlined cells in the table work in Chrome). Opera 10.5 gets most things right. Firefox and Safari are up-to-date in the table, and IE9 is not worth bothering with yet.

      The remaining issues in webkit (Chrome and Safari) will not be fixed until the border-drawing code is overhauled (borders are drawn with strokes, which makes tapering anything impossible, and clipping areas don’t line up properly with the edges of the borders). I was sorely tempted to dive in until I got a paying gig. Opera 10.5 just needs to add a few test cases to get the last parts right.

  24. [...] If you are interested in how different browsers currently handle the border-radius properties, Jerry Seeger has a very useful & graphical table to help you [...]

  25. [...] Table of CSS3 border-radius Compliance (Muddled Ramblings and Half-Baked Ideas) [...]

  26. [...] Table of CSS3 border-radius Compliance (Muddled Ramblings and Half-Baked Ideas) [...]

  27. Vote -1 Vote +1
    Dan Gayle
    says:

    This is a sweet reference for future use! Thanks!

  28. coollll but in Thailand has still use IE6 = =”
    Thanks.

  29. Vote -1 Vote +1
    Jeff Smith
    says:

    I am using Firefox 3.6.4 and noticed the second row
    looked different than what you had for Firefox (3.6.3).
    On checking the css, for some reason the br20px10px
    class is completely empty.

    • Vote -1 Vote +1
      Jerry
      says:

      Hm… I see what you mean. I recently redid the css it looks like I deleted the wrong line from that class when I removed all the -webkit- prefixes. As soon as I can get to the file (it’s complicated) I’ll get that fixed.

      Thanks for pointing it out!

    • Vote -1 Vote +1
      Jerry
      says:

      As a side effect, however, that does show that Firefox still requires the -moz- prefix as of 3.6.4

  30. [...] can support this feature. You can try view demo below in different browsers to see it live or follow this useful site that states a complete table on the browsers compatibility. Read more why it is so.Use the [...]

  31. if you add

    border-left-radius: 0 solid;

    (or rather the corresponding -moz-property) to the following example:

    border-top: solid 15px;
    border-top-left-radius:30px;

    it looks like in the spec.
    that’s cool because that way you can choose which one you would like to have.

    • Vote -1 Vote +1
      Jerry
      says:

      I played with a few permutations of your suggestion (‘solid’ is not a border-radius property, for instance), but nothing I did generated the desired result. If you could test the proper thing to add using firebug and then report back, that would be awesome.

  32. [...] More about browser compatibility and comparison can be found in this very informative post by Jerry Seeger . [...]

  33. -2 Vote -1 Vote +1
    Walter Ian Kaye
    says:

    Safari 5 won’t run on my system; I have no choice but to remain with Safari 4, so all your boxes are square.

    • -1 Vote -1 Vote +1
      Jerry
      says:

      Hm… I took out the -webkit- prefixes to keep things simpler on my end. In general almost everyone upgrades immediately. I hadn’t considered that Safari 5 might not work on older systems. I should probably go back and put the prefixes back in.

  34. [...] değişik tarayıcılarda ve değişik yollarla kullanıldığında ki sonuçlarını görmek için buradaki adresi ziyaret edebilir, daha detaylı bilgiye [...]

  35. Vote -1 Vote +1
    Jerry
    says:

    Every once in a while I look at this table and wonder how I’m going to add more browsers, yet keep things simple. I’d love to hear clever ideas, if anyone has one.

  36. Vote -1 Vote +1
    Jerry
    says:

    Opera’s In! Safari 4 is back, since some people can’t upgrade to 5. Tomorrow I’ll fiddle with the script so when you choose “all” the background will expand to accommodate all the columns.

  37. Vote -1 Vote +1
    Jerry
    says:

    IE9 is in! Opera is more accurate! Wondering if I should have bothered with Safari 4 (It’s all from memory anyway). The “All” option in the select now expands the whole page to fit all the columns.

  38. Vote -1 Vote +1
    Nano
    says:

    Thank you SO much for this. The effort you put in is very appreciated. I found this when I was searching for why I was getting really unexpected rendering in Chrom of the thick, single border scenerio. Really glad it was not my fault; upset that my cute little layout doesn’t work in Chrome.

  39. Vote -1 Vote +1
    Mike
    says:

    Thanks for this your table is going to be so helpful and save me so much time when trying to remember which code to use to get each effect.

  40. [...] may also be interested to see a beautiful post about Table of CSS3 border-radius Compliance A good news is that, both Safari 5 and IE9 implement the official “border-radius” [...]

  41. [...] Con esta propiedad podemos dibujar figuras circulares. Para mayor información sobre como usarla pueden revisar esta página. [...]

  42. [...] compliance table for all major browsers (latest versions at the time or writing this entry). Click here to see a very nice compliance [...]

  43. Vote -1 Vote +1
    carole
    says:

    Hello,

    About this form “Leave a reply”: no shadow, no rounded corners with IE9
    This is unfortunatly what i’d like to do
    Somebody has the solution?
    Many thanks

  44. [...] Table of CSS3 border-radius Compliance (Muddled Ramblings and Half-Baked Ideas) [...]

  45. Vote -1 Vote +1
    Brian Cox
    says:

    I have found empirically that Safari does NOT support border-radius in %. It’s particularly convenient to create circles or semi-circles using border-radius 50%. Firefox 4+ and Chrome both support this. Need px for Safari.

  46. [...] 上面这几种是比较特殊点的用法,如果大家还想通过border-radius制作更多不同形状,或者更多的应用,可以点击这里。 [...]

  47. Vote -1 Vote +1
    Eliot
    says:

    It seems that Opera 11 has fixed at least one issue with border-radius: /* radius less than border thickness */

Leave a Reply