728x90
728x90

  jQuary 적용하기  

- 각 스킬들의 게이지 크기를 각각 적용 시키기 위해 Jquery를 사용하기로 했습니다.

- jQuary 를 설치하는 방법은 js파일을 다운로드하여 웹 디렉토리안에 저장하거나 CDN 방법이 있습니다.

- 저는 다운로드하여 디렉토리에 저장한 후 사용하기로 했습니다.

- jQuary는 아래의 링크를 통해 접속하면 받을 수 있습니다.

jquery.com/

 

jQuery

What is jQuery? jQuery is a fast, small, and feature-rich JavaScript library. It makes things like HTML document traversal and manipulation, event handling, animation, and Ajax much simpler with an easy-to-use API that works across a multitude of browsers.

jquery.com

- 다운로드 받은 파일을 static > js 디렉토리안에 넣어 줍니다.

- <head> 태그 안에 아래의 명령어로 js 파일을 적용 시킵니다.

<script src='../static/js/jquery-3.5.1.min.js'></script>

  jQuary 적용 확인   

- static > js 디렉토리에 common.js 파일을 생성해서 간단한 예제코드로 잘 적용 되었는지 확인해 보겠습니다.

- common.js를 index.html에 불러 옵니다.

{% extends 'layout.html' %}
{% block content %}
<script src='../static/js/common.js'></script>
<div id='maintext'>Welcome to My PortFolio</div>
<div id="mainsubtext">
    <p>Breath</p>
    <p>- Everything will be made by me.</p>
</div>
<div id='mainimg'>
    <img src="../static/img/main/main_img.jpg" alt="MainImage">
</div>
{% endblock %}

- common.js 파일 안에 아래의 명령어를 입력해 index페이지에 접속시 알림창이 나오도록 합니다.

$(document).ready(function(){
    alert("Hello World");
})

- index페이지에 접속 합니다.

- 알림창이 나온 것 을 확인 할 수 있습니다.

- 이제 jQuary를 이용해서 프로그레스 바를 완성 시켜 보겠습니다.

 

  프로그레스바 - 게이지 - jQuery 코드 작성  

  게이지 크기 지정  

- 모든 스킬들의 프로그레스바 게이지들을 span태그로 만들어지고 class = "gauge" 로 정의 되어 있습니다.

- span.gauge 의 속성 per의 값은 게이지의 크기값을 가지고 있습니다.

<span class="gauge"  per="95">
</span>

- about.html 의 스킬들의 per값을 각각 지정해 줍니다.

- jQuery 선택자로 gauge 를 선택 합니다.

- 이때 모든 span.gauge에 css를 적용하기 위해서 each() 함수를 사용하고 이 안에 funtion(){} 을 사용합니다.

- 각각의 span.gauge를 선택 하기 위해서 $(this)를 사용합니다.

- $(this)로 선택된 태그의 속성 per의 값을 가져옵니다.

- 속성값을 변수에 저장하고 css()를 사용해서 width 값을 지정해줍니다.

$(document).ready(function () {
    $('.gauge').each(function () {
        var $this = $(this);
        var per = $this.attr('per');
        $this.css('width', per + "%");
    });
});

- 이제 확인해 보겠습니다.

- 각 속성값에 맞게 들어 크기가 변했습니다.

- 이제 animation / 애니메이션을 적용 시켜 보겠습니다.

  jQuery 애니메이션(Animation) 적용  

- about 페이지 접속시 게이지가 정해놓은 퍼센트 만큼 차츰 커지는 애니메이션을 적용시키려고 합니다.

- 먼저 게이지의 시작점을 잡아주기 위해 css 파일에 지정해놓은 span.gauge의 width 값을 10%로 변경합니다.

#myskills > .skill > .progressbar > .gauge {
    display: inline-block;
    width:10%;
    height: 21px;
    background-color: #3abff7;
    border-radius: 10px;
    transition: 1s linear;
}

- common.js 에서 css()부분을 삭제하고 animation()을 사용하겠습니다.

- $this를 사용하여 태그들을 선택하고 각 태그들의 per 속성값을 width값으로 지정해서 animation을 적용합니다.

$(document).ready(function () {
    $('.gauge').each(function () {
        var $this = $(this);
        var per = $this.attr('per');
        $this.animate({
            width: per + "%"
        });
    });
});

- 잘 적용 되었는지 확인해 보겠습니다.

- gif 파일이라 조금 끊겨 보이지만 웹에서는 잘 작동 하고 있습니다.

- about 페이지가 완겅 되었습니다.

- 다음포스팅부터 Portfolio 페이지를 진행해 보겠습니다.

728x90
728x90

  프로그레스바 progress bar  

- 프로젝트의 진행 정도나 내 스킬 숙련도를 나타내기 위한 방법으로 프로그레스바 progress bar를 넣어주려고 합니다.

 

  span 태그 추가  

- 프로그레스 바를 만들기 위해 span.progressbar태그와 추가적으로 이 태그 안에 span.guage 태그를 만들어 줍니다.

        <span class="progressbar">
            <span class="gauge">
                gauge
            </span>
        </span>

 

  css 스타일 추가  

- css 에서 값을 지정해 주겠습니다.

- span.gauge의 속성은 display를 inline-block 으로 만들고 width 값을 숙련도에 맞게 줍니다. Python 에는 95%를 주었습니다.

- 높이 값은 span.progressbar의 높이와 똑같이 줍니다.

- background-color #3abff7 색상 코드를 입력해 줍니다.

- 게이지의 크디가 잘 보이기 위해 span.progressbar 의 백그라운드 색상코드 값으로 #d6d3d3을 주고 border값을 삭제 하겠습니다.

 

#myskills > .skill > .progressbar {
    display: inline-block;
    width: 520px;
    height: 21px;
    background-color: #d6d3d3;
}

#myskills > .skill > .progressbar > .gauge {
    display: inline-block;
    width: 95%;
    height: 21px;
    background-color: #3abff7;
}

 

- span 의 모양이 사각형입니다.

- 모서리 부분을 둥글게 만들어 줘야 합니다.

- span.progreebar 와 span.gauge 에 border-radius 값으로 10px;을 지정해 주겠습니다.

#myskills > .skill > .progressbar {
    display: inline-block;
    width: 520px;
    height: 21px;
    border: 3px solid blue;
    border-radius: 10px;
}

#myskills > .skill > .progressbar > .gauge {
    display: inline-block;
    width: 95%;
    height: 21px;
    background-color: #3abff7;
    border-radius: 10px;
}

- 이제 각 스킬들이 들어 가는 부분에 span.gauge들을 추가해 주겠습니다.

- 모두 잘 적용 되었습니다.

- 그런데 각 수치 마다 게이지의 크기가 달라져야 합니다.

- css nth-child 나 선택자를 통해서 정해 줄 수 있지만, 코드가 너무 길어 질거 같습니다.

- JavaScipt 를 통해서 지정해 주면 좋을것 같습니다.

- 이부분은 다음 포스팅에서 구현해 보도록 하고,  css animation 효과를 적용 시켜보겠습니다.

 

728x90
728x90

  이미지 / 텍스트 추가  

- 이번 포스팅에서는 저번 포스팅에서 추가 한 about 페이지에 추가한 div 태그들안에 컨텐츠들을 채워넣어보겠습니다.

- 이미지 추가는 img 태그를 사용하고, 텍스트는 span 또는 p 태그를 이용해 보겠습니다.

- 아래의 단계에 따라 진행해 보겠습니다.

 

  단계  

1. about 페이지 - aboutimg 추가 

2. myname 텍스트 추가

3. moto 텍스트 추가

4. introduce 텍스트 추가

5. myskills 텍스트 추가

 

  1. about 페이지 - aboutimg 추가  

- about 페이지에 이미지를 추가해 보겠습니다.

- 사용할 이미지는 아래의 이미지입니다.

- 먼저 div #aboutimg 안에 img 태그를 추가하고, 이미지 경로를 지정해 줍니다.

- 이미지 경로는 static -> img -> about 디렉토리 안에 있습니다.

- 대체 문자로는 'aboutimg'를 입력해 주겠습니다.

<div id="aboutimg">aboutimg
    <img src="../static/img/about/Aboutimg.jpg" alt="aboutimg">
</div>

- 범위를 벗어 났네요.

- css 에서 자식 선택자로 img 를 선택한 후 max_width 를 100%로 지정해 줍니다.

#aboutimg > img {
    max-width: 100%;
}

- 잘 들어 갔네요!!

 

  2. myname 텍스트 추가  

- 이제 이미지 아래에 이름을 넣어줘야합니다.

- div #myname 태그 안에 span 태그를 추가하고 텍스트로 'Hun Chang Cho'를 입려합니다.

<div id="myname">
    <span>Hun Chang Cho</span>    
</div>

- 이제 span을 선택해서 css를 적용시킵니다.

- 우선, 폰트 크기와 스타일을 확인합니다.

- 폰트 사이트는 30px, 스타일은 Medium 입니다.

- Medium의 font-weight 값은 500 입니다.

#myname > span {
    font-size: 30px;
    font-weight: 500;
}

  3. moto 텍스트 추가  

- moto부분은 어떻게 구성되어있는지 확인해 보겠습니다.

- 총 6개의 단어가 들어가 있고, 폰트사이즈는 모두 똑같지만 왼쪽과 오른쪽 단어들의 스타일이 다릅니다.

- 왼쪽 오른쪽으로 그룹핑을 하거나 , 가로의 2단어들을 그룹핑 할 수 있습니다.

- 스타일이 다르게 지정되는 것을 생각하면 왼쪽 오른쪽으로 그룹핑을 하는게 좋아보입니다.

- 왼쪽 오른쪽 그룹핑을 하면 2개의 태그만 추가해서 사용할 수 있을 것 같지만, 저는 각 단어들을 span 태그로 감싼후 왼쪽 단어들의 class 를 .moto-left-text / 오른쪽 단어들의 class를 .moto-right-text로 지정해 주어 div #moto안에 태그들을 추가한 후 텍스트를 입력하겠습니다.

 

<div id="moto">
    <span class="moto-left-text">
        Ingenious
    </span>
    <span class="moto-right-text">
        Creativity
    </span>
    <span class="moto-left-text">
        Fast
    </span>
    <span class="moto-right-text">
        Adaptability
    </span>
    <span class="moto-left-text">
        Future
    </span>
    <span class="moto-right-text">
        Possibilities
    </span>
</div>

-이제 각 텍스트들의 css를 적용시켜 주겠습니다.

- 먼저 div #moto에 폰트 사이즈 값을 주어서 모든 span 텍스트들에게 적용시킵니다.

- 폰트 사이즈는 50px입니다.

#moto {
    position: absolute;
    top: 150px;
    left: 730px;
    width: 600px;
    height: 205px;
    font-size: 50px;
    border: 2px solid red;
}

- 이제 스타일을 지정해 줍니다.

- 왼쪽 텍스트 그룹은 Regular입니다. 따로 수정할 필요가 없습니다.

- 오른쪽 텍스트 그룹은 Bold 입니다. Bold의 font-weight 값은 700입니다.

- 자식 선택자로 .moto-right-text 를 선택해 값을 적용합니다.

#moto > .moto-right-text {
    font-weight: 700
}

- 잘 적용 되었네요. 

- 이제 span에 width 값들을 주어 각 텍스트들을 위치 시킵니다.

- 우선 span에 border값을 줘서 확인해 보겠습니다.

- 각 span의 크기를 얼마를 지정해야 할지 확인해 봅니다.

- 왼쪽 텍스트 그룹의 크기가 280px입니다. 

- div #moto 의 가로의 크기가 600px이므로 오른쪽 텍스트 그룹의 크기는 600px -280px = 320px입니다.

- div #moto 안에 위의 이미지 처럼 정렬하기 위해 각 그룹의 크기를 10px만큼 감소시킨 270px / 310px 로 지정합니다.

- span 에 가로와 높이 값을 주기위해 display 값을 inline-block로 지정합니다.

 

#moto > .moto-left-text {
    display: inline-block;
    width: 270px;
    border: 2px solid blue;    
}
#moto > .moto-right-text {
    display: inline-block;
    font-weight: 700;
    width: 310px;
    border: 2px solid blue; 
}

 

- 각 텍스트들의 상하 간격을 주어야 합니다.

- 가운데 Fast 와 Adaptability에만 상하 margin 값을 top과 bottom 에 주면 됩니다.

- Fast 와 Adaptability span 태그에 margin class를 추가 합니다.

	<span class="moto-left-text margin">
        Fast
    </span>
    <span class="moto-right-text margin">
        Adaptability
    </span>

- css에서 자식 선택자로 margin 클래스를 선택해 margin 값을 top 과 bottom 에 각각 25px을 지정합니다.

#moto > .margin{
    margin-top:25px;
    margin-bottom:25px;
}

- 간격이 알맞게 들어 갔네요.

 

  4. introduce 텍스트 추가  

- introduce는 저에 대한 간단한 소개가 들어 갑니다.

 

- 소개 제목 부분과 소개 내용이 들어 갑니다.

- div #introduce 안에 소개 제목 텍스트가 들어갈 span 태그와 소개내용이 들어갈 p태그를 추가하고, 텍스트를 입력해 주겠습니다.

<div id="introduce">
    <span>Still Growing</span>
    <p>-My name is Hun Chang Cho, who dreams of becoming a full-stack developer and is growing.
        I am working on projects related to Python and ML / DL, and I am also working on projects and learning related to Web.</p>
</div>

- 소개 제목 부분의 폰트 사이즈와 스타일을 확인해 css에 적용합니다.

- 폰트 사이즈는 30px / 스타일은 Bold , font-weight 700 입니다.

#introduce > span{
    font-size: 30px;
    font-weight: 700;    
}

- 소개 내용 부분의 폰트 사이즈와 스타일을 확인해 css에 적용합니다.

- 폰트 사이즈는 20px / 스타일은 Regular 입니다.

#introduce > p{
    font-size: 20px;
}

- 소개 내용 부분의 글자들의 간격이 너무 좁아 보입니다. 

- letter-spacing 값으로 1px을 지정합니다.

- line-height 값으로 35px을 지정합니다.

#introduce > p {
    font-size: 20px;
    letter-spacing: 1px;
    line-height: 35px;
}

- 다음으로는 소개 제목과 소개내용에 간격을 줍니다.

#introduce > p {
    font-size: 20px;
    letter-spacing: 1px;
    line-height: 35px;
    margin-top: 50px;
}

  5. myskills 텍스트 추가  

- 마지막으로 myskills 부분에 텍스트를 추가해 보겠습니다.

- My Skills 라는 제목과 각 skill에 해당하는 텍스트들 그리고 숙련정도를 나타내는 텍스트가 있습니다.

- 그리고 프로그레그바는 div태그를 이용해서 만들어 보겠습니다.

- 추가해야할 태그는 제목이 들어가는 span .title 태그 / skill 이름이 들어가는 span .skillname 태그 / 숙련정도가 들어가는 span .skillper 태그 / 프로그레스바를 만들 span.progressbar 태그 입니다. 

- span.skillname / span.skillper / span.progressbar 태그들을 div .skill 태그로 감싸주겠습니다.

- 위 태그들을 div #myskills 태그 안에 추가 하고 텍스트들을 입력합니다.

- 스킬종류가 6개이므로 div .skill이 6개 필요합니다.

- 우선은 , 1개추가해 스타일까지 지정하고 나머지를 추가하겠습니다.

 

<div id="myskills">
    <span class="title">My Skills</span>
    <div class="skill">
        <span class="skillname">Python</span>
        <span class="progressbar">progressbar</span>
        <span class="skillper">skillper</span>
    </div>
</div>

- 제목 부분부터 css를 적용 스켜 줍니다.

- 폰트 사이즈는 30px / 스타일은 Medium font-weight 값은 500 입니다.

- span display값을 inline-block으로 바꿔 줍니다.

- span.title이 span.title 하단에 40px만큼 간격을 가지고 떨어져 있습니다.

- span.title에 margin-bottom 값을 지정해 줍니다.

#myskills > .title{
    display: inline-block;
    font-size: 30px;
    font-weight: 500;
    margin-bottom: 40px;
    border:3px solid blue;
}

 

 

- 간격을 span.title margin 을 통해서 지정한 이유는 div.skill은 여러개를 추가해 반복적으로 사용됩니다. 이 태그에 margin값을 주게되면 모두 적용 되므로 편리함을 위해 span.title에 지정해 주었습니다.

- 다음으로는 div .skill 태그의 크기와 위치를 지정해 줍니다.

- 가로 크기는 div. myskills 크기와 동일한 600px입니다.

 

#myskills > .skill{
    width: 600px;
    border:3px solid blue;
}

- span.skillname의 폰트크기를 지정해주고 display 를 inline-block으로 만들어 줍니다.

- 폰트 사이즈는 20px / 스타일은 Medium 입니다.

- span.skillname 하단으로 span.progressbar 와 span.skillper가 10px 간격으로 위치합니다.

- margin-bottom 10px값을 적용합니다.

- 가로 크기를 300px 만큼 지정해 줍니다.

 

#myskills > .skill > .skillname{
    display: inline-block;
    width: 300px;
    font-size: 20px;
    font-weight: 500;
    margin-bottom:10px;
    border:3px solid blue;
}

- span.progressbar의 크기와 위치를 지정해 주겠습니다.

- 크기는 가로 520px , 높이 21px 로 지정해 줍니다.

 

#myskills > .skill > .progressbar {
    display: inline-block;
    width: 520px;
    height: 21px;
    border: 3px solid blue;
}

- span.skillper 의 폰트 사이즈와 크기를 지정해 주겠습니다.

- 우선 display inline block으로 지정하고, font-size 15px / 스타일은 Thin font-weight 100 입니다.

- 크기는 가로 60px 높이 21px 로 지정해 주겠습니다.

- text-align 으로 텍스트를 center로 정렬합니다.

#myskills > .skill > .skillper {
    display: inline-block;
    width: 60px;
    height: 21px;
    text-align: center;
    font-size: 15px;
    font-weight: 100;
    border: 3px solid blue;
}

 

 

- 어느정도 위치가 잡힌것 같습니다.

- 이제 div.skill을 5개 추가해 줍니다.

- 그리고 span.skillname 과 span.skillper 텍스트를 수정해 주겠습니다.

<div id="myskills">
    <span class="title">My Skills</span>
    <div class="skill">
        <span class="skillname">Python</span>
        <span class="progressbar">progressbar</span>
        <span class="skillper">95%</span>
    </div>
    
    <div class="skill">
        <span class="skillname">ML</span>
        <span class="progressbar">progressbar</span>
        <span class="skillper">80%</span>
    </div>
    
    <div class="skill">
        <span class="skillname">DL</span>
        <span class="progressbar">progressbar</span>
        <span class="skillper">70%</span>
    </div>
    
    <div class="skill">
        <span class="skillname">HTML</span>
        <span class="progressbar">progressbar</span>
        <span class="skillper">90%</span>
    </div>
    
    <div class="skill">
        <span class="skillname">CSS</span>
        <span class="progressbar">progressbar</span>
        <span class="skillper">80%</span>
    </div>
    
    <div class="skill">
        <span class="skillname">JavaScript</span>
        <span class="progressbar">progressbar</span>
        <span class="skillper">55%</span>
    </div>
</div>

- div.skill 들 마다 간격을 줍니다.

- margin-bottom을 추가해 값으로 10px을 지정합니다.

- 마지막 div.skill은 margin-bottom 값이 필요하지 않으므로 :nth-last-child()로 margin-bottom 값을 없애 줍니다.

#myskills > .skill {
    float: left;
    width: 600px;
    margin-bottom: 10px;
    border: 3px solid blue;
}
#myskills > .skill:nth-last-child(1){
    margin-bottom: 0;
}

- 마지막으로 span.progressbar를 제외하고 border를 삭제 후 확인해 보겠습니다.

- 잘 되었네요!!!

 

- 다음에는 progress bar를 만들고 animation을 적용 시켜 보겠습니다.

728x90
728x90

  웹 페이지   

- 웹사이트에서 초기 Home 화면과 메뉴에 있는 버튼이나 텍스트를 클릭하면 이동하여 나타나는 웹페이지들등 다양한 컨텐츠 들이 있습니다.

- 현재 제작하고 있는 포트폴리오 웹사이트의 경우 Home / About / Portfolio / Blog / Contact 카테고리가 있습니다.

- Blog는 hiio.tistory.com 블로그로 링크가 걸려 있습니다.

- 나머지 카테고리에 해당하는 웹페이지를 제작해 줘야합니다.

- 이번 포스팅에서는 About 페이지 제작을 시작해 보겠습니다.

 

  About 페이지 레이아웃 구성  

- About 페이지는 layout.html 을 상속받아 제작됩니다.

- main 태그 안에 about 페이지의 구성 내용들이 들어가게 됩니다.

- 먼저, About 페이지를 어떻게 구성할지 생각 해 보고 , 레이아웃을 구성해봅니다.

- 저는 아래의 이미지 처럼 구성할 계획입니다.

 

 

 

- 제 사진과 함께 좌우명 / 간단한 소개글 / 제 스킬에 대한 프로그레스 바가 들어 갑니다. 

- 각 컨텐츠들이 들어갈 태그들을 추가 하고 크기와 위치를 먼저 지정해 보겠습니다.

- 아래의 단계에 따라 진행해 보겠습니다.

 

  단계  

1. 태그 추가

2. 컨텐츠 크기와 위치 지정

3. aboutimg 크기와 위치

4. myname크기와 위치

5. moto크기와 위치

6. introduce크기와 위치

7. myskills크기와 위치

8. 문제 해결 - css값 수정

 

1. 태그 추가

- 어떤 태그와 선택자를 사용 해야할지 레이아웃 구성을 통해 확인해 보겠습니다.

1. 사진 이미지가 들어가는 img 태그 => div #aboutimg

2. 이름이 들어가는 div 태그 => div #myname

3. 좌우명이 들어가는 div 태그 => div #moto

4. 간단한 소개들이 들어가는 div 태그 => div #introduce

5. 내가 사용가능한 스킬 프로그레스 바 div 태그 => dic #myskill

 

- 이제 about.html 에 각 태그들을 추가해 줍니다.

{% extends 'layout.html' %}
{% block content %}
<div id="aboutimg">aboutimg</div>
<div id="myname">myname</div>
<div id="moto">moto</div>
<div id="introduce">introduce</div>
<div id="myskills">myskills</div>
{% endblock %}

  2. 컨텐츠 크기와 위치 지정  

- 앞선 포스팅에서 했던 방법과 같이 먼저 각 태그들의 css에 border 값을 주겠습니다.

/* about page*/

#aboutimg{
    border:2px solid red;
}
#myname{
    border:2px solid red;
}
#moto{
    border:2px solid red;
}
#introduce{
    border:2px solid red;
}
#myskills{
    border:2px solid red;
}

- 이제 aboutimg 부터 myskill 까지 크기와 위치를 지정해 주겠습니다.

- 그전에 각 태그들의 css position 속성값을 absolute로 지정해 주겠습니다.

#aboutimg{
    position : absolute;
    border:2px solid red;
}
#myname{
    position : absolute;
    border:2px solid red;
}
#moto{
    position : absolute;
    border:2px solid red;
}
#introduce{
    position : absolute;
    border:2px solid red;
}
#myskills{
    position : absolute;
    border:2px solid red;
}


  3. aboutimg 크기와 위치  

- aboutimg 크기와 위치를 먼저 지정해 주겠습니다.

- 레이아웃 구성 계획에서 어디에 위치하고 어느정도 크기를 가지고 있는지 확인해 보겠습니다.

 

- 위치는 top 150px / left 260px 에 위치해 있습니다.

- 위 값을 적용합니다.

 

#aboutimg {
    position: absolute;
    top: 150px;
    left: 260px;
    border: 2px solid red;
}

- 크기를 확인해 보겠습니다.

- 크기는 width 375px / height 500px 입니다.

- 위 값을 적용 시킵니다.

 

#aboutimg {
    position: absolute;
    top: 150px;
    left: 260px;
    width: 375px;
    height: 500px;
    border: 2px solid red;
}

  4. myname 크기와 위치  

- 위 방법과 마찬가지로 크기와 위치를 확인 후 css 값을 적용 시켜 보겠습니다.

위치

- 위치는 top 680px / left 260px 입니다.

- 크기는 width 380px / height 60px 입니다.

 

#myname {
    position: absolute;
    top:680px;
    left: 260px;
    width: 380px;
    height: 60px;
    border: 2px solid red;
}

  5. moto 크기와 위치  

- moto 크기와 위치를 확인합니다.

 

- 위치는 top 150px / left 730px 입니다.

- 크기는 width 600px / height 205px 입니다.

 

#moto {
    position: absolute;
    top: 150px;
    left: 730px;
    width: 600px;
    height: 205px;
    border: 2px solid red;
}

  6. introduce 크기와 위치  

- introduce 크기와 위치를 확인합니다.

]

- 위치는 top 440px / left 730px 입니다.

- 크기는 width 600px / height 210px 입니다.

#introduce {
    position: absolute;
    top: 440px;
    left:730px;
    width: 600px;
    height: 210px;
    border: 2px solid red;
}

 

  7. myskills 크기와 위치  

- myskills 크기와 위치를 확인합니다.

 

- 위치는 top 740px / left 730px 입니다.

- 크기는 width 600px / height 540px 입니다.

 

#myskills {
    position: absolute;
    top:740px;
    left:730px;
    width: 600px;
    height: 540px;
    border: 2px solid red;
}

 

- 각 컨테츠들을 모두 크기를 지정해 주고 위치 시켰습니다.

- 하지만 문제가 하나 생겼습니다.

- 무슨 문제 일까요?

- footer에 boreder 값을 주고 about 페이지를 다시 살펴보겠습니다.

- myskills 하단으로 footer가 오지 않고, myskills가 footer를 벗어나 버렸습니다.

- 왜 그럴까요?

- footer 는 main 하단으로 오게끔 지정되어 있습니다.

- main 의 높이는 850px로 고정해놨습니다.

- about 페이지에 필요한 높이가 850px을 넘어서 버려서 문제가 발생했습니다.

- 그럼 이 문제를 해결해야 겠습니다.

 

  8. 문제 해결 - css값 수정  

- 위 문제를 해결하기위해 main 의 높이 값을 900px로 고정 시키지 않고, 컨텐츠들의 값들에 따라 동적으로 높이가 지정되게 하면 좋을거 같습니다.

- height 값으로 아무런 값을 주지 않아 보겠습니다.

#main {
    margin: 0 auto;
    position: relative;
    width: 1440px;
}

- main에 높이 값이 없어 그 하단에 붙어 있는 footer가 header밑으로 와버렸습니다.

- 이 방법은 아닌것 같습니다.

- 이번에는 height 값으로 100%를 줘보겠습니다.

- height 값 100% 로 지정하기 위해서는 html 과 body height 값에 100% 지정되있어야 합니다.

html,body{
	height: 100%;
}


#main {
    margin : 0 auto;
    position: relative;
    width: 1440px;
    height: 100%;
}

-footer 부분이 밑으로 내려갔습니다.

- 다른 방법으로는 main안에 컨텐츠들을 감싸는 div 를 추가 하고 px로 높이를 고정시킨후 main의 높이 값으로 auto를 지정하는 방법이 있습니다.

- 다양한 방법들이 있지만, 제가 계획한 레이아웃에서는 footer부분이 크게 중요하지 않으므로 100%를 지정하는 방법을 사용하겠습니다.

- 추후 문제 발생시 수정 해 보겠습니다.

- 다음 포스팅에서는 각 태그들 안에 이미지와 텍스트들을 추가 해 보겠습니다.

728x90
728x90

  레이아웃 템플릿 상속 / 재사용  

- 현재 만들어진 모든 페이지들의 레이아웃은 공통된 코드 및 부분들이 많습니다.

- 이를 jinja2 템플릿 상속 기능을 사용해 공통된 부분은 상속받아 사용하고, 변화되는 부분만 수정하여 사용하겠습니다.

- jinja2 템플릿 상속 방법은 아래의 링크에 정리되어있습니다.

hiio.tistory.com/44

 

[Python] 5. Flask(플라스크) -jinja2 템플릿 엔진 / 템플릿 상속하기 / 재사용

jinja2 템플릿 상속 기능 - jinja의 가장 강력한 기능 중 하나는 상속 기능입니다. - php에서 include() 와 require() 함수와 비슷한 기능을 제공합니다. - 웹사이트를 제작하다보면 공통된 코드가 자주 사��

hiio.tistory.com

- 이 방법을 사용해 layout.html 파일을 만들어 각 페이지들에게 상속합니다.

 

  layout.html 파일 생성  

- 먼저 layout.html 파일을 생성하기 전에 어떤 부분이 공통된 부분인지, 어떤 곳을 오버라이딩 하면 될지 알아 보겠습니다.

- header / footer / main / main 안에 sidebar 는 공통된 부분입니다.

- maintext / mainimg 부분이 각 페이지 마다 변화되는 부분입니다.

- 이제 layout.html 파일을 생성하고 index.html 코드는 복사 하여 붙여 넣은 뒤 maintext 부터 mainimg까지 부분을 삭제하고 그 부분에 {% block content %}{% endblock %} 코드를 추가해 주겠습니다.

 

  layout.html  

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <link href="{{ url_for('static', filename='css/reset.css') }}" rel="stylesheet">
    <link href="{{ url_for('static', filename='css/style.css') }}" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap" rel="stylesheet">
    <title>hello</title>
</head>

<body>
    <header></header>
    <div id="main">
        <div id="sidebar">
            <nav>
                <ul id='sidebarul'>
                    <li>
                        <a href="/">Home</a>
                    </li>
                    <li>
                        <a href="/about">About</a>
                    </li>
                    <li>
                        <a href="/portfolio">Portfolio</a>
                    </li>
                    <li>
                        <a href="https://hiio.tistory.com">Blog</a>
                    </li>
                    <li>
                        <a href="/contact">Contact</a>
                    </li>

                </ul>

            </nav>
        </div>
        {% block content %}
        {% endblock %}

    </div>
    <footer></footer>
</body>

</html>

- index.html 코드를 수정합니다.

- {% extends 'layout.html'%}을 추가해 상속받습니다.

- {% block content %} 와 {% endblock %} 사이에 maintext 부터 mainimg 까지의 코드를 추가 하고 나머지 코드들을 삭제 합니다.

 

  index.html  

{% extends 'layout.html' %}
{% block content %}
<div id='maintext'>Welcome to My PortFolio</div>
<div id="mainsubtext">
    <p>Breath</p>
    <p>- Everything will be made by me.</p>
</div>
<div id='mainimg'>
    <img src="../static/img/main/main_img.jpg" alt="MainImage">
</div>
{% endblock %}

- 이제 웹사이트에 접속 해서 확인 해 보겠습니다.

- 잘 적용 되었습니다.!!!

- 이제 각 페이지도 똑같이 상속한 후에 {% block content %}{% endblock %} 사이를 우선은 비워두겠습니다.

{% extends 'layout.html' %}
{% block content %}

{% endblock %}

  Title 변수 선언 및 값 지정  

- 각 페이지들 마다 타이틀 이름이 다릅니다.

- 각 페이지들의 타이틀을 페이지 주소 이름으로 정하려고 합니다.

- 이전에 동적 라우팅을 통해서 페이지 주소를 pagename이라는 변수로 받아 왔습니다.

- 이를 템플릿 변수 사용을 통해서 <title> 태그안에 변수를 선언 후 서버에서 값을 넘겨 줍니다.

- 아래의 링크에 템플릿 변수 적용에 대해 간단히 정리 해 놨습니다.

- 이를 이용해서 각 페이지 별 타이틀을 지정해 보겠습니다.

hiio.tistory.com/45

 

[Python] 6. Flask(플라스크) - 템플릿 변수 사용 / 변수 값 적용

플라스크 변수 사용  - 플라스크 서버에서는 html에 변수를 만들어 서버 python에서 값을 넘겨 줄 수 있습니다. - 변수 사용에는 아래의 코드를 원하는 위치에 추가해 사용합니다. {{변수명}} - 변수�

hiio.tistory.com

- 먼저 layout.html에서 <head> 태그 -> <title> 태그에 {{ title }} 변수를 선언 합니다.

<head>
    <meta charset="UTF-8">
    <link href="{{ url_for('static', filename='css/reset.css') }}" rel="stylesheet">
    <link href="{{ url_for('static', filename='css/style.css') }}" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap" rel="stylesheet">
    <title>{{title}}</title>
</head>

- 서버 index() 함수에서 render_template() title변수 값으로 Home을 대입합니다.

- 서버에서 menu() 함수에서 title 변수를 선언하고 값으로 pagename을 대입합니다.

- render_template() title 변수 값으로 위에서 선언한 변수 title을 대입합니다.

@app.route("/")
def index():
    return render_template('index.html',title='Home')
    
@app.route("/<pagename>")
def menu(pagename):
    title = pagename
    return render_template(f'{pagename}.html',title=title)

- 웹사이트에 접속 해서 확인해 보겠습니다.

728x90
728x90
728x90

+ Recent posts