Skip to content

Instantly share code, notes, and snippets.

@dgb
Created September 13, 2011 06:34
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save dgb/1213261 to your computer and use it in GitHub Desktop.
Save dgb/1213261 to your computer and use it in GitHub Desktop.
Twitter Bootstrap styles for Devise
$ ->
$('.close').live 'click', (e) ->
e.preventDefault()
$(this).parent().hide()
$('.devise form div i').each ->
$this = $(this)
text = $this.text()
sibling = $this.prev('label')
a = $("<a>").text("*").attr('title', text)
a.prependTo(sibling)
devise_errors = $('.devise #error_explanation')
if devise_errors.length
close_link = $('<a>').addClass('close').attr('href', '#').text('\u00d7')
devise_errors.prepend(close_link)
form {
/* This is all copy/pasted. I can't get element-based rulesets to work */
input[type=email] {
display: inline-block;
width: 210px;
margin: 0;
padding: 4px;
font-size: 13px;
line-height: @baseline;
height: @baseline;
color: @gray;
border: 1px solid #ccc;
.border-radius(3px);
}
// Focus states
input[type=email] {
@transition: border linear .2s, box-shadow linear .2s;
.transition(@transition);
.box-shadow(inset 0 1px 3px rgba(0,0,0,.1));
}
input[type=email]:focus {
outline: none;
border-color: rgba(82,168,236,.8);
@shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6);
.box-shadow(@shadow);
}
}
.devise {
margin-top:20px;
.columns(7);
.offset(4);
.well;
h2 {
margin-left: 150px;
margin-bottom: 15px;
font-size: 20px;
font-weight:normal;
color: @grayDark;
}
form {
div {
margin-bottom: @baseline;
a {
margin:0;
&:after { content:'\0000a0'; }
&:before { content:none; }
}
}
br, i {
display:none;
}
input {
margin-left: 20px;
}
/* Oh, dear... */
label[for=user_remember_me] {
padding:0;
position:relative;
left:130px;
}
input[type=submit] {
margin-left:150px;
.btn;
.primary;
}
}
a, h3, p{
margin-left:150px;
}
p {
a {
margin:0;
&:before { content:none; }
}
}
a:before, p:before {
content:'\002022\0000a0';
}
#error_explanation {
.alert-message.error;
.block-message;
margin-left:150px;
text-shadow:none;
h2 {
font-size:13px;
line-height:18px;
font-weight:bold;
margin:0 0 6px 0;
}
h2, li {
color:white;
}
a {
.alert-message.close
}
}
}
<% content_for :content do %>
<div class="devise">
<%= yield %>
</div>
<% end %>
<%= render :template => 'layouts/application' %>
@dgb
Copy link
Author

dgb commented Sep 13, 2011

I posted some background and pictures on my blog:
http://scraps.bigbento.com/styling-devises-templates-in-silverhail-with

@housekeeper
Copy link

any chance you could provide the css this produces please... this is indeed very cool - thank you

@dgb
Copy link
Author

dgb commented Nov 7, 2011

I'm still using an older version of Bootstrap, and still working out the kinks of using multiple Less libraries along side the Rails 3.1 asset pipeline. I'm using the Anyway, I updated Bootstrap to 1.4 and threw in my devise styles here: https://gist.github.com/1344196. You'll still need to use the .devise class for them to work right, per the markup example.

@marshmallowcreme
Copy link

Where do you put <%= yield(:content) %> ?

@marshmallowcreme
Copy link

Nevermind, figured it out. For anyone trying this, I had to change the yield statement in my application layout to this:

        <%= content_for?(:content) ? yield(:content) : yield %>

@maralcbr
Copy link

maralcbr commented Jan 9, 2012

Where is this devise.html.erb file located? Could not find it anywhere. Thanks!

@dgb
Copy link
Author

dgb commented Jan 9, 2012

@marshmallowcreme, that's exactly how I had it set up in my application layout. Sorry that wasn't clear from the gist.

@maralcbr, it's the last file in the gist. I'm just choosing that as the layout (per the devise docs) when i need to like so:

class ApplicationController < ActionController::Base
  protect_from_forgery

  layout :layout_by_resource

  protected

  def layout_by_resource
    if devise_controller?
      "devise"
    else
      "application"
    end
  end
end

@potomak
Copy link

potomak commented Jan 12, 2012

I'm getting a less error:

.border-radius is undefined
  (in /Users/giovanni/my_app/app/assets/stylesheets/devise.css.less)

@potomak
Copy link

potomak commented Jan 13, 2012

The only solution I've found is to put devise.css.less code inside bootstrap.css.less and update a couple of classes:

  1. at line 83 replace .block-message; with .border-radius(3px);
  2. at line 66 remove .primary; and at line 65 replace .btn; with .btn.primary;

Hope it helps.

@dgb
Copy link
Author

dgb commented Jan 13, 2012

@potomak, @rupertfisher - I wrote this against Bootstrap 1.3, and recall a couple things breaking with 1.4. I ended up not using Devise in the project this came from, so I haven't kept it up to date. Since it looks like there's a bit of interest in this thing, I'll set aside some time to clean it up and doc it better.

@maralcbr
Copy link

@bigbento - Would be awesome!

@dgb
Copy link
Author

dgb commented Feb 19, 2012

I ended up rewriting this for Bootstrap 2.0 and released it as a gem: https://github.com/bigbento/less-rails-bootstrap-devise

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment