diff --git a/R/row_spec.R b/R/row_spec.R
index 6ab31ec..d58493c 100644
--- a/R/row_spec.R
+++ b/R/row_spec.R
@@ -23,6 +23,8 @@
 #' options including `xx-small`, `x-small`, `small`, `medium`, `large`,
 #' `x-large`, `xx-large`, `smaller`, `larger`, `initial` and `inherit`.
 #' @param angle 0-360, degree that the text will rotate.
+#' @param extra_css Extra css text to be passed into the cells of the row. Note
+#' that it's not for the whole row.
 #'
 #' @examples x <- knitr::kable(head(mtcars), "html")
 #' row_spec(x, 1:2, bold = TRUE, italic = TRUE)
@@ -31,7 +33,7 @@
 row_spec <- function(kable_input, row,
                      bold = FALSE, italic = FALSE, monospace = FALSE,
                      color = NULL, background = NULL, align = NULL,
-                     font_size = NULL, angle = NULL) {
+                     font_size = NULL, angle = NULL, extra_css) {
   if (!is.numeric(row)) {
     stop("row must be numeric. ")
   }
@@ -42,7 +44,8 @@
   }
   if (kable_format == "html") {
     return(row_spec_html(kable_input, row, bold, italic, monospace,
-                         color, background, align, font_size, angle))
+                         color, background, align, font_size, angle,
+                         extra_css))
   }
   if (kable_format == "latex") {
     return(row_spec_latex(kable_input, row, bold, italic, monospace,
@@ -51,7 +54,8 @@
 }
 
 row_spec_html <- function(kable_input, row, bold, italic, monospace,
-                          color, background, align, font_size, angle) {
+                          color, background, align, font_size, angle,
+                          extra_css) {
   kable_attrs <- attributes(kable_input)
   kable_xml <- read_kable_as_xml(kable_input)
 
@@ -67,7 +71,7 @@
     for (theader_i in 1:length(xml_children(original_header_row))) {
       target_header_cell <- xml_child(original_header_row, theader_i)
       xml_cell_style(target_header_cell, bold, italic, monospace, color, background,
-                     align, font_size, angle)
+                     align, font_size, angle, extra_css)
     }
     row <- row[row != 0]
   }
@@ -86,7 +90,7 @@
       for (i in 1:length(xml_children(target_row))) {
         target_cell <- xml_child(target_row, i)
         xml_cell_style(target_cell, bold, italic, monospace, color, background,
-                       align, font_size, angle)
+                       align, font_size, angle, extra_css)
       }
     }
   }
@@ -97,7 +101,7 @@
 }
 
 xml_cell_style <- function(x, bold, italic, monospace, color, background,
-                           align, font_size, angle) {
+                           align, font_size, angle, extra_css) {
   if (bold) {
     xml_attr(x, "style") <- paste0(xml_attr(x, "style"),
                                    "font-weight: bold;")
@@ -136,6 +140,9 @@
                                    "deg); transform: rotate(", angle,
                                    "deg);")
   }
+  if (!is.null(extra_css)) {
+    xml_attr(x, "style") <- paste0(xml_attr(x, "style"), extra_css)
+  }
   return(x)
 }
 
