仿少数派页面制作

采用之前学过的综合技能,结合热部署技术,尽量仿真的写出少数派页面。(何为热部署,见我之前的文章https://www.jianshu.com/p/c1cba51e63f9

  • 左侧的专题列表(Card)
@Data
public class Card {
    private String avatar;
    private String name;
    private String lastuploadtime;
    private String title;
    private String intro;
    private String pic;
    private int like;
    private int good;

    public Card(String avatar, String name, String lastuploadtime, String title, String intro, String pic, int like, int good) {
        this.avatar = avatar;
        this.name = name;
        this.lastuploadtime = lastuploadtime;
        this.title = title;
        this.intro = intro;
        this.pic = pic;
        this.like = like;
        this.good = good;
    }
}
  • 右侧的推荐专题(Recommand)
@Data
public class Recommand {
    private String pic;
    private String name;

    public Recommand(String pic, String name) {
        this.pic = pic;
        this.name = name;
    }
}
  • CardDAO类
@Configuration
@Data
public class  CardDAO {
    public List<Card> getCards() {
        Card[] cards = {
                new Card("1.jpg","张一","3天前","如何学习Spring Boot","如果你在养成习惯的过程中也感受到了无形的压力,那么不妨试试这款无需设定目标的 Continuo,帮助你在改变的同时减轻焦虑","2.jpg",66666,88),
                new Card("2.jpg","张二","4天前","工作日让家中电脑不再闲置,其实你可以遥控它做很多事","如果打个小算盘你就会发现家中电脑的利用率低到令人发指的地步,那么怎么才能在工作日的时候让家中的电脑也能被充分利用起来呢?","3.png",666,88),
                new Card("5.jpg","张三","5天前","Chrome 在 10 周年之际发布了新版,除了好看还更安全","Google 在 Chrome 十周年之际向全平台推送了 Chrome 69 正式版的更新,为我们带来了采用全新设计的 Google material theme 主题,同时还新增了许多新功能,特别在安全性方面做出了很大的提升。","6.jpg",0,0),
                new Card("7.jpg","张四","1天前","Mac 上最好用的系统清理工具大更新,现在你还可以用它更新应用:CleanMyMac X","CleanMyMac X 率先在 Setapp 平台上推出,大版本更新不但带来了全新设计的应用界面,还新增了许多实用的工具,满足了 Mac 使用者清理系统的日常需求。","8.jpg",77,33),
                new Card("9.jpg","张五","三小时前","一顿饭钱能买到哪些好用的包月服务?","自从苹果在 2016 年调整了订阅模式下的开发者分成比例,越来越多的开发者尝试将自己的产品更改成了付费订阅制。不过今天,让我们抛开订阅制本身的孰是孰非,来看一下有哪些订阅服务是「物美价廉」的。","10.jpg",66,222),
                new Card("11.jpg","张六","6小时前","除了拨打 110,这些保障人身安全的方法希望你也能了解一下","除了大家熟知的 110 报警电话,各地公安机关也推出了短信报警、微信报警等多种报警方案,在危险发生的时保持冷静并采取措施并非易事,不过我们还是希望能尽量为大家提供更多选择","12.jpg",44,2),
                new Card("13.jpg","张七","刚刚","把网页文章变成电子书装进 Kindle:Doocer","Doocer 是一款将网页文章批量抓取并推送到 Kindle 的实用工具,它允许用户提交网址、RSS 订阅源和 Pocket 稍后读的文章,批量制作成 ePub、MOBI 电子书。","14.jpg",44,22),
        };
        List<Card> cardList = Arrays.asList(cards);
        return cardList;
    }
}
  • RecommandDAO
@Configuration
@Data
public class RecommandDAO {
    public List<Recommand> getRecommands() {
        Recommand[] recommands ={
                new Recommand("1.jpg","跑步好搭档"),
                new Recommand("2.jpg","给现代人的护眼小技巧"),
                new Recommand("6.jpg","青年居家生活指南"),
                new Recommand("7.jpg","PPT技巧"),
                new Recommand("10.jpg","健康生活"),
                new Recommand("5.jpg","青年大学习"),
                new Recommand("11.jpg","你好骚啊")
        };
        List<Recommand> recommandList = Arrays.asList(recommands);
        return recommandList;
    }
}
  • CardController
@Controller
public class CardController {
    @Resource
    private CardDAO cardDAO;

    @Resource
    private RecommandDAO recommandDAO;

    @GetMapping("card")
    public String getAll(ModelMap map) {
        List<Card> cardList = cardDAO.getCards();
        List<Recommand> recommandList = recommandDAO.getRecommands();
        map.addAttribute("cardList",cardList);
        map.addAttribute("recommandList",recommandList);
        return "tuijian";
    }
}

页面代码

<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>应用推荐</title>
    <link rel="stylesheet" href="webjars/bootstrap/3.3.7-1/css/bootstrap.min.css">
    <style>
        .main{
            float: left;
            margin-left: 150px;
            width: 900px;
        }
        .menu{
            float: right;
            margin-right: 80px;
        }
        .ce div {
            margin-bottom: 40px;
            width: 300px;
            position: relative;
        }
        .menu div div img{
            height: 200px;
            width: 200px;
        }
        .avatar {
            width: 50px;;
            height: 50px;
        }
        .picture{
            height: 200px;
            width: 200px;
            margin-bottom: -5px;
        }
        .main div {
            margin: 20px;
        }
        h5{
            line-height: 1.5em;
        }
        .message{
            margin-left: 60px;
            margin-top: -40px;
        }
        .date {
            margin-left: 60px;
            margin-top: -10px;
        }
        .first {
            margin: 20px;
            border-color: burlywood;
            border-width: 1px;
        }
        .head {
            margin-top: 20px;
            font-size: 22px;
            font-weight: bold;
        }
        .header img{
            margin-left: 30px;
        }
        .mingzi{
            text-align: center;
            color: white;
            font-weight: bold;
            margin-top: -40px;
        }
        .tou{
            color: white;
            margin-left: 200px;
        }
        .rpic {
            width: 300px;
            opacity:0.6;
        }
        .header2 {
            margin-top: -20px;
        }
        .header3 h5{
            font-weight: bold;
            margin-right: 35px;
        }
        .word {
            position: absolute;
            z-index: 2;
            margin-left: -180px;
            margin-top: 100px;
            font-size: 18px;
            color: white;
        }
        .btn1{
            float: right;
            margin-top: -40px;
            margin-right: 200px;
            background-color: black;
            border-radius: 10px;
            font-size: 20px;
            color: white;
        }
        .like {
            margin-bottom: -100px;
            margin-left: 50px;
        }
        .like1 {
            margin-left: 90px;
        }
        .good {
            margin-bottom: -100px;
            margin-left: 50px;
        }
        .good1 {
            margin-left: 90px;
        }
    </style>
</head>
<body>
<div class="contain">
    <div class="navbar navbar-inverse header">
        <h3 class="col-md-offset-1 tou">不做多数派</h3>
        <h3 class="mingzi">#应用推荐</h3>
        <button class="btn1" value="登录">登录</button>
    </div>
    <div class="navbar navbar-default header2">
        <div class="container header3">
            <h5 class="col-md-1">正版软件</h5>
            <h5 class="col-md-1">付费栏目</h5>
            <h5 class="col-md-1">Matrix</h5>
            <h5 class="col-md-1">专题广场</h5>
            <h5 class="col-md-1">热门文章</h5>
            <h5 class="col-md-1">应用推荐</h5>
            <h5 class="col-md-1">生活方式</h5>
            <h5 class="col-md-1">新玩意</h5>
        </div>
    </div>
    <div class="container main">
        <div class="row first thumbnail" th:each="card:${cardList}">
                <div class="col-md-6 col-md-offset-1" >
                    <img th:src="${card.avatar}" class="img-circle avatar">
                    <p class="message" th:text="${card.name}"></p>
                    <p class="date" th:text="${card.lastuploadtime}"></p>
                    <h3 th:text="${card.title}"></h3>
                    <h5 th:text="${card.intro}"></h5>
                </div>
                <div class="col-md-2 col-md-offset-3">
                    <img th:src="${card.pic}" class="picture">
                </div>
                <div class="col-md-1 col-md-offset-1 fuzhu">
                    <img th:src="@{喜欢.png}" class="like">
                    <p th:text="${card.like}" class="like1"></p>
                </div>
                <div class="col-md-1 col-md-offset-1 fuzhu2">
                    <img th:src="@{点赞.png}" class="good">
                    <p th:text="${card.good}" class="good1"></p>
                </div>
        </div>
    </div>
    <div class="menu">
        <p class="head">推荐专题</p>
        <div class="row ce" th:each="recommand:${recommandList}">
                <div class="col-md-2 cebian">
                    <img th:src="${recommand.pic}" class="rpic">
                    <span class="word" th:text="${recommand.name}"></span>
                </div>
        </div>
    </div>
</div>
</body>
</html>

最终展示

少数派.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,392评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,258评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,417评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,992评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,930评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,199评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,652评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,327评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,463评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,382评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,432评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,118评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,704评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,787评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,999评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,476评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,057评论 2 341

推荐阅读更多精彩内容