미디어 쿼리를 사용하여 div
요소 의 크기에 따라 요소 의 크기를 조정 하고 div
싶습니다. 웹 페이지 내의 위젯처럼 사용되며 화면 크기가 다를 수 있으므로 화면 크기를 사용할 수 없습니다 .
최신 정보
https://github.com/ResponsiveImagesCG/cq-demos 에 대한 작업이 진행중인 것 같습니다.
미디어 쿼리를 사용하여 div
요소 의 크기에 따라 요소 의 크기를 조정 하고 div
싶습니다. 웹 페이지 내의 위젯처럼 사용되며 화면 크기가 다를 수 있으므로 화면 크기를 사용할 수 없습니다 .
https://github.com/ResponsiveImagesCG/cq-demos 에 대한 작업이 진행중인 것 같습니다.
답변:
아니요, 미디어 쿼리는 페이지의 요소를 기반으로 작동하도록 설계되지 않았습니다. 장치 또는 미디어 유형을 기반으로 작동하도록 설계되었으므로 미디어 쿼리 라고 합니다. width
, height
및 기타 차원 기반 미디어 기능은 모두 화면 기반 미디어에서 뷰포트 또는 장치 화면의 크기를 나타냅니다. 페이지의 특정 요소를 나타내는 데 사용할 수 없습니다.
div
페이지에서 특정 요소 의 크기에 따라 스타일을 적용해야하는 경우 div
미디어 쿼리 대신 해당 요소 의 크기 변화를 관찰하기 위해 JavaScript를 사용해야 합니다.
@element
쿼리 가 필요 합니다. W3C가 운율 / 이유에 대한 좋은 문서가 @media
쿼리 : w3.org/TR/css3-mediaqueries/#width가 (이 링크 폭을 논의 섹션으로 이동 --- 미디어 타입의 폭이 아닌 요소에 포함)
이 목표를 달성하기 위해 자바 스크립트 shim을 만들었습니다. 원하는 경우 살펴보십시오. 이는 개념 증명이지만주의하십시오. 초기 버전이므로 여전히 일부 작업이 필요합니다.
min-width
속성을 갱신 해야하는 요소를 감지 합니다. min-width
갱신이 가능한 CSS 클래스 목록, 표시된 요소를 수동으로 작성해야 합니까?
iframe 내부의 미디어 쿼리는 요소 쿼리로 작동 할 수 있습니다. 나는 이것을 성공적으로 구현했다. 아이디어는 Zurb의 Responsive Ads 에 관한 최근 게시물에서 나왔습니다 . 자바 스크립트가 없습니다!
@BoltClock이 허용 된 답변에 썼기 때문에 현재 CSS로는 불가능하지만 JavaScript를 사용하여 해결할 수 있습니다.
이런 종류의 문제를 해결하기 위해 컨테이너 쿼리 (일명 요소 쿼리) prolyfill을 만들었습니다. 다른 스크립트와 약간 다르게 작동하므로 요소의 HTML 코드를 편집 할 필요가 없습니다. 스크립트를 포함시키고 CSS에서 다음과 같이 사용하면됩니다.
.element:container(width > 99px) {
/* If its container is at least 100px wide */
}
나는 몇 년 전에 같은 문제에 부딪 쳤고 일을 도와주는 플러그인 개발에 자금을 지원했다. 플러그인을 오픈 소스로 출시하여 다른 사람들도 혜택을 볼 수 있으며 Github에서 https://github.com/eqcss/eqcss를 얻을 수 있습니다.
페이지의 요소에 대해 알 수있는 내용에 따라 다양한 반응 형 스타일을 적용 할 수있는 몇 가지 방법이 있습니다. EQCSS 플러그인으로 CSS로 작성할 수있는 몇 가지 요소 쿼리가 있습니다.
@element 'div' and (condition) {
$this {
/* Do something to the 'div' that meets the condition */
}
.other {
/* Also apply this CSS to .other when 'div' meets this condition */
}
}
그렇다면 EQCSS에서 반응 형 스타일에 어떤 조건이 지원됩니까?
px
%
px
%
px
%
px
%
EQCSS 요소 쿼리 내에서 스타일을보다 구체적으로 적용 할 수있는 세 가지 특수 선택기를 사용할 수도 있습니다.
$this
(쿼리와 일치하는 요소)$parent
(쿼리와 일치하는 요소의 부모 요소)$root
(문서의 루트 요소 <html>
)요소 쿼리를 사용하면 개별 반응 형 디자인 모듈에서 레이아웃을 구성 할 수 있으며 각 모듈은 페이지에 표시되는 방식에 대한 '자기 인식'이 있습니다.
EQCSS를 사용하면 너비 150px에서 너비 1000px까지 잘 보이도록 하나의 위젯을 디자인 할 수 있습니다. 그러면 모든 사이트의 템플릿을 사용하여 모든 페이지의 사이드 바에 위젯을 놓을 수 있습니다.
레이아웃 관점에서 현대 기술을 사용하는 것이 가능합니다.
Heydon Pickering이 작성했습니다. 그는 여기에 프로세스를 자세히 설명합니다 : http://www.heydonworks.com/article/the-flexbox-holy-albatross
Chris Coyier가 그것을 집어 들고 데모를 통해 작동합니다 : https://css-tricks.com/putting-the-flexbox-albatross-to-real-use/
문제를 다시 설명하기 위해 아래에 같은 구성 요소 중 3 개가 표시되며 각각은 a
, b
및 3으로 표시되는 주황색 div로 구성 c
됩니다.
두 번째 블록은 가로 방에 제한되어 있기 때문에 세로로 표시되며 상단 구성 요소 3 개는 가로로 배치됩니다.
그것은 사용 flex-basis
이 효과를 생성하는 CSS 속성과 CSS 변수.
.panel{
display: flex;
flex-wrap: wrap;
border: 1px solid #f00;
$breakpoint: 600px;
--multiplier: calc( #{$breakpoint} - 100%);
.element{
min-width: 33%;
max-width: 100%;
flex-grow: 1;
flex-basis: calc( var(--multiplier) * 999 );
}
}
Heydon의 기사는 1000 단어로 자세하게 설명하고 있으며 읽는 것이 좋습니다.
질문은 매우 모호합니다. BoltClock이 말했듯이 미디어 쿼리는 장치의 크기 만 알고 있습니다. 그러나 미디어 쿼리를 하위 선택기와 함께 사용하여 조정을 수행 할 수 있습니다.
.wide_container { width: 50em }
.narrow_container { width: 20em }
.my_element { border: 1px solid }
@media (max-width: 30em) {
.wide_container .my_element {
color: blue;
}
.narrow_container .my_element {
color: red;
}
}
@media (max-width: 50em) {
.wide_container .my_element {
color: orange;
}
.narrow_container .my_element {
color: green;
}
}
유일한 다른 솔루션은 JS가 필요합니다.
내가 CSS로 원하는 것을 성취 할 수 있다고 생각할 수있는 유일한 방법은 위젯에 유체 컨테이너를 사용하는 것입니다. 컨테이너 너비가 화면의 백분율 인 경우 미디어 너비를 사용하여 컨테이너 너비에 따라 스타일을 지정할 수 있습니다. 이제 각 화면의 크기에 대해 컨테이너의 크기를 알 수 있습니다. 예를 들어, 컨테이너를 화면 너비의 50 %로 결정한다고 가정 해 봅시다. 그런 다음 화면 너비가 1200px 인 경우 컨테이너가 600px임을 알 수 있습니다.
.myContainer {
width: 50%;
}
/* you know know that your container is 600px
* so you style accordingly
*/
@media (max-width: 1200px) {
/* your css for 600px container */
}
나는 또한 미디어 쿼리를 생각하고 있었지만 이것을 발견했다.
다음 <div>
과 같이 백분율 값 으로 래퍼 를 만드십시오 padding-bottom
.
div {
width: 100%;
padding-bottom: 75%;
background:gold; /** <-- For the demo **/
}
<div></div>
A의이됩니다 <div>
(3 종횡비 4)의 높이와 그 컨테이너의 폭의 75 % 이상.
이 기술은 또한 미디어 쿼리 및 페이지 레이아웃에 대한 약간의 임시 지식과 결합되어 더욱 세밀한 제어가 가능합니다.
내 필요에 충분합니다. 어느 것이 당신의 필요에도 충분할 것입니다.
ResizeObserver API를 사용할 수 있습니다 . 아직 초기 단계이므로 아직 모든 브라우저에서 지원하지는 않습니다 (그러나 그에 도움이되는 몇 가지 polyfill이 있습니다).
기본적으로이 API를 사용하면 이벤트 리스너를 DOM 요소의 크기 조정에 첨부 할 수 있습니다.
내 경우에는 div의 최대 너비를 설정하여이를 수행 했으므로 작은 위젯의 경우 영향을받지 않으며 최대 너비 스타일로 인해 큰 위젯의 크기가 조정됩니다.
// assuming your widget class is "widget"
.widget {
max-width: 100%;
height: auto;
}
.widget
위젯의 div에 대한 클래스 인 샘플 일뿐입니다.