diff --git a/4_blog/.idea/.gitignore b/4_blog/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/4_blog/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/4_blog/.idea/blog.iml b/4_blog/.idea/blog.iml new file mode 100644 index 0000000..a737045 --- /dev/null +++ b/4_blog/.idea/blog.iml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/4_blog/.idea/misc.xml b/4_blog/.idea/misc.xml new file mode 100644 index 0000000..db8786c --- /dev/null +++ b/4_blog/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/4_blog/.idea/modules.xml b/4_blog/.idea/modules.xml new file mode 100644 index 0000000..e81aaae --- /dev/null +++ b/4_blog/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/4_blog/blog/__init__.py b/4_blog/blog/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/4_blog/blog/__init__.pyc b/4_blog/blog/__init__.pyc new file mode 100644 index 0000000..b14bfeb Binary files /dev/null and b/4_blog/blog/__init__.pyc differ diff --git a/4_blog/blog/settings.py b/4_blog/blog/settings.py new file mode 100644 index 0000000..1070fc2 --- /dev/null +++ b/4_blog/blog/settings.py @@ -0,0 +1,134 @@ +""" +Django settings for blog project. + +Generated by 'django-admin startproject' using Django 1.11.6. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.11/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +from django.conf import global_settings + +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'ry!upfimxiq7+559yq3skd%xc6+7dml(+lmy_n#ylw8!#ub-ld' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'post' +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'blog.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [os.path.join(BASE_DIR, 'templates')] + , + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'blog.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.11/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': '180810db', + 'USER': 'root', + 'PASSWORD': '123456', + 'HOST': '127.0.0.1', + 'PORT': '3306' + } +} + + +# Password validation +# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/1.11/topics/i18n/ + +LANGUAGE_CODE = 'zh-Hans' + +TIME_ZONE = 'Asia/Shanghai' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.11/howto/static-files/ + +STATIC_URL = '/static/' + +STATICFILES_DIRS = [ + os.path.join(BASE_DIR,'static','css') +] + +# global_settings diff --git a/4_blog/blog/settings.pyc b/4_blog/blog/settings.pyc new file mode 100644 index 0000000..63cef39 Binary files /dev/null and b/4_blog/blog/settings.pyc differ diff --git a/4_blog/blog/urls.py b/4_blog/blog/urls.py new file mode 100644 index 0000000..acf12b5 --- /dev/null +++ b/4_blog/blog/urls.py @@ -0,0 +1,22 @@ +"""blog URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.11/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url, include +from django.contrib import admin + +urlpatterns = [ + url(r'^admin/', admin.site.urls), + url(r'^', include('post.urls')), +] diff --git a/4_blog/blog/urls.pyc b/4_blog/blog/urls.pyc new file mode 100644 index 0000000..8a7d542 Binary files /dev/null and b/4_blog/blog/urls.pyc differ diff --git a/4_blog/blog/wsgi.py b/4_blog/blog/wsgi.py new file mode 100644 index 0000000..bae86cb --- /dev/null +++ b/4_blog/blog/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for blog project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "blog.settings") + +application = get_wsgi_application() diff --git a/4_blog/blog/wsgi.pyc b/4_blog/blog/wsgi.pyc new file mode 100644 index 0000000..9ed5d0a Binary files /dev/null and b/4_blog/blog/wsgi.pyc differ diff --git a/4_blog/db.sqlite3 b/4_blog/db.sqlite3 new file mode 100644 index 0000000..b9d314a Binary files /dev/null and b/4_blog/db.sqlite3 differ diff --git a/4_blog/manage.py b/4_blog/manage.py new file mode 100644 index 0000000..0ea0e80 --- /dev/null +++ b/4_blog/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "blog.settings") + try: + from django.core.management import execute_from_command_line + except ImportError: + # The above import may fail for some other reason. Ensure that the + # issue is really that Django is missing to avoid masking other + # exceptions on Python 2. + try: + import django + except ImportError: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) + raise + execute_from_command_line(sys.argv) diff --git a/4_blog/post/__init__.py b/4_blog/post/__init__.py new file mode 100644 index 0000000..e10a4d0 --- /dev/null +++ b/4_blog/post/__init__.py @@ -0,0 +1,17 @@ +# coding:utf-8 + +from django.apps import AppConfig +import os + +default_app_config = 'post.PrimaryBlogConfig' + +VERBOSE_APP_NAME = u"博客管理" + + +def get_current_app_name(_file): + return os.path.split(os.path.dirname(_file))[-1] + + +class PrimaryBlogConfig(AppConfig): + name = get_current_app_name(__file__) + verbose_name = VERBOSE_APP_NAME \ No newline at end of file diff --git a/4_blog/post/__init__.pyc b/4_blog/post/__init__.pyc new file mode 100644 index 0000000..0200ba6 Binary files /dev/null and b/4_blog/post/__init__.pyc differ diff --git a/4_blog/post/__pycache__/models.cpython-312.pyc b/4_blog/post/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000..7673573 Binary files /dev/null and b/4_blog/post/__pycache__/models.cpython-312.pyc differ diff --git a/4_blog/post/admin.py b/4_blog/post/admin.py new file mode 100644 index 0000000..cc86658 --- /dev/null +++ b/4_blog/post/admin.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.contrib import admin +from .models import * +# Register your models here. + +class PostModelAdmin(admin.ModelAdmin): + list_display = ('title','created') + +admin.site.register(Category) +admin.site.register(Tag) +admin.site.register(Post,PostModelAdmin) \ No newline at end of file diff --git a/4_blog/post/admin.pyc b/4_blog/post/admin.pyc new file mode 100644 index 0000000..6375fe9 Binary files /dev/null and b/4_blog/post/admin.pyc differ diff --git a/4_blog/post/apps.py b/4_blog/post/apps.py new file mode 100644 index 0000000..75d673e --- /dev/null +++ b/4_blog/post/apps.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class PostConfig(AppConfig): + name = 'post' diff --git a/4_blog/post/migrations/0001_initial.py b/4_blog/post/migrations/0001_initial.py new file mode 100644 index 0000000..8af59b5 --- /dev/null +++ b/4_blog/post/migrations/0001_initial.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2018-08-10 07:51 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Category', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('cname', models.CharField(max_length=30, unique=True)), + ], + options={ + 'db_table': 't_category', + }, + ), + migrations.CreateModel( + name='Post', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=100, unique=True)), + ('desc', models.CharField(max_length=100)), + ('content', models.TextField()), + ('created', models.DateTimeField(auto_now_add=True)), + ('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='post.Category')), + ], + options={ + 'db_table': 't_post', + }, + ), + migrations.CreateModel( + name='Tag', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('tname', models.CharField(max_length=30, unique=True)), + ], + options={ + 'db_table': 't_tag', + }, + ), + migrations.AddField( + model_name='post', + name='tag', + field=models.ManyToManyField(to='post.Tag'), + ), + ] diff --git a/4_blog/post/migrations/0001_initial.pyc b/4_blog/post/migrations/0001_initial.pyc new file mode 100644 index 0000000..a2b71a4 Binary files /dev/null and b/4_blog/post/migrations/0001_initial.pyc differ diff --git a/4_blog/post/migrations/__init__.py b/4_blog/post/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/4_blog/post/migrations/__init__.pyc b/4_blog/post/migrations/__init__.pyc new file mode 100644 index 0000000..665b11b Binary files /dev/null and b/4_blog/post/migrations/__init__.pyc differ diff --git a/4_blog/post/models.py b/4_blog/post/models.py new file mode 100644 index 0000000..c23c5b8 --- /dev/null +++ b/4_blog/post/models.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models + +# Create your models here. +class Category(models.Model): + cname = models.CharField(max_length=30,unique=True,verbose_name=u'类别名称') + + + class Meta: + db_table = 't_category' + verbose_name_plural=u'类别' + + def __unicode__(self): + return u'Category:%s'%self.cname + +class Tag(models.Model): + tname = models.CharField(max_length=30,unique=True,verbose_name=u'标签名称') + + class Meta: + db_table = 't_tag' + verbose_name_plural = u'标签' + + def __unicode__(self): + return u'Tag:%s' % self.tname + +class Post(models.Model): + title = models.CharField(max_length=100,unique=True) + desc = models.CharField(max_length=100) + content = models.TextField() + created = models.DateTimeField(auto_now_add=True) + category = models.ForeignKey(Category,on_delete=models.CASCADE) + tag = models.ManyToManyField(Tag) + + class Meta: + db_table = 't_post' + verbose_name_plural = u'帖子' + + def __unicode__(self): + return u'Post:%s' % self.title + diff --git a/4_blog/post/models.pyc b/4_blog/post/models.pyc new file mode 100644 index 0000000..4e8778c Binary files /dev/null and b/4_blog/post/models.pyc differ diff --git a/4_blog/post/templates/detail.html b/4_blog/post/templates/detail.html new file mode 100644 index 0000000..31a8fec --- /dev/null +++ b/4_blog/post/templates/detail.html @@ -0,0 +1,39 @@ +{% extends 'base.html' %} +{% load myfilter %} + +{% block title %} + 详情页面 +{% endblock %} + +{% block left %} + +
+
+ +
+
+

+ {{ post.title }} +

+
+
+

前言

+ {{ post.desc }} +
+ {{ post.content|md|safe }} +
+
+
+
+ +
+ + +{% endblock %} \ No newline at end of file diff --git a/4_blog/post/templates/index.html b/4_blog/post/templates/index.html new file mode 100644 index 0000000..55c1f80 --- /dev/null +++ b/4_blog/post/templates/index.html @@ -0,0 +1,111 @@ +{% extends 'base.html' %} + +{% block title %}首页{% endblock %} + + + +{% block left %} +
+ + {% for post in postList %} +
+ +
+
+

+ {{ post.title }} +

+
+
+

前言

+
+ {{ post.desc }} + + +

+ 阅读全文 +

+
+
+ 分享 + +
+
+
+ {% endfor %} + + + + + + +
+ + +{% endblock %} + + + + + + + + + + + + + + + diff --git a/4_blog/post/templatetags/__init__.py b/4_blog/post/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/4_blog/post/templatetags/__init__.pyc b/4_blog/post/templatetags/__init__.pyc new file mode 100644 index 0000000..e156558 Binary files /dev/null and b/4_blog/post/templatetags/__init__.pyc differ diff --git a/4_blog/post/templatetags/myfilter.py b/4_blog/post/templatetags/myfilter.py new file mode 100644 index 0000000..0988f67 --- /dev/null +++ b/4_blog/post/templatetags/myfilter.py @@ -0,0 +1,10 @@ +#coding=utf-8 + +from django.template import Library + +register = Library() + +@register.filter +def md(value): + import markdown + return markdown.markdown(value) \ No newline at end of file diff --git a/4_blog/post/templatetags/myfilter.pyc b/4_blog/post/templatetags/myfilter.pyc new file mode 100644 index 0000000..f6a6592 Binary files /dev/null and b/4_blog/post/templatetags/myfilter.pyc differ diff --git a/4_blog/post/tests.py b/4_blog/post/tests.py new file mode 100644 index 0000000..5982e6b --- /dev/null +++ b/4_blog/post/tests.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.test import TestCase + +# Create your tests here. diff --git a/4_blog/post/urls.py b/4_blog/post/urls.py new file mode 100644 index 0000000..0d4c789 --- /dev/null +++ b/4_blog/post/urls.py @@ -0,0 +1,10 @@ +#coding=utf-8 + +from django.conf.urls import url +import views + +urlpatterns=[ + url(r'^$',views.queryAll), + url(r'^page/(\d+)$',views.queryAll), + url(r'^post/(\d+)$',views.detail), +] diff --git a/4_blog/post/urls.pyc b/4_blog/post/urls.pyc new file mode 100644 index 0000000..89fd1f0 Binary files /dev/null and b/4_blog/post/urls.pyc differ diff --git a/4_blog/post/views.py b/4_blog/post/views.py new file mode 100644 index 0000000..890fecf --- /dev/null +++ b/4_blog/post/views.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.shortcuts import render + +# Create your views here. +#渲染主页面 +# from post.models import Post +from templates.models import Post + +from django.core.paginator import Paginator +import math + +def queryAll(request,num=1): + + num = int(num) + + #获取所有帖子信息 + postList = Post.objects.all().order_by('-created') + + #创建分页器对象 + pageObj = Paginator(postList,1) + + #获取当前页的数据 + perPageList = pageObj.page(num) + + + #生成页码数列表 + # 每页开始页码 + begin = (num - int(math.ceil(10.0 / 2))) + if begin < 1: + begin = 1 + + # 每页结束页码 + end = begin + 9 + if end > pageObj.num_pages: + end = pageObj.num_pages + + if end <= 10: + begin = 1 + else: + begin = end - 9 + + pageList = range(begin, end + 1) + + + return render(request,'index.html',{'postList':perPageList,'pageList':pageList,'currentNum':num}) + +#阅读全文功能 +def detail(request,postid): + postid = int(postid) + + #根据postid查询帖子的详情信息 + post = Post.objects.get(id=postid) + + return render(request,'detail.html',{'post':post}) \ No newline at end of file diff --git a/4_blog/post/views.pyc b/4_blog/post/views.pyc new file mode 100644 index 0000000..7b841a9 Binary files /dev/null and b/4_blog/post/views.pyc differ diff --git a/4_blog/static/css/style.css b/4_blog/static/css/style.css new file mode 100644 index 0000000..710fc50 --- /dev/null +++ b/4_blog/static/css/style.css @@ -0,0 +1,1492 @@ + +body { + zoom: 1; + width: 100%; +} +body:before, +body:after { + content: ""; + display: table; +} +body:after { + clear: both; +} +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-weight: inherit; + font-style: inherit; + font-family: inherit; + font-size: 100%; + vertical-align: baseline; +} +body { + line-height: 1; + color: #000; + background: #fff; +} +ol, +ul { + list-style: none; +} +table { + border-collapse: separate; + border-spacing: 0; + vertical-align: middle; +} +caption, +th, +td { + text-align: left; + font-weight: normal; + vertical-align: middle; +} +a img { + border: none; +} +input, +button { + margin: 0; + padding: 0; +} +input::-moz-focus-inner, +button::-moz-focus-inner { + border: 0; + padding: 0; +} +@font-face { + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + } +html, +body, +#container { + height: 100%; +} +body { + background: #eee; + font: 14px/1.6em "寰蒋闆呴粦", "Microsoft Yahei", "Droid Sans", Helvetica Neue, Helvetica, Arial, sans-serif; + -webkit-text-size-adjust: 100%; +} +.outer { + zoom: 1; + max-width: 1220px; + margin: 0 auto; + padding: 0 10px; +} +.outer:before, +.outer:after { + content: ""; + display: table; +} +.outer:after { + clear: both; +} +.inner { + display: inline; + float: left; + width: 98.3333333333333%; + margin: 0 0.8333333333333%; +} +.left, +.alignleft { + float: left; +} +.right, +.alignright { + float: right; +} +.clear { + clear: both; +} +#container { + position: relative; +} +.mobile-nav-on { + overflow: hidden; +} +#wrap { + height: 100%; + width: 100%; + position: absolute; + top: 0; + left: 0; + -webkit-transition: 0.2s ease-out; + -moz-transition: 0.2s ease-out; + -o-transition: 0.2s ease-out; + -ms-transition: 0.2s ease-out; + transition: 0.2s ease-out; + z-index: 1; + background: #eee; +} +.mobile-nav-on #wrap { + left: 280px; +} +@media screen and (min-width: 768px) { + #main { + display: inline; + float: left; + width: 73.3333333333333%; + margin: 0 0.8333333333333%; + } +} +.article-date, +.article-category-link, +.archive-year, +.widget-title { + text-decoration: none; + text-transform: uppercase; + letter-spacing: 2px; + color: #999; + margin-bottom: 1em; + margin-left: 5px; + line-height: 1em; + text-shadow: 0 1px #fff; + font-weight: bold; +} +.article-inner, +.archive-article-inner { + background: #fff; + -webkit-box-shadow: 1px 2px 3px #ddd; + box-shadow: 1px 2px 3px #ddd; + -webkit-border-radius: 3px; + border-radius: 3px; +} +.article-entry h1, +.widget h1, +.article-entry h2, +.widget h2, +.article-entry h3, +.widget h3, +.article-entry h4, +.widget h4, +.article-entry h5, +.widget h5, +.article-entry h6, +.widget h6 { + font-weight: bold; + color: #000; + font-family: "Droid Serif", Georgia, Serif; +} +.article-entry h1 a, +.widget h1 a, +.article-entry h2 a, +.widget h2 a, +.article-entry h3 a, +.widget h3 a, +.article-entry h4 a, +.widget h4 a, +.article-entry h5 a, +.widget h5 a, +.article-entry h6 a, +.widget h6 a { + color: #000; + text-decoration: none; +} +.article-entry h1 a:hover, +.widget h1 a:hover, +.article-entry h2 a:hover, +.widget h2 a:hover, +.article-entry h3 a:hover, +.widget h3 a:hover, +.article-entry h4 a:hover, +.widget h4 a:hover, +.article-entry h5 a:hover, +.widget h5 a:hover, +.article-entry h6 a:hover, +.widget h6 a:hover { + color: #e32d40; +} +.article-entry h2, +.widget h2, +.article-entry h3, +.widget h3, +.article-entry h4, +.widget h4, +.article-entry h5, +.widget h5, +.article-entry h6, +.widget h6 { + font-weight: 600; + margin-bottom: 10px; +} +.article-entry h1, +.widget h1 { + font-size: 2em; +} +.article-entry h2, +.widget h2 { + font-size: 1.5em; +} +.article-entry h3, +.widget h3 { + font-size: 1.3em; +} +.article-entry h4, +.widget h4 { + font-size: 1.2em; +} +.article-entry h5, +.widget h5 { + font-size: 1em; +} +.article-entry h6, +.widget h6 { + font-size: 1em; + color: #999; +} +.article-entry hr, +.widget hr { + border: 1px dashed #ddd; +} +.article-entry strong, +.widget strong { + font-weight: bold; +} +.article-entry em, +.widget em, +.article-entry cite, +.widget cite { + font-style: italic; +} +.article-entry sup, +.widget sup, +.article-entry sub, +.widget sub { + font-size: 0.75em; + line-height: 0; + position: relative; + vertical-align: baseline; +} +.article-entry sup, +.widget sup { + top: -0.5em; +} +.article-entry sub, +.widget sub { + bottom: -0.2em; +} +.article-entry small, +.widget small { + font-size: 0.85em; +} +.article-entry acronym, +.widget acronym, +.article-entry abbr, +.widget abbr { + border-bottom: 1px dotted; +} +.article-entry ul, +.widget ul, +.article-entry ol, +.widget ol, +.article-entry dl, +.widget dl { + margin: 0 20px; + line-height: 1.6em; +} +.article-entry ul ul, +.widget ul ul, +.article-entry ol ul, +.widget ol ul, +.article-entry ul ol, +.widget ul ol, +.article-entry ol ol, +.widget ol ol { + margin-top: 0; + margin-bottom: 0; +} +.article-entry ul, +.widget ul { + list-style: disc; +} +.article-entry ol, +.widget ol { + list-style: decimal; +} +.article-entry dt, +.widget dt { + font-weight: bold; +} +#header { + height: 67px; + position: relative; + border-bottom: 1px solid #ddd; +} +#header:before, +#header:after { + content: ""; + position: absolute; + left: 0; + right: 0; + height: 40px; +} +#header:before { + top: 0; + background: -webkit-linear-gradient(rgba(0,0,0,0.2), transparent); + background: -moz-linear-gradient(rgba(0,0,0,0.2), transparent); + background: -o-linear-gradient(rgba(0,0,0,0.2), transparent); + background: -ms-linear-gradient(rgba(0,0,0,0.2), transparent); + background: linear-gradient(rgba(0,0,0,0.2), transparent); +} +#header:after { + bottom: 0; + background: -webkit-linear-gradient(transparent, rgba(0,0,0,0.2)); + background: -moz-linear-gradient(transparent, rgba(0,0,0,0.2)); + background: -o-linear-gradient(transparent, rgba(0,0,0,0.2)); + background: -ms-linear-gradient(transparent, rgba(0,0,0,0.2)); + background: linear-gradient(transparent, rgba(0,0,0,0.2)); +} +#header-outer { + height: 100%; + position: relative; +} +#header-inner { + position: relative; + overflow: hidden; +} +#banner { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #21282e; + -webkit-background-size: cover; + -moz-background-size: cover; + background-size: cover; + z-index: -1; +} +#header-title { + text-align: center; + height: 40px; + position: absolute; + top: 50%; + left: 0; + margin-top: -20px; +} +#logo, +#subtitle { + text-decoration: none; + color: #fff; + font-weight: 300; + text-shadow: 0 1px 4px rgba(0,0,0,0.3); +} +#logo { + font-size: 40px; + line-height: 40px; + letter-spacing: 2px; + background: #e32d40; + padding: 5px 10px; + -webkit-border-radius: 5px; + border-radius: 5px; +} +#subtitle { + font-size: 16px; + line-height: 16px; + letter-spacing: 1px; + color: #687e91; +} +#subtitle-wrap { + margin-top: 16px; +} +#main-nav { + float: left; + margin-left: -15px; +} +.nav-icon, +.main-nav-link { + float: left; + color: #fff; + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + text-decoration: none; + text-shadow: 0 1px rgba(0,0,0,0.2); + -webkit-transition: opacity 0.2s; + -moz-transition: opacity 0.2s; + -o-transition: opacity 0.2s; + -ms-transition: opacity 0.2s; + transition: opacity 0.2s; + display: block; + padding: 20px 15px; +} +.nav-icon:hover, +.main-nav-link:hover { + opacity: 1; + -ms-filter: none; + filter: none; +} +.nav-icon { + font-family: FontAwesome; + text-align: center; + font-size: 14px; + width: 14px; + height: 14px; + padding: 20px 15px; + position: relative; + cursor: pointer; +} +.main-nav-link { + font-weight: 300; + letter-spacing: 1px; +} +@media screen and (max-width: 479px) { + .main-nav-link { + display: none; + } +} +#main-nav-toggle { + display: none; +} +#main-nav-toggle:before { + content: "\f0c9"; +} +@media screen and (max-width: 479px) { + #main-nav-toggle { + display: block; + } +} +#sub-nav { + float: right; + margin-right: -15px; +} +#nav-rss-link:before { + content: "\f09e"; +} +#nav-search-btn:before { + content: "\f002"; +} +#search-form-wrap { + position: absolute; + top: 15px; + width: 150px; + height: 30px; + right: -150px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: 0.2s ease-out; + -moz-transition: 0.2s ease-out; + -o-transition: 0.2s ease-out; + -ms-transition: 0.2s ease-out; + transition: 0.2s ease-out; +} +#search-form-wrap.on { + opacity: 1; + -ms-filter: none; + filter: none; + right: 0; +} +@media screen and (max-width: 479px) { + #search-form-wrap { + width: 100%; + right: -100%; + } +} +.search-form { + position: absolute; + top: 0; + left: 0; + right: 0; + background: #fff; + padding: 5px 15px; + -webkit-border-radius: 15px; + border-radius: 15px; + -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.3); + box-shadow: 0 0 10px rgba(0,0,0,0.3); +} +.search-form-input { + border: none; + background: none; + color: #000; + width: 100%; + font: 13px "寰蒋闆呴粦", "Microsoft Yahei", "Droid Sans", Helvetica Neue, Helvetica, Arial, sans-serif; + outline: none; +} +.search-form-input::-webkit-search-results-decoration, +.search-form-input::-webkit-search-cancel-button { + -webkit-appearance: none; +} +.search-form-submit { + position: absolute; + top: 50%; + right: 10px; + margin-top: -7px; + font: 13px FontAwesome; + border: none; + background: none; + color: #bbb; + cursor: pointer; +} +.search-form-submit:hover, +.search-form-submit:focus { + color: #777; +} +.article { + margin: 50px 0; +} +.article-inner { + overflow: hidden; +} +.article-meta { + zoom: 1; +} +.article-meta:before, +.article-meta:after { + content: ""; + display: table; +} +.article-meta:after { + clear: both; +} +.article-date { + float: left; +} +.article-category { + float: left; + line-height: 1em; + color: #ccc; + text-shadow: 0 1px #fff; + margin-left: 8px; +} +.article-category:before { + content: "\2022"; +} +.article-category-link { + margin: 0 12px 1em; +} +.article-header { + padding: 20px 20px 0; +} +.article-title { + text-decoration: none; + font-size: 2em; + font-weight: bold; + color: #000; + line-height: 1.1em; + -webkit-transition: color 0.2s; + -moz-transition: color 0.2s; + -o-transition: color 0.2s; + -ms-transition: color 0.2s; + transition: color 0.2s; +} +a.article-title:hover { + color: #e32d40; +} +.article-entry { + zoom: 1; + color: #000; + padding: 0 20px; +} +.article-entry:before, +.article-entry:after { + content: ""; + display: table; +} +.article-entry:after { + clear: both; +} +.article-entry p, +.article-entry table { + line-height: 1.6em; + margin: 1.6em 0; +} +.article-entry h1, +.article-entry h2, +.article-entry h3, +.article-entry h4, +.article-entry h5, +.article-entry h6 { + font-weight: bold; +} +.article-entry h1, +.article-entry h2, +.article-entry h3, +.article-entry h4, +.article-entry h5, +.article-entry h6 { + line-height: 1.1em; + margin: 1.1em 0; +} +.article-entry a { + color: #e32d40; + text-decoration: none; +} +.article-entry a:hover { + text-decoration: underline; +} +.article-entry ul, +.article-entry ol, +.article-entry dl { + margin-top: 1.6em; + margin-bottom: 1.6em; +} +.article-entry img, +.article-entry video { + max-width: 100%; + height: auto; + display: block; + margin: auto; +} +.article-entry iframe { + border: none; +} +.article-entry table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} +.article-entry th { + font-weight: bold; + border-bottom: 3px solid #ddd; + padding-bottom: 0.5em; +} +.article-entry td { + border-bottom: 1px solid #ddd; + padding: 10px 0; +} +.article-entry blockquote { + font-family: "Droid Serif", Georgia, Serif; + margin: 1.6em 0; + padding: 0 0.8em; + border-left: 4px solid #ddd; + color: #777; +} +.article-entry blockquote footer { + font-size: 14px; + margin: 1.6em 0; + font-family: "寰蒋闆呴粦", "Microsoft Yahei", "Droid Sans", Helvetica Neue, Helvetica, Arial, sans-serif; +} +.article-entry blockquote footer cite:before { + content: "鈥�"; + padding: 0 0.5em; +} +.article-entry .pullquote { + text-align: left; + width: 45%; + margin: 0; +} +.article-entry .pullquote.left { + margin-left: 0.5em; + margin-right: 1em; +} +.article-entry .pullquote.right { + margin-right: 0.5em; + margin-left: 1em; +} +.article-entry .caption { + color: #999; + display: block; + font-size: 0.9em; + margin-top: 0.5em; + position: relative; + text-align: center; +} +.article-entry .video-container { + position: relative; + padding-top: 56.25%; + height: 0; + overflow: hidden; +} +.article-entry .video-container iframe, +.article-entry .video-container object, +.article-entry .video-container embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + margin-top: 0; +} +.article-more-link a { + display: inline-block; + line-height: 1em; + padding: 6px 15px; + -webkit-border-radius: 15px; + border-radius: 15px; + background: #eee; + color: #999; + text-shadow: 0 1px #fff; + text-decoration: none; +} +.article-more-link a:hover { + background: #e32d40; + color: #fff; + text-decoration: none; + text-shadow: 0 1px #c01a2b; +} +.article-footer { + zoom: 1; + font-size: 0.85em; + line-height: 1.6em; + border-top: 2px solid #ddd; + padding-top: 1.6em; + margin: 0 20px 20px; +} +.article-footer:before, +.article-footer:after { + content: ""; + display: table; +} +.article-footer:after { + clear: both; +} +.article-footer a { + color: #999; + text-decoration: none; +} +.article-footer a:hover { + color: #000; +} +.article-tag-list-item { + float: left; + margin-right: 10px; +} +.article-tag-list-link:before { + content: "#"; +} +.article-comment-link { + float: right; +} +.article-comment-link:before { + content: "\f075"; + font-family: FontAwesome; + padding-right: 8px; +} +.article-share-link { + cursor: pointer; + float: right; + margin-left: 20px; +} +.article-share-link:before { + content: "\f064"; + font-family: FontAwesome; + padding-right: 6px; +} +#article-nav { + zoom: 1; + position: relative; +} +#article-nav:before, +#article-nav:after { + content: ""; + display: table; +} +#article-nav:after { + clear: both; +} +@media screen and (min-width: 768px) { + #article-nav { + margin: 50px 0; + } + #article-nav:before { + width: 8px; + height: 8px; + position: absolute; + top: 50%; + left: 50%; + margin-top: -4px; + margin-left: -4px; + content: ""; + -webkit-border-radius: 50%; + border-radius: 50%; + background: #ddd; + -webkit-box-shadow: 0 1px 2px #fff; + box-shadow: 0 1px 2px #fff; + } +} +.article-nav-link-wrap { + text-decoration: none; + text-shadow: 0 1px #fff; + color: #999; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin-top: 50px; + text-align: center; + display: block; +} +.article-nav-link-wrap:hover { + color: #000; +} +@media screen and (min-width: 768px) { + .article-nav-link-wrap { + width: 50%; + margin-top: 0; + } +} +@media screen and (min-width: 768px) { + #article-nav-newer { + float: left; + text-align: right; + padding-right: 20px; + } +} +@media screen and (min-width: 768px) { + #article-nav-older { + float: right; + text-align: left; + padding-left: 20px; + } +} +.article-nav-caption { + text-transform: uppercase; + letter-spacing: 2px; + color: #ddd; + line-height: 1em; + font-weight: bold; +} +#article-nav-newer .article-nav-caption { + margin-right: -2px; +} +.article-nav-title { + font-size: 0.85em; + line-height: 1.6em; + margin-top: 0.5em; +} +.article-share-box { + position: absolute; + display: none; + background: #fff; + -webkit-box-shadow: 1px 2px 10px rgba(0,0,0,0.2); + box-shadow: 1px 2px 10px rgba(0,0,0,0.2); + -webkit-border-radius: 3px; + border-radius: 3px; + margin-left: -145px; + overflow: hidden; + z-index: 1; +} +.article-share-box.on { + display: block; +} +.article-share-input { + width: 100%; + background: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + font: 14px "寰蒋闆呴粦", "Microsoft Yahei", "Droid Sans", Helvetica Neue, Helvetica, Arial, sans-serif; + padding: 0 15px; + color: #000; + outline: none; + border: 1px solid #ddd; + -webkit-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; + height: 36px; + line-height: 36px; +} +.article-share-links { + zoom: 1; + background: #eee; +} +.article-share-links:before, +.article-share-links:after { + content: ""; + display: table; +} +.article-share-links:after { + clear: both; +} +.article-share-twitter, +.article-share-facebook, +.article-share-pinterest, +.article-share-google { + width: 50px; + height: 36px; + display: block; + float: left; + position: relative; + color: #999; + text-shadow: 0 1px #fff; +} +.article-share-twitter:before, +.article-share-facebook:before, +.article-share-pinterest:before, +.article-share-google:before { + font-size: 20px; + font-family: FontAwesome; + width: 20px; + height: 20px; + position: absolute; + top: 50%; + left: 50%; + margin-top: -10px; + margin-left: -10px; + text-align: center; +} +.article-share-twitter:hover, +.article-share-facebook:hover, +.article-share-pinterest:hover, +.article-share-google:hover { + color: #fff; +} +.article-share-twitter:before { + content: "\f099"; +} +.article-share-twitter:hover { + background: #00aced; + text-shadow: 0 1px #008abe; +} +.article-share-facebook:before { + content: "\f09a"; +} +.article-share-facebook:hover { + background: #3b5998; + text-shadow: 0 1px #2f477a; +} +.article-share-pinterest:before { + content: "\f0d2"; +} +.article-share-pinterest:hover { + background: #cb2027; + text-shadow: 0 1px #a21a1f; +} +.article-share-google:before { + content: "\f0d5"; +} +.article-share-google:hover { + background: #dd4b39; + text-shadow: 0 1px #be3221; +} +.article-gallery { + background: #000; + position: relative; +} +.article-gallery-photos { + position: relative; + overflow: hidden; +} +.article-gallery-img { + display: none; + max-width: 100%; +} +.article-gallery-img:first-child { + display: block; +} +.article-gallery-img.loaded { + position: absolute; + display: block; +} +.article-gallery-img img { + display: block; + max-width: 100%; + margin: 0 auto; +} +.copyright { + display: block; + padding: 10px 20px; + margin: auto; + line-height: 24px; + font-size: 14px; +} +.copyright a { + color: #e32d40; + text-decoration: none; +} +.copyright a:hover { + text-decoration: underline; +} +#comments { + background: #fff; + -webkit-box-shadow: 1px 2px 3px #ddd; + box-shadow: 1px 2px 3px #ddd; + padding: 20px; + border: 1px solid #ddd; + -webkit-border-radius: 3px; + border-radius: 3px; + margin: 50px 0; +} +#comments a { + color: #e32d40; +} +.archives-wrap { + margin: 50px 0; +} +.archives { + zoom: 1; +} +.archives:before, +.archives:after { + content: ""; + display: table; +} +.archives:after { + clear: both; +} +.archive-year-wrap { + margin-bottom: 1em; + line-height: 1em; +} +.archives { + -webkit-column-gap: 10px; + -moz-column-gap: 10px; + column-gap: 10px; +} +@media screen and (min-width: 480px) and (max-width: 767px) { + .archives { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + } +} +@media screen and (min-width: 768px) { + .archives { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + } +} +.archive-article { + -webkit-column-break-inside: avoid; + page-break-inside: avoid; + overflow: hidden; + break-inside: avoid-column; +} +.archive-article-inner { + padding: 10px; + margin-bottom: 15px; +} +.archive-article-title { + text-decoration: none; + font-weight: bold; + color: #000; + -webkit-transition: color 0.2s; + -moz-transition: color 0.2s; + -o-transition: color 0.2s; + -ms-transition: color 0.2s; + transition: color 0.2s; + line-height: 1.6em; +} +.archive-article-title:hover { + color: #e32d40; +} +.archive-article-footer { + margin-top: 1em; +} +.archive-article-date { + color: #999; + text-decoration: none; + font-size: 0.85em; + line-height: 1em; + margin-bottom: 0.5em; + display: block; +} +#page-nav { + zoom: 1; + margin: 50px auto; + background: #fff; + -webkit-box-shadow: 1px 2px 3px #ddd; + box-shadow: 1px 2px 3px #ddd; + border: 1px solid #ddd; + -webkit-border-radius: 3px; + border-radius: 3px; + text-align: center; + color: #999; + overflow: hidden; +} +#page-nav:before, +#page-nav:after { + content: ""; + display: table; +} +#page-nav:after { + clear: both; +} +#page-nav a, +#page-nav span { + padding: 10px 20px; +} +#page-nav a { + color: #999; + text-decoration: none; +} +#page-nav a:hover { + background: #999; + color: #fff; +} +#page-nav .prev { + float: left; +} +#page-nav .next { + float: right; +} +#page-nav .page-number { + display: inline-block; +} +@media screen and (max-width: 479px) { + #page-nav .page-number { + display: none; + } +} +#page-nav .current { + color: #000; + font-weight: bold; +} +#page-nav .space { + color: #ddd; +} +#footer { + background: #262a30; + padding: 50px 0; + border-top: 1px solid #ddd; + color: #999; +} +#footer a { + color: #e32d40; + text-decoration: none; +} +#footer a:hover { + text-decoration: underline; +} +#footer-info { + line-height: 1.6em; + font-size: 0.85em; +} +.article-entry pre, +.article-entry .highlight { + background: #272822; + margin: 0 -20px; + padding: 15px 20px; + border-style: solid; + border-color: #ddd; + border-width: 1px 0; + overflow: auto; + color: #f8f8f2; + line-height: 22.400000000000002px; +} +.article-entry .highlight .gutter pre, +.article-entry .gist .gist-file .gist-data .line-numbers { + color: #666; + font-size: 0.85em; +} +.article-entry pre, +.article-entry code { + font-family: "Source Code Pro", Consolas, Monaco, Menlo, Consolas, monospace; +} +.article-entry code { + background: #f0f0f0; + text-shadow: 0 1px #fff; + font-size: 0.85em; + padding: 0 0.3em; + border: 1px solid #dcdcdc; + -webkit-border-radius: 3px; + border-radius: 3px; +} +.article-entry pre code { + background: none; + text-shadow: none; + padding: 0; + border: none; +} +.article-entry .highlight pre { + border: none; + margin: 0; + padding: 0; +} +.article-entry .highlight table { + margin: 0; + width: auto; +} +.article-entry .highlight td { + border: none; + padding: 0; +} +.article-entry .highlight figcaption { + zoom: 1; + font-size: 0.85em; + color: #75715e; + line-height: 1em; + margin-bottom: 1em; +} +.article-entry .highlight figcaption:before, +.article-entry .highlight figcaption:after { + content: ""; + display: table; +} +.article-entry .highlight figcaption:after { + clear: both; +} +.article-entry .highlight figcaption a { + float: right; +} +.article-entry .highlight .gutter pre { + text-align: right; + padding-right: 20px; +} +.article-entry .highlight .line { + height: 22.400000000000002px; +} +.article-entry .gist { + margin: 0 -20px; + border-style: solid; + border-color: #ddd; + border-width: 1px 0; + background: #272822; + padding: 15px 20px 15px 0; +} +.article-entry .gist .gist-file { + border: none; + font-family: "Source Code Pro", Consolas, Monaco, Menlo, Consolas, monospace; + margin: 0; +} +.article-entry .gist .gist-file .gist-data { + background: none; + border: none; +} +.article-entry .gist .gist-file .gist-data .line-numbers { + background: none; + border: none; + padding: 0 20px 0 0; +} +.article-entry .gist .gist-file .gist-data .line-data { + padding: 0 !important; +} +.article-entry .gist .gist-file .highlight { + margin: 0; + padding: 0; + border: none; +} +.article-entry .gist .gist-file .gist-meta { + background: #272822; + color: #75715e; + font: 0.85em "寰蒋闆呴粦", "Microsoft Yahei", "Droid Sans", Helvetica Neue, Helvetica, Arial, sans-serif; + text-shadow: 0 0; + padding: 0; + margin-top: 1em; + margin-left: 20px; +} +.article-entry .gist .gist-file .gist-meta a { + color: #e32d40; + font-weight: normal; +} +.article-entry .gist .gist-file .gist-meta a:hover { + text-decoration: underline; +} +pre .comment, +pre .preprocessor { + color: #75715e; +} +pre .tag { + color: #f8f8f2; +} +pre .title, +pre .variable, +pre .regexp, +pre .ruby .constant, +pre .xml .tag .title, +pre .xml .pi, +pre .xml .doctype, +pre .html .doctype, +pre .css .id, +pre .css .class, +pre .css .pseudo { + color: #f92672; +} +pre .number, +pre .built_in, +pre .literal, +pre .constant { + color: #ae81ff; +} +pre .params { + color: #fd971f; +} +pre .class, +pre .ruby .class .title, +pre .css .rules .attribute, +pre .attribute { + color: #a6e22e; +} +pre .string, +pre .value, +pre .inheritance, +pre .header, +pre .ruby .symbol, +pre .xml .cdata { + color: #e6db74; +} +pre .css .hexcolor { + color: #a1efe4; +} +pre .function, +pre .python .decorator, +pre .python .title, +pre .ruby .function .title, +pre .ruby .title .keyword, +pre .perl .sub, +pre .javascript .title, +pre .coffeescript .title { + color: #66d9ef; +} +pre .keyword, +pre .javascript .function { + color: #66d9ef; +} +@media screen and (max-width: 479px) { + #mobile-nav { + position: absolute; + top: 0; + left: 0; + width: 280px; + height: 100%; + background: #191919; + border-right: 1px solid #fff; + } +} +@media screen and (max-width: 479px) { + .mobile-nav-link { + display: block; + color: #999; + text-decoration: none; + padding: 15px 20px; + font-weight: bold; + } + .mobile-nav-link:hover { + color: #fff; + } +} +@media screen and (min-width: 768px) { + #sidebar { + display: inline; + float: left; + width: 23.3333333333333%; + margin: 0 0.8333333333333%; + } +} +.widget-wrap { + margin: 50px 0; +} +.widget { + color: #777; + text-shadow: 0 1px #fff; + background: #fff; + -webkit-box-shadow: 1px 2px 3px #ddd; + box-shadow: 1px 2px 3px #ddd; + padding: 15px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +.widget a { + color: #999; + text-decoration: none; +} +.widget a:hover { + text-decoration: underline; + color: #e32d40; +} +.widget ul ul, +.widget ol ul, +.widget dl ul, +.widget ul ol, +.widget ol ol, +.widget dl ol, +.widget ul dl, +.widget ol dl, +.widget dl dl { + margin-left: 15px; + list-style: disc; +} +.widget { + line-height: 1.6em; + word-wrap: break-word; + font-size: 0.9em; +} +.widget ul, +.widget ol { + list-style: none; + margin: 0; +} +.widget ul ul, +.widget ol ul, +.widget ul ol, +.widget ol ol { + margin: 0 20px; +} +.widget ul ul, +.widget ol ul { + list-style: disc; +} +.widget ul ol, +.widget ol ol { + list-style: decimal; +} +.category-list-count, +.tag-list-count, +.archive-list-count { + padding-left: 5px; + color: #999; + font-size: 0.85em; +} +.category-list-count:before, +.tag-list-count:before, +.archive-list-count:before { + content: "("; +} +.category-list-count:after, +.tag-list-count:after, +.archive-list-count:after { + content: ")"; +} +.tagcloud a { + margin-right: 5px; +} \ No newline at end of file diff --git a/4_blog/templates/base.html b/4_blog/templates/base.html new file mode 100644 index 0000000..191f52b --- /dev/null +++ b/4_blog/templates/base.html @@ -0,0 +1,57 @@ + + + + + + + {% block title %}{% endblock %} + + + + + {% block headerjs %} + + {% endblock %} + + +
+
+ {% include 'header.html' %} + +
+ {% block left %} + + {% endblock %} + + {% include 'right.html' %} + +
+ + {% include 'footer.html' %} + +
+
+ + + + \ No newline at end of file diff --git a/4_blog/templates/footer.html b/4_blog/templates/footer.html new file mode 100644 index 0000000..6cb7efd --- /dev/null +++ b/4_blog/templates/footer.html @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/4_blog/templates/header.html b/4_blog/templates/header.html new file mode 100644 index 0000000..84de0fe --- /dev/null +++ b/4_blog/templates/header.html @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/4_blog/templates/right.html b/4_blog/templates/right.html new file mode 100644 index 0000000..0290aeb --- /dev/null +++ b/4_blog/templates/right.html @@ -0,0 +1,109 @@ + \ No newline at end of file