Search code examples
javascriptcssstylesheetreload

Is there an easy way to reload css without reloading the page?


I'm trying to make a live, in-page css editor with a preview function that would reload the stylesheet and apply it without needing to reload the page. What would be the best way to go about this?


Solution

  • On the "edit" page, instead of including your CSS in the normal way (with a <link> tag), write it all to a <style> tag. Editing the innerHTML property of that will automatically update the page, even without a round-trip to the server.

    <style type="text/css" id="styles">
        p {
            color: #f0f;
        }
    </style>
    
    <textarea id="editor"></textarea>
    <button id="preview">Preview</button>
    

    The Javascript, using jQuery:

    jQuery(function($) {
        var $ed = $('#editor')
          , $style = $('#styles')
          , $button = $('#preview')
        ;
        $ed.val($style.html());
        $button.click(function() {
            $style.html($ed.val());
            return false;
        });
    });
    

    And that should be it!

    If you wanted to be really fancy, attach the function to the keydown on the textarea, though you could get some unwanted side-effects (the page would be changing constantly as you type)

    Edit: tested and works (in Firefox 3.5, at least, though should be fine with other browsers). See demo here: http://jsbin.com/owapi