selectHome.html
에 profile 영역 추가 + Controller에서 user, home 정보 전달 코드 추가createPostForm.html
, updatePostForm.html
css 완성position:absolute; bottom:0;
등을 이용해 아래로 내릴 수도 있지만 3차원 속성이 되는 만큼 경우에 따라 메인 콘텐츠를 가리기 쉽다.height:100%;
: main의 height를 100%으로 할 경우 main 내용이 짧아 스크롤이 필요없는 경우에도 footer 길이로 인해 불필요한 스크롤이 생성된다.검색해보니 많은 사람들이 고민하는 주제같은데 html의 계층구조, position 등 상황에 따라 각자 다른 방식으로 구현하고 있었다. 나는 thymeleaf template layout
을 사용하면서 content 부분과 footer 부분이 나누어져 있어서 더욱 헷갈렸다. 그래서 결국 나도 나만의 방법을 찾았다.
height: calc()
사용하기default-layout.html
구조<html>
<body>
<div id="wrapper">
<div id="content-wrapper">
<th:block th:replace="/fragments/header :: headerFragment"></th:block>
<main>
<th:block layout:fragment="content"></th:block>
</main>
</div>
<th:block th:replace="/fragments/footer :: footerFragment"></th:block>
</div>
</body>
</html>
브라우저에서의 실제 html 구조
css
html, body {
width: 100%;
height: 100%;
}
#wrapper {
position: relative;
height: 100%;
}
#content-wrapper {
position: relative;
height: auto;
min-height: calc(100% - 14em);
}
#main-footer {
position: relative;
width: 100%;
height: 14em;
padding: 2em 0;
}
wrapper-content
영역과 footer
영역으로 나눈 후, wrapper-content
영역의 min-height
를 calc(100% - footer 높이)
로 설정하는 것이다. 즉 main콘텐츠 영역인 wrapper-content
는 최소 전체 화면에서 footer 높이만큼 뺀 높이를 가지게 된다.height:auto;
로 내용에 맞게 늘어나게 하고 content영역과 footer를 아우르는 부모 태그들은 height:100%;
로 맞춰준다.100%-footer 높이
로 해두었기 때문에 화면 가득 차고 스크롤 없이 남은 공간에 footer가 들어오게 된다.commentService
의 문제가 해결되어 다시 dummyData를 수정했다.getUser()
, getHome()
을 생성해 더미 유저, 홈 정보를 selectHome
페이지에 전달하도록 수정하였다.post(게시물)
, comment(댓글)
, replyComment(대댓글)
, attach(첨부파일정보)
가 있다.replyComment(대댓글)
을 제외한 나머지는 기존 데이터가 없으면 생성하는데, 대댓글의 경우 반드시 기존 댓글이 있어야 생성할 수 있다.form action
등을 그대로 사용하는데, 마침 댓글과 게시물의 id가 동일하기 때문에 에러 없이 작동했던 것이다.ajax
로 구현할 예정이기 때문에 버튼을 단순한 a태그로 변경만 해 두었다.