diff --git a/R/add_header_above.R b/R/add_header_above.R
index 0d90117..1b73229 100644
--- a/R/add_header_above.R
+++ b/R/add_header_above.R
@@ -149,13 +149,13 @@
     ifelse(strikeout, "text-decoration: line-through; ", "")
   )
   if (!is.null(color)) {
-    row_style <- paste0(row_style, "color: ", html_color(color), ";")
+    row_style <- paste0(row_style, "color: ", html_color(color), " !important;")
   }
   if (!is.null(background)) {
     row_style <- paste0(
       row_style,
       "padding-right: 4px; padding-left: 4px; ",
-      "background-color: ", html_color(background), ";"
+      "background-color: ", html_color(background), " !important;"
     )
   }
   if (!is.null(font_size)) {
diff --git a/R/cell_spec.R b/R/cell_spec.R
index 498cae7..faaf85b 100644
--- a/R/cell_spec.R
+++ b/R/cell_spec.R
@@ -93,14 +93,15 @@
   cell_style <- paste(cell_style,
                       ifelse(strikeout, "text-decoration: line-through;", ""))
   if (!is.null(color)) {
-    cell_style <- paste0(cell_style, "color: ", html_color(color), ";")
+    cell_style <- paste0(cell_style, "color: ", html_color(color),
+                         " !important;")
   }
   if (!is.null(background)) {
     cell_style <- paste0(
       cell_style,
       ifelse(background_as_tile, "border-radius: 4px; ", ""),
       "padding-right: 4px; padding-left: 4px; ",
-      "background-color: ", html_color(background), ";"
+      "background-color: ", html_color(background), " !important;"
     )
   }
   if (!is.null(extra_css)) {
diff --git a/R/column_spec.R b/R/column_spec.R
index 693bc80..7d0cefc 100644
--- a/R/column_spec.R
+++ b/R/column_spec.R
@@ -185,12 +185,14 @@
   }
   if (!is.null(color)) {
     xml_attr(target_cell, "style") <- paste0(xml_attr(target_cell, "style"),
-                                             "color: ", color, ";")
+                                             "color: ", html_color(color),
+                                             " !important;")
   }
   if (!is.null(background)) {
     xml_attr(target_cell, "style") <- paste0(xml_attr(target_cell, "style"),
                                              "background-color: ",
-                                             background, ";")
+                                             html_color(background),
+                                             " !important;")
   }
   if (border_left) {
     xml_attr(target_cell, "style") <- paste0(xml_attr(target_cell, "style"),
diff --git a/R/footnote.R b/R/footnote.R
index 1c9dcac..01f0c57 100644
--- a/R/footnote.R
+++ b/R/footnote.R
@@ -26,7 +26,7 @@
 #' long paragraph of footnotes.
 #' @param fixed_small_size T/F When you want to keep the footnote small after
 #' specifying large font size with the kable_styling() (e.g. ideal font for headers
-#' and table content with small font in footnotes). 
+#' and table content with small font in footnotes).
 #' @param general_title Section header for general footnotes. Default is
 #' "Note: ".
 #' @param number_title Section header for number footnotes. Default is "".
@@ -111,7 +111,7 @@
   }
   if (kable_format == "latex") {
     return(footnote_latex(kable_input, footnote_table, footnote_as_chunk,
-                          threeparttable))
+                          threeparttable, fixed_small_size))
   }
 }
 
@@ -245,7 +245,7 @@
 
 # LaTeX
 footnote_latex <- function(kable_input, footnote_table, footnote_as_chunk,
-                           threeparttable) {
+                           threeparttable, fixed_small_size) {
   table_info <- magic_mirror(kable_input)
   out <- solve_enc(kable_input)
 
diff --git a/R/group_rows.R b/R/group_rows.R
index 5017159..e913497 100644
--- a/R/group_rows.R
+++ b/R/group_rows.R
@@ -36,7 +36,7 @@
 #'
 #' @examples x <- knitr::kable(head(mtcars), "html")
 #' # Put Row 2 to Row 5 into a Group and label it as "Group A"
-#' group_rows(x, "Group A", 2, 5)
+#' pack_rows(x, "Group A", 2, 5)
 #'
 #' @export
 group_rows <- function(kable_input, group_label = NULL,
@@ -220,3 +220,7 @@
   names(index) <- x_rle$values
   return(index)
 }
+
+#' @rdname group_rows
+#' @export
+pack_rows <- group_rows
diff --git a/R/kable_styling.R b/R/kable_styling.R
index 2045c15..a7546f1 100644
--- a/R/kable_styling.R
+++ b/R/kable_styling.R
@@ -58,6 +58,8 @@
 #' a plain no-caption table in a `table` environment in order to center the
 #' table. You can specify this option to things like `table*` or `float*` based
 #'  on your need.
+#' @param fixed_thead HTML table option so table header row is fixed at top.
+#' Values can be either T/F or `list(enabled = T/F, background = "anycolor")`.
 #'
 #' @details  For LaTeX, if you use other than English environment
 #' - all tables are converted to 'UTF-8'. If you use, for example, Hungarian
@@ -91,7 +93,8 @@
                           stripe_index = NULL,
                           latex_table_env = NULL,
                           protect_latex = TRUE,
-                          table.envir = "table") {
+                          table.envir = "table",
+                          fixed_thead = FALSE) {
 
   if (length(bootstrap_options) == 1 && bootstrap_options == "basic") {
     bootstrap_options <- getOption("kable_styling_bootstrap_options", "basic")
@@ -125,7 +128,8 @@
                              full_width = full_width,
                              position = position,
                              font_size = font_size,
-                             protect_latex = protect_latex))
+                             protect_latex = protect_latex,
+                             fixed_thead = fixed_thead))
   }
   if (kable_format == "latex") {
     if (is.null(full_width)) {
@@ -182,7 +186,8 @@
                               position = c("center", "left", "right",
                                            "float_left", "float_right"),
                               font_size = NULL,
-                              protect_latex = TRUE) {
+                              protect_latex = TRUE,
+                              fixed_thead = FALSE) {
   if (protect_latex) {
     kable_input <- extract_latex_from_kable(kable_input)
   }
@@ -242,6 +247,19 @@
     xml_attr(kable_xml, "style") <- paste(kable_xml_style, collapse = " ")
   }
 
+  fixed_thead <- get_fixed_thead(fixed_thead)
+  if (fixed_thead$enabled) {
+    all_header_cells <- xml2::xml_find_all(kable_xml, "//thead//th")
+    if (is.null(fixed_thead$background))  fixed_thead$background <- "#FFFFFF"
+    for (i in seq(length(all_header_cells))) {
+      xml_attr(all_header_cells[i], "style") <- paste0(
+        xml_attr(all_header_cells[i], "style"),
+        "position: sticky; top:0; background-color: ",
+        fixed_thead$background, ";"
+      )
+    }
+  }
+
   out <- as_kable_xml(kable_xml)
   if (protect_latex) {
     out <- replace_latex_in_kable(out, kable_attrs$extracted_latex)
@@ -347,9 +365,9 @@
 
 styling_latex_striped <- function(x, table_info, color, stripe_index) {
   if (is.null(stripe_index)) {
-    striped_index <- seq(1, table_info$nrow - table_info$position_offset, 2)
+    stripe_index <- seq(1, table_info$nrow - table_info$position_offset, 2)
   }
-  row_spec(x, striped_index, background = color)
+  row_spec(x, stripe_index, background = color)
 }
 
 styling_latex_hold_position <- function(x) {
diff --git a/R/row_spec.R b/R/row_spec.R
index 7bfb68e..ff95c0e 100644
--- a/R/row_spec.R
+++ b/R/row_spec.R
@@ -147,12 +147,12 @@
   }
   if (!is.null(color)) {
     xml_attr(x, "style") <- paste0(xml_attr(x, "style"),
-                                   "color: ", color, ";")
+                                   "color: ", html_color(color), " !important;")
   }
   if (!is.null(background)) {
     xml_attr(x, "style") <- paste0(xml_attr(x, "style"),
                                    "background-color: ",
-                                   background, ";")
+                                   html_color(background), " !important;")
   }
   if (!is.null(align)) {
     xml_attr(x, "style") <- paste0(xml_attr(x, "style"),
diff --git a/R/scroll_box.R b/R/scroll_box.R
index b0660ed..39405cf 100644
--- a/R/scroll_box.R
+++ b/R/scroll_box.R
@@ -8,8 +8,8 @@
 #' @param width A character string indicating the width of the box, e.g. "100px"
 #' @param box_css CSS text for the box
 #' @param extra_css Extra CSS styles
-#' @param fixed_thead A list of two named element. enabled and background.
-#' Default is F and white, e.g. "list(enabled = T, background = "#fff")"
+#' @param fixed_thead HTML table option so table header row is fixed at top.
+#' Values can be either T/F or `list(enabled = T/F, background = "anycolor")`.
 #'
 #' @export
 #'
@@ -25,23 +25,27 @@
 #'     kable_styling() %>%
 #'     scroll_box(width = "100%", height = "200px")
 #' }
-
 scroll_box <- function(kable_input, height = NULL, width = NULL,
                        box_css = "border: 1px solid #ddd; padding: 5px; ",
-                       extra_css = NULL, fixed_thead = list(enabled = F, background = "#fff")) {
+                       extra_css = NULL,
+                       fixed_thead = TRUE
+                       ) {
 
   kable_attrs <- attributes(kable_input)
+  fixed_thead <- get_fixed_thead(fixed_thead)
+  if (is.null(height)) fixed_thead$enabled <- FALSE
 
   if (fixed_thead$enabled) {
     box_css = "border: 1px solid #ddd; padding: 0px; "
     kable_xml <- read_kable_as_xml(kable_input)
-    kable_thead <- xml_tpart(kable_xml, "thead")
-    original_header_row <- xml_child(kable_thead, length(xml_children(kable_thead)))
-    for (theader_i in 1:length(xml_children(original_header_row))) {
-      target_header_cell <- xml_child(original_header_row, theader_i)
-      xml_attr(target_header_cell, "style") <- paste0(xml_attr(target_header_cell, "style"),
-                                                      "position: sticky; top:0; background: ",
-                                                      fixed_thead$background,";")
+    all_header_cells <- xml2::xml_find_all(kable_xml, "//thead//th")
+    if (is.null(fixed_thead$background))  fixed_thead$background <- "#FFFFFF"
+    for (i in seq(length(all_header_cells))) {
+      xml_attr(all_header_cells[i], "style") <- paste0(
+        xml_attr(all_header_cells[i], "style"),
+        "position: sticky; top:0; background-color: ",
+        fixed_thead$background, ";"
+      )
     }
     out <- as.character(as_kable_xml(kable_xml))
   } else {
@@ -70,3 +74,11 @@
 
   return(out)
 }
+
+get_fixed_thead <- function(x) {
+  if (is.logical(x)) {
+    if (x) return(list(enabled = TRUE, background = "#FFFFFF"))
+    return(list(enabled = FALSE))
+  }
+  return(x)
+}
diff --git a/R/spec_tools.R b/R/spec_tools.R
index 76fb7dd..0ae4032 100644
--- a/R/spec_tools.R
+++ b/R/spec_tools.R
@@ -29,7 +29,7 @@
 }
 
 html_color <- function(colors) {
-  colors <- as.character(colors)
+  colors <- trimws(gsub("\\!important", "", as.character(colors)))
   sapply(colors, html_color_)
 }
 
diff --git a/R/zzz.R b/R/zzz.R
index 2014072..dfd67f8 100644
--- a/R/zzz.R
+++ b/R/zzz.R
@@ -1,26 +1,29 @@
 .onLoad <- function(libname = find.package("kableExtra"), pkgname = "kableExtra") {
-  load_packages <- getOption("kableExtra.latex.load_packages", default = TRUE)
-  if (load_packages) {
-    usepackage_latex("booktabs")
-    usepackage_latex("longtable")
-    usepackage_latex("array")
-    usepackage_latex("multirow")
-    usepackage_latex("wrapfig")
-    usepackage_latex("float")
-    usepackage_latex("colortbl")
-    usepackage_latex("pdflscape")
-    usepackage_latex("tabu")
-    usepackage_latex("threeparttable")
-    usepackage_latex("threeparttablex")
-    usepackage_latex("ulem", "normalem")
-    usepackage_latex("makecell")
-    usepackage_latex("xcolor")
+  if (knitr::is_latex_output()) {
+    load_packages <- getOption("kableExtra.latex.load_packages", default = TRUE)
+    if (load_packages) {
+      usepackage_latex("booktabs")
+      usepackage_latex("longtable")
+      usepackage_latex("array")
+      usepackage_latex("multirow")
+      usepackage_latex("wrapfig")
+      usepackage_latex("float")
+      usepackage_latex("colortbl")
+      usepackage_latex("pdflscape")
+      usepackage_latex("tabu")
+      usepackage_latex("threeparttable")
+      usepackage_latex("threeparttablex")
+      usepackage_latex("ulem", "normalem")
+      usepackage_latex("makecell")
+      usepackage_latex("xcolor")
+    }
   }
   auto_format <- getOption("kableExtra.auto_format", default = TRUE)
   if (auto_format) auto_set_format()
   if (!is.null(rmarkdown::metadata$output) &&
       rmarkdown::metadata$output %in% c(
-        "ioslides_presentation", "slidy_presentation"
+        "ioslides_presentation", "slidy_presentation",
+        "gitbook", "radix_article"
       )) {
     options(kableExtra.html.bsTable = TRUE)
   }
