찾다
웹 프론트엔드CSS 튜토리얼CSS 디자인의 불변 및 가변

CSS 디자인의 불변 및 가변

Dec 03, 2016 am 11:23 AM
css변하기 쉬운

"사람이 살다 보면 얼굴이 되는 사람도 있고, 리지가 되는 사람도 있다. 다 시대가 정한 것이다." - "그랜드마스터"

리자와 얼굴의 관계를 재구성한다면 HTML은 책임감을 가지세요 얼굴에 관한 것이고, CSS는 얼굴을 담당합니다. 이번에는 가변성과 불변성의 관점에서 CSS에 대해 이야기해보겠습니다.

면접 질문

우선 면접 질문입니다. 둘째, 어차피 저는 이 면접 질문을 한 번도 해본 적이 없습니다. 결국 면접 질문이 어느 공장에서 왔는지 잊어버렸어요.

일반적인 의미는 내용이 창의 세로 중앙에 있어야 한다는 것입니다. 상단에 텍스트가 더 있으면 텍스트가 위아래로 확장되어야 합니다. , 위쪽으로 확장되고 아래쪽에 텍스트가 더 있으면 아래쪽으로 이동합니다. 열면 그림의 크기는 고정되지만 텍스트 크기는 고정되지 않습니다(빨간색 선은 제가 세로로 추가한 것입니다) 설명을 돕기 위한 중간선). 여기서 텍스트는 가변 요소에 속하고 그림은 고정 요소에 속합니다.

CSS 디자인의 불변 및 가변

아이디어 분석

우선 여기 있는 그림들은 모두 같은 수평선에 있고, 텍스트의 양이 그림에 영향을 미칠 수 없다는 것을 알 수 있습니다. 두 가지 해결 방법이 있습니다. 첫 번째는 텍스트가 정상적으로 흐르는 것이고 그림은 절대 위치에 있습니다. 두 번째는 텍스트가 절대 위치에 있고 그림이 일반 문서에 흐르는 것입니다.

둘째, 위 텍스트의 확장 방향이 위쪽이기 때문에 일반적인 문서 흐름 방향에 어긋나므로(보통 텍스트가 늘어날수록 아래쪽으로 확장되어야 함) 위 텍스트 부분은 절대 위치 지정이 필요하며, 하단 값은

으로 설정됩니다. 마지막으로 위의 두 가지 이유와 결합하여 먼저 두 번째 솔루션을 사용하여 텍스트의 절대 위치와 그림의 일반적인 문서 흐름을 테스트합니다.

여기서 이전 글의 디스어셈블리 아이디어를 활용하여 다음과 같이 html 구조를 얻습니다.

ul.demo
    li
        .text-top
        img.img-center
        .text-bottom

주요 CSS 코드는 다음과 같습니다.

.demo{ position:absolute; top: 50%;
} .demo li{ float: left; width: 120px; margin: 0 20px; position: relative;
} .text-top{ position: absolute; bottom: 90px; left: 0;
} .img-center{ margin-top: -34px; width: 120px; height: 68px;
} .text-bottom{ position: absolute; top: 50px;
}

일반적인 예

콘텐츠 유동 레이아웃

여기서 사이드바는 고정되어 있고 콘텐츠는 너비가 남아 있는 유동 레이아웃입니다. 사이드바는 고정요소이고, 콘텐츠는 가변요소입니다.

section.section-main
    .inner-center.clearfix
        .main>.content
        aside.aside-right
.main{ float: left; width: 100%;
} .main .content{ margin-right: 320px;
} .aside-right{ float: left; width: 300px; margin-left: -320px;
}

그림과 글의 혼합배열

여전히 그림과 글의 혼합배열은 일반적으로 그림의 너비는 고정되어 있지만 너비는 동일합니다. 텍스트 부분이 설정되지 않았습니다. 고정 인자는 이미지의 너비이고 가변 인자는 텍스트의 너비입니다.

.imgtext-mix
    a.mix-img-link>img.mix-img
    .mix-text
        h3.mix-tt>a.mix-tt-link
        .mix-intro
.mix-img-link{ float: left; width: 200px; margin-right: 20px;
} .mix-text{ overflow: hidden;
}

컨테이너의 너비는 가변적이지만 가로 세로 비율은 확실합니다

자세한 내용은 CSS에서 컨테이너의 크기를 비례적으로 조정하는 방법을 참조하세요. 여기서는 자세히 설명하지 않겠습니다. 상수 요소는 종횡비이고 가변 요소는 너비입니다.

모바일 단말기의 변수 및 불변

이제 막 모바일 단말기 리팩토링을 시작한 많은 사람들은 일반적으로 다음과 같은 질문을 합니다. 모바일 단말기는 모두 백분율을 사용합니까? 실제로 rem, vw, vh 등과 같은 새로운 단위 외에도 백분율 외에도 px도 모바일 단말기에서 사용할 수 있는데 이는 전혀 생각하지 않는 것입니다. 어떤 단위를 사용할지, 가장 중요한 것은 변수와 불변성을 파악하는 것입니다. 잘 이해하면 모바일 단말기 재구성은 실제로 PC와 동일합니다. 물론, PC에서 고정된 너비와 높이를 설정하는 데 익숙하다면 아마도 답답할 것입니다.

전체 화면 사진 스크롤

전체 화면, 아직 vw를 사용할 수 없는 경우 100%여야 합니다. (여기서 전체 화면은 너비가 너비를 포함하지 않고 전체 화면을 덮는 것을 의미합니다. 키).

ul.imgslide
    li*4>img
// float布局
.imgslide{
    width: 400%;
}
.imgslide li{
    width: 25%;
    float: left;
}
// absoulte布局
.imgslide{
    width: 100%;
    height: 100px;
    position: relative;
}
.imgslide li{
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
}
.imgslide li:nth-child(n+1){
    transform: translate(100%, 0);
}

그림과 텍스트가 혼합된 목록

여전히 이전과 동일하게 그림과 텍스트가 혼합되어 있습니다. 하하, PC의 경우 오른쪽에 있는 가변 텍스트를 무시하고 직접 사용해도 됩니다. 너비를 설정하고 이동하세요. 미안해요 Duana, 이 변수 ​​요소를 고려해야 합니다.

这个估计90%的移动端都有这个效果,当然不可能设计给你的是375px的稿子,然后你就做了个375px宽度的效果。但是如果按照设计稿的比例,然后设置图片和宽度的百分比呢,这种情况图片宽度的改变,当然会影响图片高度的改变(如果是固定的高度那图片估计就没法看了,各种被拉伸或是变形),而图片高度的改变就会影响整体行的改变,那估计拿着不同的手机,看到的右边的文字内容或高或低也是醉了。

百分比效果大概如下图:

CSS 디자인의 불변 및 가변

所以这里一般设计的是图片固定大小不变,右边文字可变,占满其余空间。实现跟上面的图文混排一样,当然技术上可以使用很多方法如flex,absolute,float等

单行列表

同样单行列表,标题因为长度不一属于可变因子,不宜直接控制其宽度。而右侧的一些按钮或辅助信息相对来说使用绝对定位在右边比较合理。

ul.line-list
    li
        p.title+i.icon-xxx
.line-list li{
    position: relative;
    padding-right: 40px;
    line-height: 40px;
}
.line-list li .icon-xxx{
    position: absolute;
    right: 10px;
    top: 50%;
    tranform: translate(0, -50%);
}
// 如果文字比较长,需要做超出省略截断
.line-list li .title{
    padding-left: 10px;
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
}

等分

这里的等分指水平的等分,可以使用的技术有flex,float,table-cell等,其中float应该是最low的,因为你必须要设置item的宽度,三等分设置33.33%,四等分设置25%等,这种重复利用性太low,已经不适合更高级的移动端了,所以flex和table-cell是不错的选择,根本不需要在意item的个数(当然得确定一行能显示下,显示不下那也是悲催)。所以这种情况下连单位都是多余的。

ul.equal-list
    li*n
// flex
.equal-list{
    display: flex;
}
.equal-list li{
    flex: 1;
}
// table-cell
.equal-list{
    display: table;
    table-layout: fixed;
    width: 100%;
}
.equal-list li{
    display: table-cell;
}

translate

translate中使用的百分比单位是针对自己宽高的百分比,所以对于未知宽高的计算来说,是非常大的优势,尤其用在水平和垂直居中上。

.center-translate{ position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
}

当然这些变与可变的还有很多,总之,在移动端的可变因子比pc上更多,更多的对宽度或高度的不确定,就需要各种方法去避免直接设置死宽度或高度,当然庆幸的是,css3的支持让这些不确定因素的控制变得趋向简单。

变与不变之道

最后不管是移动端还是pc端,对于动不动就设置一个具体width或height的方式注定可扩展性欠缺。所以尤其是在做通用组件的时候,一定要进一步深挖掘,了解更多的使用场景,每个场景的一些特殊特征,甚至于对未来的修改都有可预见性。

可能这里说得更多的是宽度方面的控制,其实对于方法的选择也一样,同一种效果,可能有很多方法去实现,而每种方法都有各自的利弊,所以也要根据实际情况去灵活变通使用,这同样也属于可变的。如果你所有的都是一刀切,那就是固定的一个思维了,无所谓变通了。

如果从一个更高的角度来说,没有什么是恒定的不变,一切皆可变。也许这个站点的不可变,到了那个站点就得变,所以拒绝教条主义,一切从实际情况出发,根据需求分析,得出一个合理的实践。


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
제 3의 진술의 방어에서제 3의 진술의 방어에서Apr 22, 2025 am 11:25 AM

몇 달 전에 나는 해커 뉴스를 썼고 (하나와 마찬가지로) IF 문을 사용하지 않는 것에 대한 (현재 삭제 된) 기사를 가로 질러 달렸습니다. 이 아이디어를 처음 접한다면 (나처럼

다국어 번역에 웹 스피치 API 사용다국어 번역에 웹 스피치 API 사용Apr 22, 2025 am 11:23 AM

공상 과학 소설의 초기부터 우리는 우리와 대화하는 기계에 대해 환상을 가지고 있습니다. 오늘은 평범합니다. 그럼에도 불구하고 제작 기술

Jetpack Gutenberg 블록Jetpack Gutenberg 블록Apr 22, 2025 am 11:20 AM

Gutenberg가 핵심으로 풀려 났을 때를 기억합니다. 왜냐하면 나는 그날 WordCamp에 있었기 때문입니다. 지금은 몇 달이 지났으므로 점점 더 많은 것을 상상합니다.

VUE에서 재사용 가능한 페이지 매김 구성 요소 생성VUE에서 재사용 가능한 페이지 매김 구성 요소 생성Apr 22, 2025 am 11:17 AM

대부분의 웹 애플리케이션의 배후에있는 아이디어는 데이터베이스에서 데이터를 가져 와서 최상의 방법으로 사용자에게 제시하는 것입니다. 우리가 거기에서 데이터를 다룰 때

'Box Shadows'와 Clip-Path를 함께 사용합니다'Box Shadows'와 Clip-Path를 함께 사용합니다Apr 22, 2025 am 11:13 AM

#039;는 당신이 의미있는 것처럼 보일 수있는 상황에 대한 약간의 단계를 수행하자. 이것에서

Mailto에 관한 모든 것 : 링크Mailto에 관한 모든 것 : 링크Apr 22, 2025 am 11:04 AM

Garden Variety Anchor Link ()가 새 이메일을 열 수 있습니다. 이 기능으로 약간의 여행을하자. 사용하기 쉽지만 무엇이든 사용하기 쉽습니다

그것은 넷리레이션 CMS가 모든 플랫 파일 사이트 생성기에서 작동하는 방식이 매우 멋지다그것은 넷리레이션 CMS가 모든 플랫 파일 사이트 생성기에서 작동하는 방식이 매우 멋지다Apr 22, 2025 am 11:03 AM

여기에 작은 고백 : 내가 한 눈에 Netlify CMS를 처음 보았을 때, 나는 다음과 같이 생각했다. 그 다음에

퍼시의 시각적 회귀 테스트퍼시의 시각적 회귀 테스트Apr 22, 2025 am 11:02 AM

테스트하는 것은 끔찍한 작업입니다

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기