diff --git a/public/css/index.css b/public/css/index.css
index 6b906cc4a8..ad1d0313f7 100644
--- a/public/css/index.css
+++ b/public/css/index.css
@@ -216,7 +216,7 @@ footer .ui.left,footer .ui.right{line-height:40px}
 .inline-grouped-list>.ui{display:block;margin-top:5px;margin-bottom:10px}
 .inline-grouped-list>.ui:first-child{margin-top:1px}
 .lines-num{vertical-align:top;text-align:right!important;color:#999;background:#f5f5f5;width:1%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
-.lines-num span{line-height:20px!important;padding:0 10px;cursor:pointer;display:block}
+.lines-num span:before{content:attr(data-line-number);line-height:20px!important;padding:0 10px;cursor:pointer;display:block}
 .lines-code,.lines-num{padding:0!important}
 .lines-code .hljs,.lines-code ol,.lines-code pre,.lines-num .hljs,.lines-num ol,.lines-num pre{background-color:#fff;margin:0;padding:0!important}
 .lines-code .hljs li,.lines-code ol li,.lines-code pre li,.lines-num .hljs li,.lines-num ol li,.lines-num pre li{display:block;width:100%}
diff --git a/public/less/_base.less b/public/less/_base.less
index d961e18c37..487779c137 100644
--- a/public/less/_base.less
+++ b/public/less/_base.less
@@ -920,10 +920,13 @@ footer {
     user-select: none;
 
     span {
-        line-height: 20px !important;
-        padding: 0 10px;
-        cursor: pointer;
-        display: block;
+        &:before {
+            content: attr(data-line-number);
+            line-height: 20px !important;
+            padding: 0 10px;
+            cursor: pointer;
+            display: block;
+        }
     }
 }
 
diff --git a/routers/repo/view.go b/routers/repo/view.go
index 9d24506b47..00790a4ef3 100644
--- a/routers/repo/view.go
+++ b/routers/repo/view.go
@@ -319,7 +319,7 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st
 
 			output.Reset()
 			for i := 0; i < len(lines); i++ {
-				output.WriteString(fmt.Sprintf(`<span id="L%d">%d</span>`, i+1, i+1))
+				output.WriteString(fmt.Sprintf(`<span id="L%[1]d" data-line-number="%[1]d"></span>`, i+1))
 			}
 			ctx.Data["LineNums"] = gotemplate.HTML(output.String())
 		}