posted by 내.맘.대.로 2015. 3. 19. 08:54

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.

종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다.

한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.

자세한 내용은 여기로: https://www.epubguide.net/notice/309

오래 전 작성된 글은 현재의 Sigil 버전과 차이가 날 수 있습니다. 등록 일자를 확인 하고 1년 이상 지난 글은 변경된 내용이 있는지 확인하시기 바랍니다.

1. CSS 속성의 상속

많은 CSS 참고서적에는 CSS의 상속이 앞에 나와있다. Cascading Style Sheet라는 이름처럼 CSS의 속성은 상위 속성에 영향을 받는다. 그래서 제대로 속성을 적용한 것 같은데 반영이 되지 않거나, 아무런 속성도 적용하지 않았는데 특정 스타일이 적용되기도 한다. CSS의 상속은 제대로 이해하지 못하면 심각한 편집 오류가 발생할 수 있어 CSS를 이해하지 못한 상태에서 CSS의 상속을 이해하기는 아주 어렵다. 이 내용을 보기 전에 CSS에 대해 먼저 공부하기를 권한다. 


1.1 CSS의 상속이란?

만약 스타일이 아래처럼 적용되어 있다면 결과가 어떻게 나올까?



blockquote {

 color : yellow;

}


<blockquote>

<p>이 문장은 <strong>무슨 색으로</strong>보일까요?</p>

</blockquote>


부모인 blockquote 태그에 빨간색이 지정되어 있으니 자식인 p와 손주에 해당하는 strong 태그에도 빨간색 속성이 적용된다. CSS 상속이란 부모의 스타일이 자식에게 그대로 전달된다는 의미다. blockquote에 글자 모양이나 크기 등 다른 스타일이 적용되더라도 그 스타일은 blockquote의 아래에 있는 p 태그나 strong 태그에 그대로 적용된다. 

cascading은 폭포에서 물이 위에서 아래로 떨어져 제일 아래의 물이 바닥에 닿듯이 상위 스타일이 하위 영역에도이 적용된다는 의미다. 여기까지는 아주 간단하다. 하지만 다음의 경우에는 조금 더 복잡해 질 수 있다.

아래 예제는 어떤 결과가 나올까?


blockquote {

 color : yellow;

}


p {

  color : red;

}


.blue {

 color : blue;

}


strong {

 color : grey;

}


<blockquote>

<p>이 문장은 <span class="blue">무슨 색으로 <strong>보일까요?</strong></span></p>

</blockquote>


아주 간단한 스타일이 적용됐지만 CSS를 제대로 이해하지 못했다면 글자 색이 무슨 색일지 정확히 알기 어렵다. 스타일이 상속이 되기 때문에 blockquote의 노란색이 p태그에 적용되야 하는데 p태그에는 다시 빨간색으로 스타일이 적용돼 있다. 상속된 속성이 적용될지, 자신의 속성이 적용될지는 CSS를 적용해본 사람이라면 쉽게 알 수 있다. blockquote의 노란색 아래에 p의 빨간색이 들어있을 경우 p의 빨간색이 표현된다.

스타일은 부모에게서 자식으로 상속되지만, 자식이 고유 스타일을 갖는다면 부모 스타일보다 자식 스타일이 우선적으로 적용된다. 자식 스타일에 없는 것은 부모 스타일을 따르기 때문에 부모 스타일 + 자식스타일이  합쳐진 것이 최종 결과가 된다. 

그런데 편집을 하다 보면 아래 예제처럼 부모 스타일을 자식에게 그대로 전달하고 싶은 경우가 생긴다. 


p {

 color : blue; /*본문 전체는 파란색 글자로 표현*/

}

blockquote {

 color : red; /*인용구는 빨간색 글자로 표현*/

}


p {

 color : blue; /*본문 전체는 파란색 글자로 표현*/

}

blockquote {

 color : red; /*인용구는 빨간색 글자로 표현*/

}


본문에 적용된 스타일과 인용구나 추가적인 설명에 사용될 스타일이 달라야 하는데 문단을 구분하는 태그는 p 태그밖에 없기 때문에 p 태그 안에 여러 스타일을 적용할 수 없어 문제가 생긴다. 

위 예제 코드는 인용구와 본문 모두 파란색으로 표현된다. 그러다보니 대부분의 편집자들은 필요할 때마다 클래스를 추가해서 책 한권 편집하는데 수십개의 클래스를 사용하기도 한다. 


p {

 color : blue;

}

.red {

 color : red;

}


<p> 본문 기본 스타일은 파란색입니다.</p>

<blockquote>

<p class="red">인용구는 빨간색입니다.</p>

<p class="red">인용구는 빨간색입니다.</p>

<p class="red">인용구는 빨간색입니다.</p>

<p class="red">인용구는 빨간색입니다.</p>

</blockquote>


가장 많이 사용하는 상속 문제 해결 방법이다. 간단한 해결방법이지만 이렇게 하면 인용구 문단에 항상 class를 추가해야하기 때문에 편집이 어려워진다. 인용구가 많아진다면 편집 시간이 길어질 수 밖에 없다.

CSS  상속을 제대로 이해하면 이런 문제를 쉽게 해결할 수 있도록 도와준다. 다음장에서 다양한 CSS  상속 방법을 설명할 것이다. CSS상속은 아주 복잡하다. 여기에서는 책 편집에 유용하게 사용할 수 있는 상속을 설명하려고 하니 자세한 CSS상속에 대해 알고싶다면 CSS 관련 서적을 참고하기 바란다.


1.2 공통 스타일 적용

CSS 스타일은 계속해서 상속된다. 같은 p태그라도 서로 다른 스타일이 적용돼 있다면 중복되지 않는 부분은 모두 상속된다.


p.style01 {

 text-indent : 1em;

}

p.style01 {

 margin : 0;

}

p.style01 {

 padding : 0;

}

p.style01 {

 font-family : "굴림"

}

p.style01 {

 font-size : 1em;

}


p.style02 {

 text-indent : 1em;

 margin : 0;

 padding : 0;

 font-family : "굴림"

 font-size : 1em;

}



위 예를 보면 p.style01과 p.style02는 완전히 동일한 스타일이다. p.style02를 여러번 나눠 각각 다른 스타일을 지정하더라도 스타일이 상속되기 때문에 한번에 지정한 것과 동일한 효과가 적용된다.

이런 상속을 통해 아래처럼 여러 선택자에 공통으로 적용되야 하는 스타일을 한번에 지정할 수 있다. 

p {

 text-indent : 1em;

 margin : 0;

 padding : 0;

 font-family : "굴림"

 font-size : 1em;

}

h1 {

 text-indent : 1em;

 margin : 0;

 padding : 0;

 font-family : "굴림"

 font-size : 2em;

}

h2 {

 text-indent : 1em;

 margin : 0;

 padding : 0;

 font-family : "굴림"

 font-size : 1.5em;

}


위 스타일은 폰트 크기만 제외하면 모두 동일한 스타일을 갖고 있다. 이런 스타일을 아래처럼 정리하면 보다 간결해진다. 


p, h1 {

 text-indent : 1em;

 margin : 0;

 padding : 0;

 font-family : "굴림"

}

p {

 font-size : 1em;

}

h1 {

 font-size : 2em;

}

h2 {

 font-size : 1.5em;

}



예제에서는 동일 스타일이 적용된 태그가 3개 뿐이지만, 이런 태그가 여러개라면 동일한 스타일을 반복할 필요 없이 다른 속성만 적용하면 된다.

스타일을 통합적용할 때에는 주의를 해야한다. 통합적용된 스타일은 모든 태그에 다 적용되기 때문에 태그별로 스타일 조정이 어려워진다. 


1.3 부모, 자손, 자녀, 형제 관계

CSS의 상속을 이해하기 위해서는 자손, 자녀, 형제 관계를 먼저 이해할 필요가 있다. 이 부분이 어렵다면 그냥 지나쳐도 된다. 하지만 상속 관계를 잘 이해하면 편집 시간을 줄이고, 보다 다양한 표현을 할 수 있게 된다. 

부모, 자식, 형제 같은 용어를 쓰는 이유는 영어권에서 Parents, Descendant, Child, Sibling이라는 단어를 사용하고, 가족간에 재산을 상속하듯 스타일을 상속하기 때문이다.

CSS의 속성은 폭포가 위에서 아래로 떨어지듯 부모 속성이 자식에게 전달되는 것을 원칙으로 한다. 그래서 특정 태그에 속성을 지정하면 그 속성은 모두 자식에게도 영향을 준다. 

하지만 자식 이기는 부모 없다는 속담이 CSS에서도 적용된다.부모에게서 물려받은 속성 대신 자식이 고유의 속성을 갖는다면 부모 보다 자식 속성이 강하다. 

div {

  color : red;

}

p {

 color : blue;

}


<div>

div는 p에 대해 부모 속성을 갖는다.

<p>p는 부모인 div에 대해 자식이 된다.</p>

</div>



위 예를 실행해 보면 div 속성이 적용된 [div는 p에 대해 부모 속성을 갖는다]는 문장은 빨간색으로 보인다. div 태그 안에 있는 p 태그는 div의 자식이다. 그리고 div는 p 태그의 부모라고 한다. 자식 속성이 강하다고 한 건 p 태그로 묶인 [p는 부모인 div에 대해 자식이 된다]는 부분은 부모인 div에 적용된 빨간색에 영향을 받지 않고 파란색으로 표시되기 때문이다. 


div는 p에 대해 부모 속성을 갖는다.

p는 부모인 div에 대해 자식이 된다.


자식은 다시 자손과 자녀로 구분된다. 자손은 부모의 자녀 뿐 아니라 자녀의 자녀, 즉 손자나 손녀까지 포함된다. 자녀는 부모와 1촌 관계만을 의미하고, 자손은 2촌 이상이라는 의미다.

아래 예를 먼저 살펴보자. 


div {

  color : yellow

}

p {

 color : blue;

}

strong {

 color : red;

}



<div>

div는 p에 대해 부모이다.

    <p>p는 부모인 div에 대해 자녀가 된다.

         <strong>strong은 div의 자손이며 p의 자녀이다.</strong>

   </p>

</div>


div는 p에 대해 부모이다.

p는 부모인 div에 대해 자녀가 된다.

strong은 div의 자손이며 p의 자녀이다.


부모, 자손, 자녀의 관계를 이해했다면 위 예제의 결과를 이해할 수 있다. div에 영향을 받는 문장은 노란색, p에 영향을 받는 문장은 파란색, strong에 영향을 받는 문장은 빨간색이 된다. 


형제는 포함관계가 아닌 동급의 관계를 의미한다. 형제 관계는 다시 인접 형제와 일반 형제 관계로 구분할 수 있다.


<div>

    <p id="p3">p는 부모인 div에 대해 자녀가 된다. </p>

</div>

<p id="p1">이 p1은 div 태그의 인접 형제이다.</p>

<p id="p2"> 이 p2는 p1의 힌접형제이면서 div의 일반 형제이다.</p>


위 예제를 보면 div와 id가 p1, p2, p3인 3개의 p태그가 있다. div 태그와 p1은 서로 붙어 있는 인접 형제가 된다. p2는 div와 한단계 떨어져 있지만 부모 자식 관계가 아니기 때문에 div와 일반 형제가 된다. p3는 div의 자식이기 때문에 p1이나 p2의 형제가 될 수 없다.

형제간에는 서로 영향을 주지 않는다. 하지만 다음에 설명 할 결합 속성(Combinator)을 통해 서로 영향을 줄 수 있다.


1.4 자손 상속(Descendant Selector)

자손 상속은 [blockquote   p]처럼 띄어쓰기로 지정할 수 있다. 

자손은 내 아이(자녀) 뿐 아니라 아이의 아이(손주)까지 포함하는 개념이다. 

부모와 자식으 같은 속성에 다른 값을 갖는다면 자식 속성이 반영된다. 부모의 글자 색이 빨간색이고, 자식의 글자 색이 파란색이라면 최종 결과는 파란색이 된다. 하지만 특정 부모 태그 안에 들어가 있는 자식 태그에  부모가 지정한 스타일을 적용하고 싶을 때가 있다.  

본문에 사용하는 p 태그에는 들여쓰기에 글자 크기를 1em으로 스타일을 적용했지만, 인용구에 사용하는 p태그는 들여쓰기 없이 0.8em의 글자 크기를 적용하고 싶다면 자손 상속을 사용할 수 있다. 

p {

 color : red;

}

blockquote p {

 color : blue

}




<p> 본문은 빨간색이 적용된다.</p>

<blockquote>

   <p> blockquote 안의 p태그는 파란색이 적용된다.</p>

   <div><p>2촌 이상이어도 파란색이 적용된다.</p></div>

</blockquote>


본문은 빨간색이 적용된다.

blockquote 안의 p태그는 파란색이 적용된다.

2촌 이상이어도 파란색이 적용된다. 


위 예에서 처럼 자손 상속을 하게 되면 기본 스타일이 정해져 있다고 해도 부모 태그 아래에서는 영향을 받지 않을 수 있다. 그리고 자손 상속은 2촌 이상, 다시 말해 부모 태그 안에 div 같은 다른 태그가 사용된 후 p태그가 나와도 자손 상속 스타일이 적용된다.


4.2.6.5 자녀 상속(Child Selector)

저녀 상속은 [blockquote > p]처럼 꺽쇠로 지정할 수 있다. 

자녀는 내 아이만 해당한다. 손주에게는 영향을 주지 않는다. 

자녀상속은 자손상속보다 약한 개념이다. 자녀상속은 1촌 관계에서만 영향을 받는다. 2촌이 되면 자녀 상속 받은 스타일이 아니라 기본 스타일을 따르게 된다.

p {

 color : red;

}


blockquote > p {

 color : blue;

}


<p>기본 스타일인 빨간색이 적용된다.</p>

<blockquote>

<p>자녀 속성인 파란색이 적용된다.</p>

<div><p>2촌 이상은 기본 스타일인 빨간색이 적용된다.</p></div>

</blockquote>


기본 스타일인 빨간색이 적용된다.

자녀속성인 파란색이 적용된다.

2촌 이상은 기본 스타일인 빨간색이 적용된다. 


1.6 형제 상속

형제상속은 인접(img + p) 형제와 일반(img ~ p) 형제로 나뉜다. 형제끼리는 서로 스타일에 영향을 주지 않지만 형제 상속을 하게 되면 영향을 받게 된다. 예를 들어 논문처럼 모든 이미지 아래에 설명을 붙여야 한다면 형제상속을 이용할 수 있다.

인접 형제간 스타일을 적용하려면 [img + p] 처럼 더하기(+)를 이용한다. 인접 형제는 특정 태그 바로 다음에 나오는 경우에만 영향을 주는 스타일이다. 

p {

 color : red;

}


img + p {

 color : blue;

}


<p>기본 스타일인 빨간색이 적용된다.</p>

<img src="sample_image.jpg">

<p>img 태그 바로 다음에 나오는(인접한) p 태그는 파란색이 적용된다.</p>

<p>img 태그와 한단계라도 떨어지면 기본 스타일인 빨간색이 적용된다.</p>


기본 스타일인 빨간색이 적용된다.

[이미지]

img 태그 바로 다음에 나오는(인접한) p 태그는 파란색이 적용된다.

img 태그와 한단계라도 떨어지면 기본 스타일인 빨간색이 적용된다.


일반 형제는 [img ~ p]처럼 물결무늬(~)로 지정하며, 특정 태그 다음에 나오는 모든 특정 태그에 영향을 준다. 


p {

 color : red;

}


img ~ p {

 color : blue;

}


<p>기본 스타일인 빨간색이 적용된다.</p>

<img src="sample_image.jpg">

<p>img 태그 다음에 나오는 모든 p 태그는 파란색이 적용된다.</p>

<p>img 태그 다음에 나오는 모든 p 태그는 파란색이 적용된다.</p>


기본 스타일인 빨간색이 적용된다.

[이미지]

img 태그 다음에 나오는 모든 p태그는 파란색이 적용된다.

img 태그 다음에 나오는 모든 p태그는 파란색이 적용된다.

* 단, 형제일때만 해당한다. 만약 형제의 자식이거나 부모인 경우 img 뒤에 나오더라도 빨간색이 된다.


스타일의 상속은 주의해서 사용해야 한다. 정확히 이해하고 사용하면 편집 시간을 절약하고 다양한 스타일을 표현할 수 있지만 잘못 사용하면 의도하지 않은 결과가 나올 수 있기 때문이다. 

이 외에도 공통(모든 자식 관계에서 적용) 관계나 손자 관계 등 보다 다양한 적용 방식이 있으니 필요한 경우 관련 서적을 참고하기를 바란다.

반응형
posted by 내.맘.대.로 2014. 11. 28. 12:33

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.

종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다.

한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.

자세한 내용은 여기로: https://www.epubguide.net/notice/309

오래 전 작성된 글은 현재의 Sigil 버전과 차이가 날 수 있습니다. 등록 일자를 확인 하고 1년 이상 지난 글은 변경된 내용이 있는지 확인하시기 바랍니다.

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.


종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다. 
한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.
https://www.epubguide.net/notice/309

 

 

PDF를 EPUB으로 변환하는 방법을 궁금해하는 분들이 많이 있어 정리해 드립니다. 

 

PDF를 EPUB으로 전환하면 바로 상품화 할 수 있을거라 생각하는 분들이 있는데 절대 불가능합니다. PDF의 구조가 EPUB과 달라 전환을 하더라도 텍스트와 이미지를 추출하는 정도입니다. PDF는 레이어 형식(PPT에서 글상자나 도형에 글을 넣는 것 처럼)으로 텍스트가 들어가기 때문에 레이어 순서가 꼬이면 문단의 순서가 뒤바뀔 수도 있습니다. 그래서 PDF를 EPUB으로 전환한 후에 텍스트와 이미지를 재편집하는 작업이 필요합니다. 

 

PDF를 EPUB으로 가장 간단히 전환하는 프로그램으로는 calibre(http://calibre-ebook.com/)가 있습니다. 여기서도 calibre를 이용한 변환 방법을 설명드립니다.

 

1. calibre를 다운받아 설치하세요.  http://calibre-ebook.com/

 

2. calibre를 실행시킵니다.

 

 

3. calibre 라이브러리에 변환할 PDF를 추가합니다. 추가는 드래그앤드롭으로 할 수 있습니다.

 

 

4. 파일이 추가되면 PDF 형식만 보입니다.

 

 

5. 변환할 파일을 선택하고 상단 메뉴에 있는 [책 변환]을 클릭합니다. 

 

 

6. 책 변환 화면이 나옵니다. 기본적인 정보를 입력합니다.

참고로 여러가지 설정을 할 수 있지만, 설정을 아무리 잘 해도 좋은 품질의 EPUB을 얻기 어렵습니다. 

EPUB으로 변환 후에 다시 편집을 하는게 좋기 때문에 변환 옵션에 대한 설명은 하지 않습니다. 

 

 

7. EPUB 출력에 대한 옵션입니다. 필요한 옵션을 체크하고 [확인]을 누릅니다.

 

 

8. EPUB 변환이 시작되면 처음 calibre를 실행시켰을 때 화면이 보입니다.

이 화면에서 오른쪽 아래를 보면 [작업 : 1]이란 표시가 나오는데 이 부분을 누르면 EPUB 전환 작업이 어떻게 진행되는지 알 수 있습니다. 

 

 

9. EPUB 변환 작업이 완료되면 PDF만 보이던 파일 형식 정보에 EPUB이 표시됩니다.

 

 

10. EPUB 위에 커서를 놓고 마우스 오른쪽 버튼을 누르면 EPUB 파일을 원하는 폴더로 옮길 수 있습니다.

 

 

 

PDF에서 추출한 EPUB의 품질은 아래 샘플처럼 아주 낮습니다. 이는 사람 수준으로 텍스트를 이해할 수 있는 인공지능 컴퓨터가 나오지 않는 한 어쩔 수 없는 문제입니다. 참고용으로 보려고 해도 보정이 필요합니다. 

 

 

 

 

 

 

 

 

 

반응형
posted by 내.맘.대.로 2014. 8. 12. 15:34

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.

종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다.

한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.

자세한 내용은 여기로: https://www.epubguide.net/notice/309

오래 전 작성된 글은 현재의 Sigil 버전과 차이가 날 수 있습니다. 등록 일자를 확인 하고 1년 이상 지난 글은 변경된 내용이 있는지 확인하시기 바랍니다.


제목과 문단, 문단과 문단 사이에 간격을 주고 싶을 때 margin 속성을 많이 사용합니다. 뷰어에서 상하좌우 여백을 줄때도 margin 속성을 적용합니다. 


body {

margin : 5%;

}


이렇게 여백을 주면 뷰어 화면에서 상하좌우에 일정한 간격이 생겨 텍스트가 가득한 글을 읽을 때 가독성에 여유가 생깁니다. 


그런데 여백을 줄 때 margin을 많이 사용하지만 padding이라는 속성도 있습니다. 이 둘은 적용된 결과를 보면 아무런 차이도 없기 때문에 구분 없이 사용하기도 합니다. 하지만 이 둘에는 아주 큰 차이가 있어 정확한 쓰임을 모르고 사용할 경우 의도하지 않은 결과가 생길 수 있습니다. 


이 둘의 차이를 한마디로 정의하면 이렇습니다.


margin : 글상자(border) 바깥쪽 여백

padding : 글상자 안쪽 여백



이해에 도움이 되도록 그림으로 설명을 하겠습니다. 


margin과 padding은 테두리가 보이지 않으면 똑같은 스타일이 적용된 것 처럼 보입니다. margin :5%;와 padding 5%;는 모두 상하좌우 여백이 5%씩 적용됩니다. 하지만 테두리를 그려보면 그 차이는 명확해집니다. margin:5%는 글자에 맞게 테두리가 그려지고 테두리 밖에 여백이 5%가 적용되지만 padding:5%는 글자와 테두리 사이에 5%의 여백이 적용됩니다. 


예를 들어 아래처럼 글상자를 2개 만들고 글상자와 글상자 사이에 여백을 넣고 싶을때는 margin을 적용합니다. 아래 글상자는 padding을 0으로 적용했기 때문에 글상자와 글자 사이에 여백이 없습니다. 대신 글상자 바깥쪽 여백, 즉 margin이 20px가 되기 때문에 글상자가 서로 떨어집니다. 

margin :20px; padding : 0px;

margin :20px; padding : 0px;


아래 글상자는 반대로 margin을 0으로, padding을 20px로 적용했습니다. 다른 스타일은 동일하고 margin과 padding만 바꿨는데 글상자의 크기부터 달라집니다. padding을 적용하면 글자와 글상자 사이에 여백이 생기기 때문에 글상자가 커집니다. 그리고 margin, 글상자 바깥쪽 여백은 0이기 때문에 두 글상자가 붙게됩니다. 


margin :0px; padding : 20px;

margin :0px; padding : 20px;


위 글상자를 테두리와 배경색을 없애면 아래처럼 보입니다. padding이 margin보다 조금 넓게 여백이 적용되는 것을 볼 수 있습니다.  


margin :20px; padding : 0px;

margin :20px; padding : 0px;

margin :0px; padding : 20px;

margin :0px; padding : 20px;


전자책을 만들 때 문단이나 전체 여백을 주고 싶다면 margin을 권합니다. padding은 글상자 안쪽의 여백이기 때문에 인용구처럼 한단을 들어가도록 표현하거나 내어쓰기를 할 때 사용하면 좋습니다. margin을 이용해서 내어쓰기를 표현할 때가 있는데 아래 예제를 보고 어느쪽이 더 좋은지 스스로 판단해 보기시 바랍니다. 


▶ padding으로 내어쓰기 표현 : padding-left: 50px; text-indent: -2em; 적용

전자책을 만들 때 문단에 여백을 주고 싶다면 margin을 권합니다. padding은 글상자 안쪽의 여백이기 때문에 인용구처럼 한단을 들어가도록 표현하거나 내어쓰기를 할 때 사용하면 좋습니다. margin을 이용해서 내어쓰기를 표현할 때가 있는데 아래 예제를 보고 어느쪽이 더 좋은지 스스로 판단해 보기시 바랍니다. 




▶ margin으로 내어쓰기 표현 : margin-left: 50px; text-indent: -2em; 적용

전자책을 만들 때 문단에 여백을 주고 싶다면 margin을 권합니다. padding은 글상자 안쪽의 여백이기 때문에 인용구처럼 한단을 들어가도록 표현하거나 내어쓰기를 할 때 사용하면 좋습니다. margin을 이용해서 내어쓰기를 표현할 때가 있는데 아래 예제를 보고 어느쪽이 더 좋은지 스스로 판단해 보기시 바랍니다. 




반응형
posted by 내.맘.대.로 2014. 5. 26. 14:14

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.

종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다.

한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.

자세한 내용은 여기로: https://www.epubguide.net/notice/309

오래 전 작성된 글은 현재의 Sigil 버전과 차이가 날 수 있습니다. 등록 일자를 확인 하고 1년 이상 지난 글은 변경된 내용이 있는지 확인하시기 바랍니다.

* 요청이 있어 mp3파일의 구간 재생 및 컨트롤러 디자인 변경하는 스크립트를 올립니다*

스크립트를 모르는 분이라면 아래 코드를 그대로 사용하셔도 됩니다. 아래 코드를 어떻게 사용해야 하는지 이해가 안가신다면 쪽지를 남겨주세요.


EPUB3로 책을 제작할 때 오디오나 동영상을 가장 많이 삽입하는 것 같습니다. 오디오 삽입은 아주 간단합니다. 아래 코드처럼 오디오 파일을 삽입하면 간단한 컨트롤러까지 자동으로 나타나게 됩니다. 


<audio controls="controls">

 <source src="../Audio/sample.mp3" type="audio/ogg"/>

Your viewer does not support the audio element.

</audio>


---------------------------------------------------------------------------


<audio src="../Audio/sample.mp3" type="audio/ogg"/ controls="controls">

Your viewer does not support the audio element.

</audio>



위의 예는 HTML5에서 기본으로 제공하는 코드로 어떤 것을 사용해도 동일합니다. 위 코드를 사용하면 자동으로 아래와 같은 컨트롤러가 나타납니다. 컨트롤러는 실행과 일시정지, 소리조절을 할 수 있으며 진행율이 표시됩니다. 화면이 작을 경우에는 자동으로 화면에 맞춰 소리 조절이나 진행율이 사라지기도 합니다. 


* 기본 오디오 컨트롤러*

** 샘플은 단순 이미지로 실제 플레이는 되지 않음**


하지만 책을 만들다 보면 보다 다양한 디자인이 필요할 수 있습니다. 그리고 기본 오디오 컨트롤러를 이용하면 처음부터 끝까지 실행이 되기 때문에 어학교재처럼 특정 구간을 들어야 할 때는 구간별로 오디오 파일을 만들어 수십개, 수백개의 오디오 파일을 각각 지정을 해야합니다. 

이럴 때 스크립트를 사용해 컨트롤러를 수정할 수 있습니다. 스크립트를 사용하면 아래처럼 플레이 버튼의 모양을 변경한다던가, 볼륨 조절 버튼을 추가할 수도 있고, mp3파일 하나만 넣고, 1/100초 단위로 조정을 해가며 원하는 위치만 플레이를 시킬 수 있습니다. 


* 스크립트로 컨트롤러 변경 & 원하는 위치 플레이 *

** 샘플은 단순 이미지로 실제 플레이는 되지 않음**


위 이미지를 보고 '기본 컨트롤러가 더 깔끔하잖아' 하고 얘기하실 분은 없으시리라 생각하겠습니다. 이정도 이해력은 있어야 아래 내용을 이해할 수 있을 테니까요. 위 코드를 만든 스크립트를 하나씩 설명해 드리겠습니다. 설명을 보시고 코드를 이해하신다면 어학교재 처럼 오디오 파일을 많이 삽입해야 할 때 큰 도움이 될거에요.


<audio id="sample1" src="../Audio/sample.mp3"> Your viewer does not support the audio element.</audio>


먼저 오디오를 삽입합니다. 기본 코드를 사용하지만 컨트롤러(controls="controls")를 추가하지 않았습니다. 이렇게 하면 화면에 컨트롤러가 나타나지 않기 때문에 오디오 파일이 들어간 위치에 아무것도 표시되지 않습니다. 대신 컨트롤러를 조작하기 위해 id="sample1"이라고 오디오의 ID를 지정했습니다. 한 페이지에서 여러개의 오디오가 들어갈 경우 각각의 컨트롤러는 이 ID를 참고해서 어떤 오디오 파일을 실행시켜야 하는지가 결정됩니다.


<p>

모두 듣기

<button onclick="playAll()">▶</button>

<button onclick="playStop()">■</button>

<button onclick="volUp()">+</button>

<button onclick="volDown()">-</button>

</p>


이 부분은 컨트롤러를 어떻게 변경하는지 보여주는 샘플입니다. 우선 스크립트에 해당하는 onclick="palyAll()" 부분은 나중에 설명을 하고, <button>태그부터 설명하겠습니다. <button>태그는 글자 그대로 버튼을 만들어 주는 태그입니다. 오디오나 비디오로만 쓸 수 있는게 아니라 다양한 스크립트의 실행 버튼으로 사용될 수 있습니다. 이 태그를 사용하면 자동으로 버튼이 그려지고 태그 사이에 들어있는 내용이 버튼 위에 표시됩니다. 


<button ...>버튼 이름</button>


'버튼 이름'이 들어갈 부분에 원하는 플레이 버튼을 넣거나 이미지를 삽입할 수 있습니다. 이미지는 버튼 태그 사이에 <img src="url"/>로 삽입을 하면 됩니다. 이미지를 이용하면 기본 플레이 버튼보다 다양한 표현이 가능하기 때문에 편집을 할 때 편집자의 의도에 따라 다양한 디자인을 적용할 수 있게 됩니다. 


이제 스크립트를 설명하겠습니다. 스크립트는 각각이 어떻게 작동하는지까지 설명을 하려면 많이 복잡하기 때문에 아래 스크립트를 어떻게 사용하는지를 중심으로 설명을 하겠습니다. 


<button onclick="playAll()">▶</button>

...

function playAll()

myAudio.currentTime=0;

myAudio.play();

}


<button onclick="function">버튼이름</button>에서 onclick은 클릭 버튼을 의미합니다. function은 버튼을 눌렀을 때 실행할 기능이 들어갑니다. 위 코드에서는 오디오의 시작 시간을 0으로(myAudio.currentTime=0;) 해서 실행(myAudio.play();)하라는 기능이 playAll()이라는 function에 담겨있다는 의미(function playAll())입니다. 

따라서 버튼을 클릭하면 playAll()에 담겨져 있는 기능, 처음부터 오디오 파일을 실행하게 되겠지요.


다른 기능도 동일합니다. playStop()은 실행 시간을 0으로 다시 돌려 놓고, 파일을 정지하게 됩니다. 만약 실행 시간을 0으로 돌리지 않으면 일시정지가 됩니다. 일시정지가 필요한 분들은 아래처럼 pause 버튼을 만들 수 있습니다. 

function playStop()

myAudio.pause();

}


볼륨 버튼은 0.2단계씩 볼륨을 올리거나 내릴 수 있습니다. 여기서 볼륨은 기기의 하드웨어 볼륨이 아닙니다. 기기의 하드웨어 볼륨 범위 내에서 조절되기 때문에 최대 크기는 기기의 볼륨 버튼으로 설정한 크기를 넘어설 수는 없습니다. 볼륨은 0부터 1 사이에서 조정이 가능한데, 아래 스크립트에서는 0.2씩 5단계로 볼륨을 조절할 수 있습니다. 더 세밀한 볼륨 조절이 필요하다면 0.1 등으로 변경을 하면 됩니다. 

function volUp()

   {

    myAudio.volume+=0.2

   }


끝으로 가장 복잡한 부분인 재생 구간 설정입니다. 위에서 설명한 것 처럼 아래 버튼을 누르면 playSegment(3,8)이라는 기능이 실행됩니다. 이 기능은 3초 ~ 8초 사이를 실행시키라는 기능이 들어가 있습니다. 스크립트에 대한 설명은 넘어가겠습니다. 스크립트를 아는 분이라면 설명 안해도 이해할테고, 스크립트를 모르는 분이라면 설명을 해도 이해가 어려우실테니...

<p>

3초 ~ 8초 사이

<button onclick="playSegment(3,8)">▶</button>

</p>

------------------------------------------------------------------

myAudio.addEventListener("timeupdate", function (){

if (myAudio.currentTime >= segEnd) {

myAudio.pause();

}   

console.log(myAudio.currentTime);

}, false);


function playSegment(startTime, endTime){

segEnd = endTime;

myAudio.currentTime = startTime;

myAudio.play();

}


구간 플레이가 필요한 mp3등 오디오 파일을 아무 플레이어에서든 실행시키면 원하는 구간이 몇초에 있는지 확인할 수 있습니다. 어학용 플레이어라면 1/100초 단위로도 확인이 가능하겠지요. 이런 플레이어로 원하는 구간의 시작 시간과 끝나는 시간을 확인합니다. 만약 시작 시간이 3.5초~ 8.5초라면 playSegment(3.5,8.5)처럼 소수점으로 표시할 수 있습니다. 


만약 문장 암기 방식의 어학교재를 만들고 있고, mp3 하나에 암기 문장이 모두 들어가 있다면 mp3를 하나씩 자를 필요 없이 문장의 시작과 끝 위치만 확인해서 문장별 음성을 들을 수 있게 책을 만들 수 있게 됩니다. 

<p>play가 되야 하는 문장<button onclick="playSegment(3,8)">▶</button></p>


스크립트를 모르는 분이라면 아래 코드를 그대로 사용하셔도 됩니다. 아래 코드를 어떻게 사용해야 하는지 이해가 안가신다면 쪽지를 남겨주세요.


# 스크립트 샘플

<?xml version="1.0" encoding="utf-8" standalone="no"?>


<!DOCTYPE html>


<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="ko">


<head>

  <title>오디오 컨트롤러 변경 + 특정 구간 재생</title>

</head>


<body id="sec1">

    <section id="sectionstart" epub:type="chapter">

<h2>오디오 특정 위치 플레이</h2>


<p><br /></p>


<div>

<audio id="sample1" src="../sample.mp3"> Your viewer does not support the audio element.</audio>

<p>모두 듣기<button onclick="playAll()">▶</button><button onclick="playStop()">■</button><button onclick="volUp()">+</button><button onclick="volDown()">-</button></p>

<p>3초 ~ 8초 사이<button onclick="playSegment(3,8)">▶</button></p>

<p>10초 ~ 15초 사이<button onclick="playSegment(10,15)">▶</button></p>

<p>17초 ~ 22초 사이<button onclick="playSegment(17,22)">▶</button></p>


<p>25초 ~ 30초 사이<button onclick="playSegment(25,30)">▶</button></p>


<p><button onclick="playStop()">stop</button></p>

</div>

</section>


<script>

<!-- 본 스크립트는 www.epubguide.net에서 제작하였으며, 누구나 자유롭게 사용 및 수정이 가능합니다. 단, 배포를 할 경우 내용을 일부 수정했다 하더라도 원본의 출처를 반드시 밝혀주시기 바랍니다.-->

var myAudio=document.getElementById("sample1");


var segEnd;


myAudio.addEventListener("timeupdate", function (){

if (myAudio.currentTime >= segEnd) {

myAudio.pause();

}   

console.log(myAudio.currentTime);

}, false);


function playSegment(startTime, endTime){

segEnd = endTime;

myAudio.currentTime = startTime;

myAudio.play();

}


function playAll()

myAudio.currentTime=0;

myAudio.play();

}

function playStop()

myAudio.currentTime=0;

myAudio.pause();

    } 

function volUp()

   {

    myAudio.volume+=0.2

   }

function volDown()

   {

    myAudio.volume-=0.2

   }

</script> 

</body>

</html>



반응형