안녕하세요 한헌종입니다.
오늘은 지난 시간에 이어서 웹페이지를 좀 더 이쁘게 만드는 작업을 해볼겁니다.

저는 디자인과 거리가 먼 사람이라 이쁘게 CSS 를 구성하는 방법은 잘 모릅니다.
그럼 어떻게 이쁜 웹사이트를 만들 수 있을까요? 바로 CSS framework 를 사용하는 겁니다.
CSS framework 는 누군가가 만들어둔 디자인을 편하게 쓸 수 있도록 만들어져 있는 템플릿이에요.
이걸 쓰면 직접 CSS 를 작성할 필요가 없어요.
오늘은 CSS framework 중에서 bootstrap 이라는 것을 사용해 볼 겁니다.


1. bootstrap 사용하기

bootstrap 은 무료로 제공되는 css template 입니다.
bootstrap 을 사용하는 방법은 두 가지에요.
하나는 css 파일을 직접 받아서 사용하는 것,
다른 하나는 CDN 이라는 것을 이용하는 거에요.

CDN (content delivery network) 은 저도 잘 모르지만, 설명을 보니 지역 서버를 통해 웹 페이지와 컨텐츠를 빠르게 제공할 수 있는 네트워크 시스템이라고 하네요.
“A Content Delivery Network (CDN) is a system of geographically distributed servers that work together to provide fast delivery of Internet content.”
즉 bootstrap framework 를 웹 서버에서 제공하는 것이 아니라, CDN 을 사용해 해당 지역에 가까운 네트워크를 통해 제공하는 거에요.
이렇게 하면 먼 지역에서도 빠르게 bootstrap 으로 된 페이지를 볼 수 있게 되는 거겠죠.

사용법은 다음과 같습니다. (다음 링크에 더 자세한 설명이 나와있습니다: 링크)

base.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
    <!-- some title -->
  </head>
  <body>
    <!-- some contents -->
  </body>
</html>

간단하죠?
이렇게 컴퓨터에 직접 bootstrap 을 설치하지 않아도, 위와 같이 head 부분에 있는 네 줄을 넣게 되면 해당 html 에 bootstrap 을 적용할 수 있게 됩니다.

2. 어떤 디자인이 가능한가?

bootstrap 에서는 여러 디자인을 제공해줍니다.
사용자는 이 중에서 자기에게 맞는 디자인을 고르고 싶을 거에요.
여러분은 각 요소마다 bootstrap 에서 제공하는 디자인 중 하나를 고르시면 됩니다.
다음 링크를 참조해보세요: 링크

저는 이 중에 bootstrap theme 이라는 프레임워크를 사용해볼게요. (기본 디자인 + 추가 디자인 입니다.)

3. 실제 사용 예시

그럼 지난번 포스트에서 만들었던 두 페이지짜리 웹사이트를 bootstrap 으로 다듬어볼게요.
코드는 다음과 같습니다.

base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css">
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
    <nav class="navbar navbar-inverse">
        <div class="container">
            <div class="navbar-header">
                <a class="navbar-brand" href="{{ url_for('index_func') }}">MyApp</a>
            </div>
            <div id="navbar" class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="{{ url_for('some_func') }}">Some page</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
    {% block content %}
    {% endblock %}
</body>
</html>

index.html

{% extends "base.html" %}
{% block content %}
<div class="container">
    <div class="jumbotron">
        <h2>This is home page. Hello world!</h2>
        <hr>
        <p>Nothing implemented yet.</p>
    </div>
</div>
{% endblock %}

somepage.html

{% extends "base.html" %}
{% block content %}
<div class="container">
    <div class="jumbotron">
        <h2>This is a calculator!</h2>
        <hr>
        <p>Type 2 numbers and click a button!</p>
        <form class="form-inline" action="" method="POST">
            <input class="form-control" type="text" name="number1">
            <input class="form-control" type="text" name="number2">
            <div class="btn-group" role="group">
                <button class="btn btn-primary" type="submit" name="button" value="add">Add</button>
                <button class="btn btn-success" type="submit" name="button" value="sub">Sub</button>
                <button class="btn btn-info" type="submit" name="button" value="mul">Mul</button>
                <button class="btn btn-warning" type="submit" name="button" value="div">Div</button>
            </div>
        </form>
    </div>
    {% if result %}
    <div class="alert alert-info">result: {{ result }}</div>
    {% endif %}
</div>
{% endblock %}

이 외에 route.py 이나 __init__.py 는 바꾸지 않았습니다.
그러면 디자인이 어떻게 바뀌었는지 확인해볼까요?

-
변경 전/후의 홈페이지
-
변경 전/후의 계산 페이지
-
변경 전/후의 계산 결과

이전 포스트와 비교해보면, 코드 자체는 그리 길어지지 않았습니다.
그런데 모양은 굉장히 많이 바뀌었죠? 이제야 좀 봐줄만한 웹사이트가 된 것 같습니다.

코드에서 한 것은 다른 게 아니라, 바로 div 이나 button 등의 “class” 를 지정해준 겁니다.
bootstrap 사이트에서 제공해주는 여러 class 가 있는데, 이 모양들을 확인해보고 마음에 드는 디자인을 택하는 거에요.
예를 들어, 저는 버튼 네 개를 div class=”btn-group” 이라는 것으로 지정해줬고,
각 버튼도 button class=”btn btn-primary” 와 같은 클래스로 지정해줬어요.
그럼 bootstrap css 에서 해당 클래스에 지정되어 있는 디자인이 적용되는거죠.
세부적인 디자인을 어떻게 적용할 수 있는지는 다음 링크에 자세히 나타나 있습니다: 링크


오늘은 간단하게 bootstrap 이라는 것을 어떻게 적용할 수 있는지 알아봤습니다.
매우 적은 노력으로 훨씬 이쁜 사이트를 만들 수 있다는게 정말 매력적입니다.
bootstrap 사이트에서는 직접 custromize 하는 것을 추천한다고 해요.
좀 더 자기만의 디자인을 넣어보고 싶으시다면, 직접 css 를 받아서 수정해보는 것도 좋은 방법일 것 같습니다.

그럼 다음 시간에 만나요!