How to add css immediately (display:none) to a block created through hook?
A block can have a content element when created in code. This content element can be raw HTML or a drupal render array. If you use raw HTML for your block you can just put &lt;style type="text/css"&gt;#your-block-id { display: none;}&lt;/style&gt; directly into your block output.

Or if you use a render array you can do something similar with the #attached key on the render array. This is outlined in the API usage of drupal.org and a comment provides an example:

$block['content'] = array(
  '#markup' =&gt; mymodule_testblock_content(),
  '#attached' =&gt; array(
      'css' =&gt; array(
        drupal_get_path('module', 'mymodule') . '/css/mymodule.css',
      ),
      'js' =&gt; array(
        drupal_get_path('module', 'mymodule') . '/js/mymodule.js',
    ),
  ),
);


Obviously the render array approach is a cleaner, more elegant solution. You can even have the CSS inline when using #attached.