search
HomeWeb Front-endHTML TutorialDuoshuo custom CSS dynamic avatar and Duosuo comments display the little things of User Agent_html/css_WEB-ITnose

Foreword

Duoshuo is a social comment system that changes the way of interaction between websites and users, and between users. Of course, Disqus may be more influential in everyone's mind, and the reason why I choose to talk more about it is also very simple. In one sentence, it is "a down-to-earth localized comment hosting service." I have seen many friends proudly choose Duoshuo as a third-party comment plug-in when using WordPress. Private experts have also developed some very interesting hidden attributes based on the official API. Because I now use a static blog built by GitHub Hexo, I also hope to make the comments dynamic through Duosuo custom CSS and Duosuo comment display User Agent. The article records the actual steps I performed, and the extended reading and original text will also be marked with references. Links and points of note, embed.default.css and embed.js files are hosted on GitHub. You are welcome to share your experience, and we will improve these simple and interesting little functions together.

Thanks to Duosuo team and those selfless developers

Update history

April 25, 2015 - Fixed Font Awesome icon display, Add dynamic rendering display
April 24, 2015 - First draft

Read the original text - http://wsgzao.github.io/post/duoshuo/

Extended reading

  • duoshuo-mod - https://github.com/wsgzao/duoshuo-mod
  • Excellent display of custom effects - http://dev.duoshuo.com/docs/4ff1cfd0397309552c000017
  • HelloDog Index - http://wsgzao.github.io/index/#Hexo

Tell more about custom CSS

Main reference @V said , his article also shared 9 additional special effects to satisfy everyone’s Duang desires

Duosuo custom CSS to make your Duosuo comments dynamic - http://www.vsay. cn/one-more-custom-css-lets-you-say-comments-city.html

Flip the avatar horizontally

css/*Head Start*/#ds-thread #ds-reset ul.ds-comments-tabs li.ds-tab a.ds-current {    border: 0px;    color: #6D6D6B;    text-shadow: none;    background: #F3F3F3;}#ds-thread #ds-reset .ds-highlight {    font-family: Microsoft YaHei, "Helvetica Neue", Helvetica, Arial, Sans-serif;    ;font-size: 100%;    color: #6D6D6B !important;}#ds-thread #ds-reset ul.ds-comments-tabs li.ds-tab a.ds-current:hover {    color: #696a52;    background: #F2F2F2;}#ds-thread #ds-reset a.ds-highlight:hover {    color: #696a52 !important;}#ds-thread {    padding-left: 30px;}#ds-thread #ds-reset li.ds-post,#ds-thread #ds-reset #ds-hot-posts {    overflow: visible;}#ds-thread #ds-reset .ds-post-self {    padding: 10px 0 10px 10px;}#ds-thread #ds-reset li.ds-post,#ds-thread #ds-reset .ds-post-self {    border: 0 !important;}#ds-reset .ds-avatar, #ds-thread #ds-reset ul.ds-children .ds-avatar {    top: 15px;    left: -20px;    padding: 5px;    width: 36px;    height: 36px;    box-shadow: -1px 0 1px rgba(0,0,0,.15) inset;    border-radius: 46px;    background: #FAFAFA;}#ds-thread .ds-avatar a {    display: inline-block;    padding: 1px;    width: 32px;    height: 32px;    border: 1px solid #b9baa6;    border-radius: 50%;    background-color: #fff !important;}#ds-thread .ds-avatar a:hover {}#ds-thread .ds-avatar > img {    margin: 2px 0 0 2px;}#ds-thread #ds-reset .ds-replybox {    box-shadow: none;}#ds-thread #ds-reset ul.ds-children .ds-replybox.ds-inline-replybox a.ds-avatar,#ds-reset .ds-replybox.ds-inline-replybox a.ds-avatar {    left: 0;    top: 0;    padding: 0;    width: 32px !important;    height: 32px !important;    background: none;    box-shadow: none;}#ds-reset .ds-replybox.ds-inline-replybox a.ds-avatar img {    width: 32px !important;    height: 32px !important;    border-radius: 50%;}#ds-reset .ds-replybox a.ds-avatar,#ds-reset .ds-replybox .ds-avatar img {    padding: 0;    width: 50px !important;    height: 50px !important;    border-radius: 5px;}#ds-reset .ds-avatar img {    width: 32px !important;    height: 32px !important;    border-radius: 32px;    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.22);    -webkit-transition: .8s all ease-in-out;    -moz-transition: .4s all ease-in-out;    -o-transition: .4s all ease-in-out;    -ms-transition: .4s all ease-in-out;    transition: .4s all ease-in-out;}.ds-post-self:hover .ds-avatar img {    -webkit-transform: rotateX(360deg);    -moz-transform: rotate(360deg);    -o-transform: rotate(360deg);    -ms-transform: rotate(360deg);    transform: rotate(360deg);}#ds-thread #ds-reset .ds-comment-body {    -webkit-transition-delay: initial;    -webkit-transition-duration: 0.4s;    -webkit-transition-property: all;    -webkit-transition-timing-function: initial;    background: #F7F7F7;    padding: 15px 15px 15px 47px;    border-radius: 5px;    box-shadow: #B8B9B9 0 1px 3px;    border: white 1px solid;}#ds-thread #ds-reset ul.ds-children .ds-comment-body {    padding-left: 15px;}#ds-thread #ds-reset .ds-comment-body p {    color: #787968;}#ds-thread #ds-reset .ds-comments {    border-bottom: 0px;}#ds-thread #ds-reset .ds-powered-by {    display: none;}#ds-thread #ds-reset .ds-comments a.ds-user-name {    font-weight: normal;    color: #3D3D3D !important;}#ds-thread #ds-reset .ds-comments a.ds-user-name:hover {    color: #D32 !important;}#ds-thread #ds-reset #ds-bubble {    display: none !important;}#ds-thread #ds-reset #ds-hot-posts {    border: 0;}#ds-reset #ds-hot-posts .ds-gradient-bg {    background: none;}#ds-thread #ds-reset .ds-comment-body:hover {    background-color: #F1F1F1;    -webkit-transition-delay: initial;    -webkit-transition-duration: 0.4s;    -webkit-transition-property: all;    -webkit-transition-timing-function: initial;}/*Head End*/

Say more background customization CSS

The setting steps are super simple. Log in to Duoshuo backend->Settings->Basic settings->Customized CSS

Duo Say comment display UA (User Agent)

Mainly refer to @myhloli and @search客, thank you very much

Say more comment box UA display/blogger mark - http ://myhloli.com/duoshuo-ua-and-admin-tab.html

Display browser and operating system information after replying (Useragent) - http://ssk.91txh.com/209

Localized embed.js

1. Download embed.js

DuoShuo.com/embed.js

If you are lazy, you can download the one I am currently using - http://wsgzao.github.io/embed.js

2. Get Duoshuo ID

Method 1: Log in and comment below the article Click on the avatar to obtain Duoshuo ID

Method 2: Visit Duoshuo backend, http://duoshuo.com/settings/, click on your username, and the following ID address will appear in the address bar
http://duoshuo.com/profile/867394/

3. Modify embed.js locally

Pay attention to modify e.user_id to say more ID, you can customize the ssk front-end display Nickname

js//移动客户端判断开始function checkMobile() {    var isiPad = navigator.userAgent.match(/iPad/i) != null;    if (isiPad) {        return false;    }    var isMobile = navigator.userAgent.match(/iphone|android|phone|mobile|wap|netfront|x11|java|opera mobi|opera mini|ucweb|windows ce|symbian|symbianos|series|webos|sony|blackberry|dopod|nokia|samsung|palmsource|xda|pieplus|meizu|midp|cldc|motorola|foma|docomo|up.browser|up.link|blazer|helio|hosin|huawei|novarra|coolpad|webos|techfaith|palmsource|alcatel|amoi|ktouch|nexian|ericsson|philips|sagem|wellcom|bunjalloo|maui|smartphone|iemobile|spice|bird|zte-|longcos|pantech|gionee|portalmmm|jig browser|hiptop|benq|haier|^lct|320x320|240x320|176x220/i) != null;    if (isMobile) {        return true;    }    return false;}//移动客户端判断结束//管理员判断开始function sskadmin(e) {    var ssk = '';    if (e.user_id == 867394) {        if (checkMobile()) {            ssk = '<span class="ua"><span class="sskadmin">R00T</span></span><br><br>';        } else {            ssk = '<span class="ua"><span class="sskadmin">R00T</span></span>';        }    } else {        if (checkMobile()) {            ssk = '<br><br>';        }    }    return ssk;}//管理员判断结束//显UA开始function ua(e) {    var r = new Array;    var outputer = '';    if (r = e.match(/FireFox\/([^\s]+)/ig)) {        var r1 = r[0].split("/");        outputer = '<span class="ua_firefox"><i class="fa fa-globe"></i> Mozilla FireFox' + ' ' + r1[1]    } else if (r = e.match(/Maxthon([\d]*)\/([^\s]+)/ig)) {        var r1 = r[0].split("/");        outputer = '<span class="ua_maxthon"><i class="fa fa-globe"></i> Maxthon' + ' ' + r1[1]    } else if (r = e.match(/BIDUBrowser([\d]*)\/([^\s]+)/ig)) {        var r1 = r[0].split("/");        outputer = '<span class="ua_ucweb"><i class="fa fa-globe"></i> 百度浏览器' + ' ' + r1[1]    } else if (r = e.match(/UBrowser([\d]*)\/([^\s]+)/ig)) {        var r1 = r[0].split("/");        outputer = '<span class="ua_ucweb"><i class="fa fa-globe"></i> UCBrowser' + ' ' + r1[1]    } else if (r = e.match(/UCBrowser([\d]*)\/([^\s]+)/ig)) {        var r1 = r[0].split("/");        outputer = '<span class="ua_ucweb"><i class="fa fa-globe"></i> UCBrowser' + ' ' + r1[1]    } else if (r = e.match(/MetaSr/ig)) {        outputer = '<span class="ua_sogou"><i class="fa fa-globe"></i> 搜狗浏览器'    } else if (r = e.match(/2345Explorer/ig)) {        outputer = '<span class="ua_2345explorer"><i class="fa fa-globe"></i> 2345王牌浏览器'    } else if (r = e.match(/2345chrome/ig)) {        outputer = '<span class="ua_2345chrome"><i class="fa fa-globe"></i> 2345加速浏览器'    } else if (r = e.match(/LBBROWSER/ig)) {        outputer = '<span class="ua_lbbrowser"><i class="fa fa-globe"></i> 猎豹安全浏览器'    } else if (r = e.match(/MicroMessenger\/([^\s]+)/ig)) {        var r1 = r[0].split("/");        outputer = '<span class="ua_qq"><i class="fa fa-weixin"></i> 微信' + ' ' + r1[1]        /*.split('/')[0]*/    } else if (r = e.match(/QQBrowser\/([^\s]+)/ig)) {        var r1 = r[0].split("/");        outputer = '<span class="ua_qq"><i class="fa fa-globe"></i> QQ浏览器' + ' ' + r1[1]        /*.split('/')[0]*/    } else if (r = e.match(/QQ\/([^\s]+)/ig)) {        var r1 = r[0].split("/");        outputer = '<span class="ua_qq"><i class="fa fa-globe"></i> QQ浏览器' + ' ' + r1[1]        /*.split('/')[0]*/    } else if (r = e.match(/MiuiBrowser\/([^\s]+)/ig)) {        var r1 = r[0].split("/");        outputer = '<span class="ua_mi"><i class="fa fa-globe"></i> Miui浏览器' + ' ' + r1[1]        /*.split('/')[0]*/    } else if (r = e.match(/Chrome([\d]*)\/([^\s]+)/ig)) {        var r1 = r[0].split("/");        outputer = '<span class="ua_chrome"><i class="fa fa-globe"></i> Chrome' + ' ' + r1[1]        /*.split('.')[0]*/    } else if (r = e.match(/safari\/([^\s]+)/ig)) {        var r1 = r[0].split("/");        outputer = '<span class="ua_apple"><i class="fa fa-globe"></i> Apple Safari' + ' ' + r1[1]    } else if (r = e.match(/Opera[\s|\/]([^\s]+)/ig)) {        var r1 = r[0].split("/");        outputer = '<span class="ua_opera"><i class="fa fa-globe"></i> Opera' + ' ' + r1[1]    } else if (r = e.match(/Trident\/7.0/gi)) {        outputer = '<span class="ua_ie"><i class="fa fa-globe"></i> Internet Explorer 11'    } else if (r = e.match(/MSIE\s([^\s|;]+)/gi)) {        outputer = '<span class="ua_ie"><i class="fa fa-globe"></i> Internet Explorer' + ' ' + r[0]        /*.replace('MSIE', '').split('.')[0]*/    } else {        outputer = '<span class="ua_other"><i class="fa fa-globe"></i> 其它浏览器'    }    if (checkMobile()) {        Mobile = '<br><br>';    } else {        Mobile = '';    }    return outputer + "</span>" + Mobile;}function os(e) {    var os = '';    if (e.match(/win/ig)) {        if (e.match(/nt 5.1/ig)) {            os = '<span class="os_xp"><i class="fa fa-desktop"></i> Windows XP'        } else if (e.match(/nt 6.1/ig)) {            os = '<span class="os_7"><i class="fa fa-desktop"></i> Windows 7'        } else if (e.match(/nt 6.2/ig)) {            os = '<span class="os_8"><i class="fa fa-desktop"></i> Windows 8'        } else if (e.match(/nt 6.3/ig)) {            os = '<span class="os_8_1"><i class="fa fa-desktop"></i> Windows 8.1'        } else if (e.match(/nt 10.0/ig)) {            os = '<span class="os_8_1"><i class="fa fa-desktop"></i> Windows 10'        } else if (e.match(/nt 6.0/ig)) {            os = '<span class="os_vista"><i class="fa fa-desktop"></i> Windows Vista'        } else if (e.match(/nt 5/ig)) {            os = '<span class="os_2000"><i class="fa fa-desktop"></i> Windows 2000'        } else {            os = '<span class="os_windows"><i class="fa fa-desktop"></i> Windows'        }    } else if (e.match(/android/ig)) {        os = '<span class="os_android"><i class="fa fa-android"></i> Android'    } else if (e.match(/ubuntu/ig)) {        os = '<span class="os_ubuntu"><i class="fa fa-desktop"></i> Ubuntu'    } else if (e.match(/linux/ig)) {        os = '<span class="os_linux"><i class="fa fa-linux"></i> Linux'    } else if (e.match(/mac/ig)) {        os = '<span class="os_mac"><i class="fa fa-desktop"></i> Mac OS X'    } else if (e.match(/unix/ig)) {        os = '<span class="os_unix"><i class="fa fa-desktop"></i> Unix'    } else if (e.match(/symbian/ig)) {        os = '<span class="os_nokia"><i class="fa fa-mobile"></i> Nokia SymbianOS'    } else {        os = '<span class="os_other"><i class="fa fa-desktop"></i> 其它操作系统'    }    return os + "</span>";}//显UA结束

4. Upload embed.js

My method is uploaded to GitHub, other methods like Qiniu or cloud hosting can be used
http:// wsgzao.github.io/embed.js

5. Modify the call address of Duosuo

The same goes for other platforms. My own approach is ds.src = '//wsgzao. github.io/embed.js';

js<script type="text/javascript">  var duoshuoQuery = {short_name:"<%= theme.duoshuo_shortname %>"};  (function() {    var ds = document.createElement('script');    ds.type = 'text/javascript';ds.async = true;    ds.src = '//wsgzao.github.io/embed.js';    ds.charset = 'UTF-8';    (document.getElementsByTagName('head')[0]    || document.getElementsByTagName('body')[0]).appendChild(ds);  })();</script>

6. Add Font Awesome

Official download compressed package - http://fontawesome.io/
Unzip it fonts and css, upload it to the specified directory and introduce the CSS link according to your blog type to take effect

7. Let’s talk about background custom CSS

Please refer to the above method to add more Talk about custom CSS

css/*UA Start*/span.ua {    margin: 0 1px!important;    color: #FFFFFF!important;    /*text-transform: Capitalize!important;    float: right!important;    line-height: 18px!important;*/;}.ua_other.os_other {    background-color: #ccc!important;    color: #fff;    border: 1px solid #BBB!important;    border-radius: 4px;}.ua_ie {    background-color: #428bca!important;    border-color: #357ebd!important;    border-radius: 4px;    padding: 0 5px!important;}.ua_firefox {    background-color: #f0ad4e!important;    border-color: #eea236!important;    border-radius: 4px;    padding: 0 5px!important;}.ua_maxthon {    background-color: #7373B9!important;    border-color: #7373B9!important;    border-radius: 4px;    padding: 0 5px!important;}.ua_ucweb {    background-color: #FF740F!important;    border-color: #d43f3a!important;    border-radius: 4px;    padding: 0 5px!important;}.ua_sogou {    background-color: #78ACE9!important;    border-color: #4cae4c!important;    border-radius: 4px;    padding: 0 5px!important;}.ua_2345explorer {    background-color: #2478B8!important;    border-color: #4cae4c!important;    border-radius: 4px;    padding: 0 5px!important;}.ua_2345chrome {    background-color: #F9D024!important;    border-color: #4cae4c!important;    border-radius: 4px;    padding: 0 5px!important;}.ua_mi {    background-color: #FF4A00!important;    border-color: #4cae4c!important;    border-radius: 4px;    padding: 0 5px!important;}.ua_lbbrowser {    background-color: #FC9D2E!important;    border-color: #4cae4c!important;    border-radius: 4px;    padding: 0 5px!important;}.ua_chrome {    background-color: #EE6252!important;    border-color: #4cae4c!important;    border-radius: 4px;    padding: 0 5px!important;}.ua_qq {    background-color: #3D88A8!important;    border-color: #4cae4c!important;    border-radius: 4px;    padding: 0 5px!important;}.ua_apple {    background-color: #E95620!important;    border-color: #4cae4c!important;    border-radius: 4px;    padding: 0 5px!important;}.ua_opera {    background-color: #d9534f!important;    border-color: #d43f3a!important;    border-radius: 4px;    padding: 0 5px!important;}.os_vista,.os_2000,.os_windows,.os_xp,.os_7,.os_8,.os_8_1 {    background-color: #39b3d7!important;    border-color: #46b8da!important;    border-radius: 4px;    padding: 0 5px!important;}.os_android {    background-color: #98C13D!important;    border-color: #01B171!important;    border-radius: 4px;    padding: 0 5px!important;}.os_ubuntu {    background-color: #DD4814!important;    border-color: #01B171!important;    border-radius: 4px;    padding: 0 5px!important;}.os_linux {    background-color: #3A3A3A!important;    border-color: #1F1F1F!important;    border-radius: 4px;    padding: 0 5px!important;}.os_mac {    background-color: #666666!important;    border-color: #1F1F1F!important;    border-radius: 4px;    padding: 0 5px!important;}.os_unix {    background-color: #006600!important;    border-color: #1F1F1F!important;    border-radius: 4px;    padding: 0 5px!important;}.os_nokia {    background-color: #014485!important;    border-color: #1F1F1F!important;    border-radius: 4px;    padding: 0 5px!important;}.sskadmin {    background-color: #00a67c!important;    border-color: #01B171!important;    border-radius: 4px;    padding: 0 5px!important;}/*UA End*/

Other open source solutions

We welcome everyone’s positive feedback and put forward your own ideas^_^

Make DUOSHUO Show UA - http://git.oschina.net/huhuhuhu/Make-DUOSHUO-Show-UA/tree/master

ua-parser-js - https://github.com/faisalman/ua -parser-js

duoshuo-mod - https://github.com/wsgzao/duoshuo-mod

Front-end recognition

You can hit and test each Kind of UA

Useragent.js - http://zsxsoft.github.io/useragent.js/withimage.html

UAParser.js - http://faisalman.github. io/ua-parser-js/

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
What is the difference between an HTML tag and an HTML attribute?What is the difference between an HTML tag and an HTML attribute?May 14, 2025 am 12:01 AM

HTMLtagsdefinethestructureofawebpage,whileattributesaddfunctionalityanddetails.1)Tagslike,,andoutlinethecontent'splacement.2)Attributessuchassrc,class,andstyleenhancetagsbyspecifyingimagesources,styling,andmore,improvingfunctionalityandappearance.

The Future of HTML: Evolution and TrendsThe Future of HTML: Evolution and TrendsMay 13, 2025 am 12:01 AM

The future of HTML will develop in a more semantic, functional and modular direction. 1) Semanticization will make the tag describe the content more clearly, improving SEO and barrier-free access. 2) Functionalization will introduce new elements and attributes to meet user needs. 3) Modularity will support component development and improve code reusability.

Why are HTML attributes important for web development?Why are HTML attributes important for web development?May 12, 2025 am 12:01 AM

HTMLattributesarecrucialinwebdevelopmentforcontrollingbehavior,appearance,andfunctionality.Theyenhanceinteractivity,accessibility,andSEO.Forexample,thesrcattributeintagsimpactsSEO,whileonclickintagsaddsinteractivity.Touseattributeseffectively:1)Usese

What is the purpose of the alt attribute? Why is it important?What is the purpose of the alt attribute? Why is it important?May 11, 2025 am 12:01 AM

The alt attribute is an important part of the tag in HTML and is used to provide alternative text for images. 1. When the image cannot be loaded, the text in the alt attribute will be displayed to improve the user experience. 2. Screen readers use the alt attribute to help visually impaired users understand the content of the picture. 3. Search engines index text in the alt attribute to improve the SEO ranking of web pages.

HTML, CSS, and JavaScript: Examples and Practical ApplicationsHTML, CSS, and JavaScript: Examples and Practical ApplicationsMay 09, 2025 am 12:01 AM

The roles of HTML, CSS and JavaScript in web development are: 1. HTML is used to build web page structure; 2. CSS is used to beautify the appearance of web pages; 3. JavaScript is used to achieve dynamic interaction. Through tags, styles and scripts, these three together build the core functions of modern web pages.

How do you set the lang attribute on the  tag? Why is this important?How do you set the lang attribute on the tag? Why is this important?May 08, 2025 am 12:03 AM

Setting the lang attributes of a tag is a key step in optimizing web accessibility and SEO. 1) Set the lang attribute in the tag, such as. 2) In multilingual content, set lang attributes for different language parts, such as. 3) Use language codes that comply with ISO639-1 standards, such as "en", "fr", "zh", etc. Correctly setting the lang attribute can improve the accessibility of web pages and search engine rankings.

What is the purpose of HTML attributes?What is the purpose of HTML attributes?May 07, 2025 am 12:01 AM

HTMLattributesareessentialforenhancingwebelements'functionalityandappearance.Theyaddinformationtodefinebehavior,appearance,andinteraction,makingwebsitesinteractive,responsive,andvisuallyappealing.Attributeslikesrc,href,class,type,anddisabledtransform

How do you create a list in HTML?How do you create a list in HTML?May 06, 2025 am 12:01 AM

TocreatealistinHTML,useforunorderedlistsandfororderedlists:1)Forunorderedlists,wrapitemsinanduseforeachitem,renderingasabulletedlist.2)Fororderedlists,useandfornumberedlists,customizablewiththetypeattributefordifferentnumberingstyles.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools