css 의 개념 , overload 정보
css 의 개념 , overload본문
over load 는 저그의 오버로더가 아니라는거는..
자바쪽 하신분은 그냥 눈요기정도로...
css는 cascade style sheet..
여기서 중요한게 cascade 라는 단어이고 cascade = overload 라는 개념은 중요합니다..
1.css
body{margin:0px}
2.css
body{margin:10px}
<link rel=..... href="1.css" />
<link rel=..... href="2.css" />
이러면 결론은 margin:10px이 적용됩니다.
즉 뒤에 나올수록 앞에 나온 내용을 덥어 씌웁니다.
1.css
body{margin:0px;padding:10px}
2.css
body{margin:10px}
<link rel=..... href="1.css" />
<link rel=..... href="2.css" />
이러면 결론은 body{margin:10px;padding:10px}
겹치는 부분만 변경해서 margin: 에 대해 정의한 부분만 변경되었습니다.
그렇다면
<style>
body{margin:30px}
</style>
<link rel=..... href="1.css" />
<link rel=..... href="2.css" />
결론은 body{margin:30px;padding:30px}
외부스타일 쉬트 보다는 내부적으로 정의한 <style> 이 더 우선권이 높습니다.
즉 <style>에서 정의한 내용이 외부 스타일 쉬트의 정의를 overload 합니다.
물론 <body style="margin:30px;padding:30px"> 이렇게 정의할 경우 무조건 이 스타일이 적용됩니다.
위 내용은 overload 개념이라고 해야 하는게 맞는지 우선순위 라고 해야 맞는지는 정확하지는 않지만,
하여간 동일하게 정의된 스타일을 다른 동일한 정의로 교체 할 수는 있습니다.
cascade의 두번째 의미는
<table style="text-align:center">
<tr>
<td>aa</td>
<tr>
<td>aa</td>
</table>
했을 경우에 자식태그들도 모두 동일하게 text-align:center 속성을 물려 받게 됩니다.
즉 위의 노드의 스타일을 그대로 하위 노드가 물려 받게 됩니다.
자바스크립트도 이러한 오버로딩을 지원합니다.
var test = function(){}
var test = function(){}
에러가 나지 않고 test라는 함수는 정의되었습니다.
var test = function(){alert('1');}
var test = function(a){alert('2')}
var test = function(a,b){alert('3')}
이 3개의 함수는 각각 다른 함수이며 js 에러가 발생하지 않습니다.
test(); // 1
test('adfadf') ; // 2
test('adfad', 'adfadfad'); //3
test('adfad', 'adfadf', 'adfad'); // 3
overload는 인자의 갯수에 의해서 실행될 함수를 결정짓는 방법이 정확한 의미 일것 같습니다.
php 에서는 이러한 오버로딩을 지원하지 않습니다.
function a(){}
function a($name){}
warning: can't redeclare function a 라는 에러 메시지를 보게 됩니다.
이것을 피하기 위하여
function a($name='', $addr='', $age='', $sex=''){};
이렇게 독특하다면 독특한 함수를 만들게 되고, 나중에는 저 변수들이 무지하게 헷갈리게 되는 경우가 종종 있습니다.
class 도 동일한 이유로 같은 클래스를 정의 할수 없습니다.
class a{}
class a{}
에러가 납니다.
문제는
class a{
function test(){}
}
class b extends a{
function test(){}
}
즉 어떠한 경우에도 function test() 가 두번 나와서는 안되고 // abstract나 interface는 예외적으로..
5.3버젼 이전에서는 에러가 났었는데,
php 5.3 에서는 저러한 경우가 에러가 안나게 됩니다..
문득 저렇게 정의 햇는데 에러가 안난다는것을 우연히 알게되서 ( 그전까지는 저렇게 정의 하면 에러가 났던 걸로)
함 적어 봤습니다.
ps: 스타일 쉬트의 우선순위는
inline style : <span style=""> 정의한게 가장 높습니다.
내부 스타일 : <style></style> 에서 정의 한게 그 다음
외부 스타일 : <link...> 에서 정의한게 그 다음.
궁금한건 <style>@import url('');</style> 이경우의 우선순위는 잘 모르겠습니다.
span{} : 10점
.blue{} : 100점
span.blue{} : 110점
#blue{} : 1000점
span#blue.blue{} 11100점
td#member.member span#blue.blue{} : 2220점.
위와 같이 점수에 의해서 적용될 스타일이 결정지어지게 됩니다.
크롬에서 f12 눌러서 보여지는 스타일중에서 --- 이렇게 적용안된다고 표시되어 있는 부분들은 우선권이 낮기 때문에
무시되어 졌다는 의미입니다.
.. important! // 이 표시는 중요한것 같은데 아직 의미가 정립안되서 안쓰는 중입니다.
추천
0
0
댓글 2개

<!doctype html> 에서 head 외에 <style> 은 무시될 수 있습니다.
!important 는 물 흐르듯 내려오는 style 을 무시하고 현재 것을 사용한다라는 의미로
<style>
body{color:red !important;}
body{color:blue}
</style>
이렇게 하면 body 의 색은 기존 처럼 물 흐르듯 위에서 아래로 글자 색이 blue 가 아닌 red 를 먹게 됩니다.
!important 는 물 흐르듯 내려오는 style 을 무시하고 현재 것을 사용한다라는 의미로
<style>
body{color:red !important;}
body{color:blue}
</style>
이렇게 하면 body 의 색은 기존 처럼 물 흐르듯 위에서 아래로 글자 색이 blue 가 아닌 red 를 먹게 됩니다.
!important 는 잘쓰면 좋지만...
잘못사용하면 완전한 독! 이 됩니다. css 가 꼬일수 있어요...
특히 협업 시 또는 다른사람에게 인수인계 시...
인계받은 사람이 멘붕이 올 수도... ㅎㅎㅎㅎ
잘못사용하면 완전한 독! 이 됩니다. css 가 꼬일수 있어요...
특히 협업 시 또는 다른사람에게 인수인계 시...
인계받은 사람이 멘붕이 올 수도... ㅎㅎㅎㅎ