myPage 프로젝트에 BEM을 적용하고 리팩토링하는 과정을 기록한다.
문제점
제멋대로인 class와 id 값들때문에 코드의 가독성이 현저하게 떨어졌다.
해결방안
CSS를 직관적으로 네이밍해주는 BEM을 적용하여 코드의 가독성을 높였다.
<div class="container"> <div class="top"> <div class="left"> <a class="left__menu"> <a class="left__menu"> ... <div class="middle"> <a class="middle__a"> <a class="middle__a"> ... <div class="right"> <img class="right__icon--instagram"> <img class="right__icon--velog"> ... <div class="bottom">
문제점 2
- a 태그 속에 있는 값을 가져오기 위한 방법이 필요했다.
- 시도 1:
text()
이용
JQuery를 이용하면text()
라는 메소드로 a 태그 속 문자열을 가져오는 것이 가능했다. 하지만 나는 아직 JQuery를 사용하여 구현한 것이 아니므로 해당 메소드는 사용이 불가능했다.해결방안 2
innerText
라는 값을 통해 불러올 수 있었다.while(i < left__menus.length){ left__menus[i].innerText ...
문제점 3
<input type="file>"
을 꾸며줄 수 있는 방법이 필요했다.해결방안 3
<label>
태그로 감싸주고,<input>
을display: none
으로 설정.<label>
을 꾸밈으로써 해결- 하지만 어떤 파일이 올라갔는지 볼 수 없는 단점이 존재 -> JQuery 스크립트로 구현 가능하지만 여기서는 구현 X
//html <label class="middle__file">file <input type="file" name="file" accept="image/*"> </label> //css .middle__file:hover{ font-weight: 700; //hover시 커서를 pointer로 변경 cursor: pointer; }
문제점
main.js
에 너무 많은 코드들로 가독성이 현저히 떨어졌다해결방안
main.js
의 코드들을 각각db.js
,theme.js
,topic.js
로 분리함으로써main.js
의 가독성을 높였다. 그 과정에서 기존에 중복되던 코드를 제거하고 반복문을 통해 재사용성 또한 높였다.//main.js if(pathname === '/'){ if(folder === undefined){ topic.home(request, response); } else{ topic.page(request, response); } } else if(pathname === '/style'){ topic.style(request, response); } else if(pathname === '/create'){ topic.create(request, response); } else if(pathname === '/create_process'){ topic.create_process(request, response); } else if(pathname === '/update'){ topic.update(request, response); } else if(pathname === '/update_process'){ topic.update_process(request, response); } else if(pathname === '/delete_process'){ topic.delete_process(request, response); } else{ response.writeHead(404); response.end('Not Found'); } ... //db.js let mysql = require('mysql'); let db = mysql.createConnection({ host : '', user : '', password: '', database: '', charset : '' }); db.connect(); module.exports = db; //theme.js function theme(){ let theme = $(".middle__theme").getAttribute("value"); if(theme == 'wave'){ let newTheme = 'normal' createTheme(newTheme, '#d9d9d9', 'black'); } else{ let newTheme = 'wave' createTheme(newTheme, '#3b5998', '#d9d9d9'); } } ... //topic.js exports.home = function(request, response){ let _url = request.url; let queryData = url.parse(_url, true).query; let theme = queryData.theme; db.query('select * from list', function (err, tempMenus){ if(err){throw err;} let menus = template.getMenus(tempMenus, theme); html = template.home(menus, theme); response.writeHead(200); response.end(html); }); } ...
- HTML BEM 사용하여 정리
- JS 파일 분할을 통한 리팩토링
- 페이지 구현
- 로그인 구현
- 반응형 웹페이지 디벨롭
- JQuery 사용방법
현재까지 작업한 myPage의 구성을 깔끔하게 정리했다. 아직 부족함이 많겠지만 깔끔해진 코드를 보니 내 마음도 깔끔해지는 것 같다. 이제 웹페이지 기능구현 및 디자인 쪽으로 더 공부를 해보아야겠다. JQuery 사용법도 배워보고, 도중에 필요하다고 생각될 때 페이지와 로그인 또한 구현해보려고 한다.