On the subject of "Pixel-perfect PSD to HTML/CSS"


This post was published in 2014 and is kept here for reference. It may contain information that's outdated or inaccurate.

I read an article on the subject of implementing a PSD design of a website perfectly in HTML/CSS, and without wanting to spend my time writing a lengthy response in the comment form of a blog for it to disappear in to the depths of a blog that I don’t visit very regularly, I figured I’d write my thoughts up as a blog post.

The gist of the article goes like this:

I hired a freelance developer at a low rate and expected them to implement my PSD exactly as I made it look in Photoshop, but they couldn’t handle that. I’m so outraged with the lack of attention to detail of front-end developers.

The blame isn’t always in the hands of the front-end developer

There are so many things that could have factored in to this bad experience, starting with the PSD itself:

  • Was the PSD structured/organised well?
  • Did the PSD contain guides/measurements for all components of the design?
  • Was the PSD heavily dependent on Photoshop’s blending modes?
  • If the PSD was for multiple pages, did the designer consider modular/DRY methodologies when deciding how lists and things should be represented in the design?
  • Were font sizes specified using pt or px units?

There are always differences in the environment used by the designer, and the developer:

  • Were the designer/developer using Mac or Windows?
  • What were their colour settings for the document set to?
  • What kind of screen was the PSD created on?

There are always going to be technological reasons that a HTML/CSS implementation of a PSD might look a bit different to the original PSD:

  • Fonts render differently in Photoshop vs the browser, fonts render differently between different operating systems and browsers.
  • We don’t have those fancy blending effects in CSS (yet).
  • Though we have border-radius, box-shadow, font-family and loads of other CSS3 features, support for these is not consistent across all browsers.
  • We use new techniques to build websites these days, first and foremost we don’t use tables and image slices.

You can’t honestly expect one static design to look pixel perfect on all devices or in all browsers. Have you heard of responsive design? Do you know what kind of screens the people viewing the page you’ve designed will be using? Do you have any idea if the fancy blending effects you’re applying liberally to your layers are reproducible with CSS effects alone (or if they’re not, are your layers organised in a sane way so that they can be sliced?).

How can developers work better with the designers?

  1. Be upfront about the feasibility of implementing components of the design accurately, and use your domain knowledge to inform the designer.
  2. If you notice any inconsistently styled components, clarify with the designer that the inconsistencies are intentional and not just an oversight.
  3. If you’re using a version control system (such as GitHub), make sure that you’re committing pieces that are complete, or make sure that the person reviewing your implementation of the design is aware of the state of the implementation to save them carrying out feedback too early.
  4. Use a DRY methodology such as SMACSS
  5. Use a CSS preprocessor such as SASS

How can designers make the job of implementing a design easier/better?

  1. The Photoshop Etiquette — read it, learn it, abide by it.
  2. Use PSD Grade to check the quality of your PSD against some common quality pitfalls.
  3. Familiarise yourself with the technology you’re designing for. If you intend for the design to be responsive, consider how it will look at various breakpoints. See: 50 Useful Responsive Web Design Tools For Designers
  4. If you’re designing for a content management system, know the possible types/sizes of data that could be in any part of the design — such as lengths of text, different configurations of pages, image sizes, etc.
  5. Have a realistic expectation of how the page will look. Your fonts aren’t going to look like they do in Photoshop when implemented, “18pt” in Photoshop is not the same as “18pt” in the browser. See: Photoshop/Browser Font Rendering
  6. Provide a layer with measurements for all aspects of the design, it will take a lot longer to implement if we’re having to measure the distance between pixels when implementing the design.
  7. If you’ve used any imagery in your design, provide the original assets along with the PSDs of your design.

This post is also available in plain text

[Archived comments]

Vu Hoang Anh commented

This could also probably save the developer a lot of time in process of transforming a PSD into code - csshat.com

Carlos Cárdenas commented

This is one of my favorite articles ever. Just have a personal con, I don’t like css preprocessors. They make the site a little heavier (at least when using WordPress).

Max Glenister's avatar picture

Max Glenister commented

Thanks.There’s no reason that using a preprocessor should make anything heavier, unless you go over the top with nesting your style declarations. At the end of the day, you can keep your .scss files on your computer, compile them to .css and upload them to your server to be used on your WordPress site.See this subject on nesting in Sass: http://thesassway.com/edito…

Dipesh Batheja commented

Hi Max, this is great article and absolutely correct advise for both frontend developers and designer. I run a PSD to HTML company www.netlingshq.com and face such issues almost on daily basis from both design and development perspective.Its very important to have a good review process in place before you start converting designs into code. A good frontend developer should be able to review and clear expectations upfront as much as possible. Also it is advisable to have a standard frontend framework in place, this should include standard directory structure, naming conventions, css organisation. Here are some common guidelines we provide to every new frontend developer trainee https://hackpad.com/PSD-to-… .

Tyrone Avnit commented

Love this. Web designers with no web experience can be extremely detrimental to a project. I am a true believer that all web designers should have a basic understanding of web fundamentals such as HTML and CSS.I was given a project in illustrator and was expected to construct a pixel perfect design in the browser. The canvas width was not even set to the size expected in the browser. The inconsistency was maddening.We as engineers need to create modular applications. This is true for CSS as well. There needs to be consistency between screens, so we can create an application where we can reuse styles and code. Please do not give us a design where the same parts of the application are designed differently.

[Comments]

Want to comment? You can do so via Github.
Comments via Github are currently closed.

[Webmentions]

Want to reply? I've hooked up Webmentions, so give it a go!