diff --git a/app/views/devise/shared/_signin_box.html.haml b/app/views/devise/shared/_signin_box.html.haml
index 86edaf14e43287d8f3d54d7233dabc05ccf1672d..e5c65a10e05a5e91ad47daea4097475b620d8134 100644
--- a/app/views/devise/shared/_signin_box.html.haml
+++ b/app/views/devise/shared/_signin_box.html.haml
@@ -1,6 +1,6 @@
 - if form_based_providers.any?
   - if crowd_enabled?
-    .login-box.tab-pane.active{id: "crowd", role: 'tabpanel', class: 'tab-pane'}
+    .login-box.tab-pane.active{id: "crowd", role: 'tabpanel'}
       .login-body
         = render 'devise/sessions/new_crowd'
   - @ldap_servers.each_with_index do |server, i|
diff --git a/app/views/devise/shared/_signup_box.html.haml b/app/views/devise/shared/_signup_box.html.haml
index 3133f6de2e844d208d24b665504f87bfd575004c..683a38b9ec6cfc490e06b4bf2f0712c68ae52b4e 100644
--- a/app/views/devise/shared/_signup_box.html.haml
+++ b/app/views/devise/shared/_signup_box.html.haml
@@ -1,4 +1,4 @@
-#register-pane.login-box{ role: 'tabpanel', class: 'tab-pane' }
+#register-pane.tab-pane.login-box{ role: 'tabpanel' }
   .login-body
     = form_for(resource, as: "new_#{resource_name}", url: registration_path(resource_name), html: { class: "new_new_user gl-show-field-errors", "aria-live" => "assertive" }) do |f|
       .devise-errors
diff --git a/app/views/help/_shortcuts.html.haml b/app/views/help/_shortcuts.html.haml
index 65842a0479b8cdb00853d2d7d8d51dff96028086..eb2eecab4e3b616333630b2a9e00dd86791c2041 100644
--- a/app/views/help/_shortcuts.html.haml
+++ b/app/views/help/_shortcuts.html.haml
@@ -82,7 +82,7 @@
 
           .col-lg-4
             %table.shortcut-mappings
-              %tbody{ class: 'hidden-shortcut project', style: 'display:none' }
+              %tbody.hidden-shortcut.project{ style: 'display:none' }
                 %tr
                   %th
                   %th Global Dashboard
@@ -190,7 +190,7 @@
                   %td New issue
           .col-lg-4
             %table.shortcut-mappings
-              %tbody{ class: 'hidden-shortcut network', style: 'display:none' }
+              %tbody.hidden-shortcut.network{ style: 'display:none' }
                 %tr
                   %th
                   %th Network Graph
@@ -240,7 +240,7 @@
                     .key
                       shift j
                   %td Scroll to bottom
-              %tbody{ class: 'hidden-shortcut issues', style: 'display:none' }
+              %tbody.hidden-shortcut.issues{ style: 'display:none' }
                 %tr
                   %th
                   %th Issues
@@ -264,7 +264,7 @@
                   %td.shortcut
                     .key l
                   %td Change Label
-              %tbody{ class: 'hidden-shortcut merge_requests', style: 'display:none' }
+              %tbody.hidden-shortcut.merge_requests{ style: 'display:none' }
                 %tr
                   %th
                   %th Merge Requests
diff --git a/app/views/kaminari/gitlab/_next_page.html.haml b/app/views/kaminari/gitlab/_next_page.html.haml
index 125f09777ba50366f6e0499f774e39a584cda27d..c93dc7a50e89ae5a52a79800b8405c8d150a3d70 100644
--- a/app/views/kaminari/gitlab/_next_page.html.haml
+++ b/app/views/kaminari/gitlab/_next_page.html.haml
@@ -6,8 +6,8 @@
 -#    per_page:      number of items to fetch per page
 -#    remote:        data-remote
 - if current_page.last?
-  %li{ class: "next disabled" }
+  %li.next.disabled
     %span= raw(t 'views.pagination.next')
 - else
-  %li{ class: "next" }
+  %li.next
     = link_to raw(t 'views.pagination.next'), url, rel: 'next', remote: remote
diff --git a/app/views/kaminari/gitlab/_prev_page.html.haml b/app/views/kaminari/gitlab/_prev_page.html.haml
index 7edf10498a80e230d03240f393351f538a3b08cb..b7c6caf7ff43dc8fdfafa24b5086fd9004a31805 100644
--- a/app/views/kaminari/gitlab/_prev_page.html.haml
+++ b/app/views/kaminari/gitlab/_prev_page.html.haml
@@ -6,8 +6,8 @@
 -#    per_page:      number of items to fetch per page
 -#    remote:        data-remote
 - if current_page.first?
-  %li{ class: "prev disabled" }
+  %li.prev.disabled
     %span= raw(t 'views.pagination.previous')
 - else
-  %li{ class: "prev" }
+  %li.prev
     = link_to raw(t 'views.pagination.previous'), url, rel: 'prev', remote: remote
diff --git a/app/views/layouts/devise.html.haml b/app/views/layouts/devise.html.haml
index afd9958f0738effa3c2a7a90d9609dea5f967f33..a72ecec579fa5cdd24e4b642bef1c4111dd77dab 100644
--- a/app/views/layouts/devise.html.haml
+++ b/app/views/layouts/devise.html.haml
@@ -1,5 +1,5 @@
 !!! 5
-%html{ lang: "en", class: "devise-layout-html"}
+%html.devise-layout-html
   = render "layouts/head"
   %body.ui_charcoal.login-page.application.navless{ data: { page: body_data_page }}
     .page-wrap
diff --git a/app/views/layouts/header/_default.html.haml b/app/views/layouts/header/_default.html.haml
index 5456be77aabaae02388126de38fc1448443d27e2..63ae5ff062831a0179ad9d2ddfceaca9db09885c 100644
--- a/app/views/layouts/header/_default.html.haml
+++ b/app/views/layouts/header/_default.html.haml
@@ -1,6 +1,6 @@
 %header.navbar.navbar-fixed-top.navbar-gitlab{ class: nav_header_class }
-  %a{ href: "#content-body", tabindex: "1", class: "sr-only gl-accessibility" } Skip to content
-  %div{ class: "container-fluid" }
+  %a.sr-only.gl-accessibility{ href: "#content-body", tabindex: "1" } Skip to content
+  %div.container-fluid
     .header-content
       %button.side-nav-toggle{ type: 'button', "aria-label" => "Toggle global navigation" }
         %span.sr-only Toggle navigation
diff --git a/app/views/projects/blob/_upload.html.haml b/app/views/projects/blob/_upload.html.haml
index 57a27ec904e4148b9e8159088340990af9ae7e35..fbcd7d3a83d96ca05d332624891ba182fc6a09ab 100644
--- a/app/views/projects/blob/_upload.html.haml
+++ b/app/views/projects/blob/_upload.html.haml
@@ -12,7 +12,7 @@
                 Attach a file by drag & drop or
                 = link_to 'click to upload', '#', class: "markdown-selector"
           %br
-          .dropzone-alerts{class: "alert alert-danger data", style: "display:none"}
+          .dropzone-alerts.alert.alert-danger.data{style: "display:none"}
 
           = render 'shared/new_commit_form', placeholder: placeholder
 
diff --git a/app/views/projects/branches/new.html.haml b/app/views/projects/branches/new.html.haml
index 5a6c8c243fa77a36134a46eb145cebe9c60e37d0..bd1d3947d7e56d7c4962187f8282ca1d8c22eb2a 100644
--- a/app/views/projects/branches/new.html.haml
+++ b/app/views/projects/branches/new.html.haml
@@ -2,7 +2,7 @@
 
 - if @error
   .alert.alert-danger
-    %button{ type: "button", class: "close", "data-dismiss" => "alert"} ×
+    %button.close{ type: "button", "data-dismiss" => "alert"} ×
     = @error
 %h3.page-title
   New Branch
diff --git a/app/views/projects/builds/show.html.haml b/app/views/projects/builds/show.html.haml
index c69c53b656fb077b1cdf88c87c214a8c0173e59b..54724ef5cabd2d843644320ccc5a1d885aca137d 100644
--- a/app/views/projects/builds/show.html.haml
+++ b/app/views/projects/builds/show.html.haml
@@ -56,10 +56,10 @@
       - else
         #js-build-scroll.scroll-controls
           .scroll-step
-            %a{ href: '#up-build-trace', id: 'scroll-top', class: 'scroll-link scroll-top', title: 'Scroll to top' }
+            %a.scroll-link.scroll-top{ href: '#up-build-trace', id: 'scroll-top', title: 'Scroll to top' }
               = custom_icon('scroll_up')
               = custom_icon('scroll_up_hover_active')
-            %a{ href: '#down-build-trace', id: 'scroll-bottom', class: 'scroll-link scroll-bottom', title: 'Scroll to bottom' }
+            %a.scroll-link.scroll-bottom{ href: '#down-build-trace', id: 'scroll-bottom', title: 'Scroll to bottom' }
               = custom_icon('scroll_down')
               = custom_icon('scroll_down_hover_active')
           - if @build.active?
diff --git a/app/views/projects/merge_requests/conflicts/_submit_form.html.haml b/app/views/projects/merge_requests/conflicts/_submit_form.html.haml
index 6ffaa9ad4d226dce4c99c3722fec9cb1a74a717b..62c9748c5102257b8a6f8eca4c256531a467fb5c 100644
--- a/app/views/projects/merge_requests/conflicts/_submit_form.html.haml
+++ b/app/views/projects/merge_requests/conflicts/_submit_form.html.haml
@@ -10,7 +10,7 @@
     .col-sm-offset-2.col-sm-10
       .row
         .col-xs-6
-          %button{ type: "button", class: "btn btn-success js-submit-button", "@click" => "commit()", ":disabled" => "!readyToCommit" }
+          %button.btn.btn-success.js-submit-button{ type: "button", "@click" => "commit()", ":disabled" => "!readyToCommit" }
             %span {{commitButtonText}}
         .col-xs-6.text-right
           = link_to "Cancel", namespace_project_merge_request_path(@merge_request.project.namespace, @merge_request.project, @merge_request), class: "btn btn-cancel"
diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml
index 866b278ce573f160053235f5afccfa0a3e7eb20e..6a23cfc1dfc98779a45e663d3be86e43c1e4389d 100644
--- a/app/views/projects/new.html.haml
+++ b/app/views/projects/new.html.haml
@@ -77,7 +77,7 @@
                   - if git_import_enabled?
                     = link_to "#", class: 'btn js-toggle-button import_git' do
                       = icon('git', text: 'Repo by URL')
-                %div{ class: 'import_gitlab_project' }
+                %div.import_gitlab_project
                   - if gitlab_project_import_enabled?
                     = link_to new_import_gitlab_project_path, class: 'btn btn_import_gitlab_project project-submit' do
                       = icon('gitlab', text: 'GitLab export')
diff --git a/app/views/projects/notes/_note.html.haml b/app/views/projects/notes/_note.html.haml
index 399cf85cd0f3c747372833e8f3fce21fa88a8d5e..3aecb04fb503ea1bdeb4ca8606dfffcf78c787da 100644
--- a/app/views/projects/notes/_note.html.haml
+++ b/app/views/projects/notes/_note.html.haml
@@ -15,7 +15,7 @@
           - unless note.system
             commented
           - if note.system
-            %span{class: 'system-note-message'}
+            %span.system-note-message
               = note.redacted_note_html
           %a{ href: "##{dom_id(note)}" }
             = time_ago_with_tooltip(note.created_at, placement: 'bottom', html_class: 'note-created-ago')
diff --git a/app/views/projects/tags/new.html.haml b/app/views/projects/tags/new.html.haml
index c06a413eb2ff45094a64f3de2530aaae51bb5712..9b87696addf772ff044b02f70a5b64f627b3c606 100644
--- a/app/views/projects/tags/new.html.haml
+++ b/app/views/projects/tags/new.html.haml
@@ -2,7 +2,7 @@
 
 - if @error
   .alert.alert-danger
-    %button{ type: "button", class: "close", "data-dismiss" => "alert"} ×
+    %button.close{ type: "button", "data-dismiss" => "alert"} ×
     = @error
 
 %h3.page-title
diff --git a/app/views/projects/tree/_submodule_item.html.haml b/app/views/projects/tree/_submodule_item.html.haml
index 2b5f671c09ec5e4a1e268ecaa20f1578119c650d..04d52361db0ac67c0b61b6be48fc28d4ffb5d74a 100644
--- a/app/views/projects/tree/_submodule_item.html.haml
+++ b/app/views/projects/tree/_submodule_item.html.haml
@@ -1,4 +1,4 @@
-%tr{ class: "tree-item" }
+%tr.tree-item
   %td.tree-item-file-name
     %i.fa.fa-archive.fa-fw
     = submodule_link(submodule_item, @ref)
diff --git a/app/views/shared/members/_group.html.haml b/app/views/shared/members/_group.html.haml
index 8928de9097b1465fb4f7e920cbe538c17203a999..a46ba3b060595bffaa9d9aec54657367acfc5076 100644
--- a/app/views/shared/members/_group.html.haml
+++ b/app/views/shared/members/_group.html.haml
@@ -3,7 +3,7 @@
 - can_admin_member = can?(current_user, :admin_project_member, @project)
 - dom_id = "group_member_#{group_link.id}"
 %li.member.group_member{ id: dom_id }
-  %span{ class: "list-item-name" }
+  %span.list-item-name
     = image_tag group_icon(group), class: "avatar s40", alt: ''
     %strong
       = link_to group.name, group_path(group)
diff --git a/app/views/shared/milestones/_issuable.html.haml b/app/views/shared/milestones/_issuable.html.haml
index 9e1b03794285f2436dffe00e5818238026412ce0..7bf8b5d8c584458b0e3940fe17a8953ab54a4c89 100644
--- a/app/views/shared/milestones/_issuable.html.haml
+++ b/app/views/shared/milestones/_issuable.html.haml
@@ -14,15 +14,15 @@
     - if issuable.is_a?(Issue)
       = confidential_icon(issuable)
     = link_to_gfm issuable.title, [project.namespace.becomes(Namespace), project, issuable], title: issuable.title
-  %div{class: 'issuable-detail'}
+  %div.issuable-detail
     = link_to [project.namespace.becomes(Namespace), project, issuable] do
-      %span{ class: 'issuable-number' }>= issuable.to_reference
+      %span.issuable-number >= issuable.to_reference
 
     - issuable.labels.each do |label|
       = link_to polymorphic_path(base_url_args, { milestone_title: @milestone.title, label_name: label.title, state: 'all' }) do
         - render_colored_label(label)
 
-    %span{ class: "assignee-icon" }
+    %span.assignee-icon
       - if assignee
         = link_to polymorphic_path(base_url_args, { milestone_title: @milestone.title, assignee_id: issuable.assignee_id, state: 'all' }),
                   class: 'has-tooltip', title: "Assigned to #{assignee.name}", data: { container: 'body' } do