ホームページ ウェブフロントエンド CSSチュートリアル CSS デザインにおける不変と変数

CSS デザインにおける不変と変数

Dec 03, 2016 am 11:23 AM
css 変数

「人が生きていくうちに、ある人は顔になり、ある人はリジになる。それはすべて時代によって決まる。」 - 「グランド マスター」

リジと顔を再構築する場合、HTML はリジを担当する必要があり、CSS は顔を担当する時が来ました。今回はCSSを可変性と不変性の観点から分析してみます。

面接の質問

まず第一に、これは面接の質問です、第二に、私はとにかくこの面接の質問をしたことがありません、結局、どの工場からの面接の質問だったか忘れてしまいました。

具体的な要件は忘れましたが、一般的な意味は、コンテンツをウィンドウの垂直方向の中央に配置することです。テキストは上部にある場合は上下に拡張する必要があります。下部にさらにテキストがある場合は、下に拡張する必要があります。 サイズは固定されていますが、テキストの量は固定されていません (赤い線は説明を補助するために私が追加したものです)。ここで、テキストは可変要素に属し、画像は固定要素に属します。

CSS デザインにおける不変と変数

思考分析

まず、ここの画像はすべて同じ水平線上にあることがわかり、テキストの量は画像にまったく影響を与えないため、考えられる解決策は 2 つあります。テキストの通常のドキュメント フローと画像の絶対配置。2 番目のタイプのテキストは絶対的に配置され、画像はドキュメント内で通常どおりに配置されます。

第二に、上のテキストの拡張方向が上向きであるため、通常のドキュメントの流れの方向に違反しています(通常、テキストが増加するにつれて下に拡張するはずです)。そのため、上のテキスト部分は絶対に配置する必要があると結論付けることができます。一番下の値

最後に、上記の 2 つの理由に基づいて、テキストの絶対位置と画像の通常のドキュメント フローを使用して、最初に 2 番目の解決策を使用してテストします。

ここでは、前の記事の逆アセンブリの考え方を使用して、次のような 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
ログイン後にコピー
rree

グラフィックとテキストの混合

一般的に、画像の幅は固定されていますが、テキスト部分の幅は設定されていません。固定係数は画像の幅、可変係数はテキストの幅です。

.main{ float: left; width: 100%;
} .main .content{ margin-right: 320px;
} .aside-right{ float: left; width: 300px; margin-left: -320px;
}
ログイン後にコピー
rree

コンテナの幅は可変ですが、アスペクト比は一定です

詳しくは、CSSでコンテナを比例的に拡大縮小する方法を参照してください。ここでは詳細は説明しません。定数要素はアスペクト比です。 、変動要因は幅です。

モバイル端末では可変および不変

モバイル端末の再構築を始めたばかりの多くの人は、通常、モバイル端末はすべてパーセンテージを使用するのかという質問をします。実際、rem、vw、vh などの新しい単位とは別に、パーセンテージに加えて、px もモバイル端末で使用できます。これは、まったく考えられていません。どの単位を使うか、最も重要なことは可変と不変を把握することです。よく理解すれば、モバイル端末の再構築も実はPCと同じです。もちろん、PC で幅と高さを固定に設定することに慣れている場合は、おそらくイライラするでしょう。

全画面画像スクロール

全画面、vw がまだ使用できない場合は、100% にする必要があります (ここでの全画面とは、高さを除いた幅が画面全体をカバーすることを意味します)。

.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;
}
ログイン後にコピー

写真とテキストの混合リスト

相変わらず写真とテキストの混合配置ですが、笑、PCの場合は、右側の変数テキストを無視して直接幅を設定できるかもしれませんが、モバイル端末の場合は、申し訳ありませんが、この変動要因を考慮する必要があります。

这个估计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 までご連絡ください。

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ブートストラップボタンの使用方法 ブートストラップボタンの使用方法 Apr 07, 2025 pm 03:09 PM

ブートストラップボタンの使用方法は?ブートストラップCSSを導入してボタン要素を作成し、ブートストラップボタンクラスを追加してボタンテキストを追加します

ブートストラップのサイズを変更する方法 ブートストラップのサイズを変更する方法 Apr 07, 2025 pm 03:18 PM

Bootstrapの要素のサイズを調整するには、次のものを含むDimensionクラスを使用できます。

ブートストラップの日付を表示する方法 ブートストラップの日付を表示する方法 Apr 07, 2025 pm 03:03 PM

回答:ブートストラップの日付ピッカーコンポーネントを使用して、ページで日付を表示できます。手順:ブートストラップフレームワークを紹介します。 HTMLで日付セレクター入力ボックスを作成します。ブートストラップは、セレクターにスタイルを自動的に追加します。 JavaScriptを使用して、選択した日付を取得します。

ブートストラップにスプリットラインを書く方法 ブートストラップにスプリットラインを書く方法 Apr 07, 2025 pm 03:12 PM

ブートストラップスプリットラインを作成するには2つの方法があります。タグを使用して、水平方向のスプリットラインを作成します。 CSS Borderプロパティを使用して、カスタムスタイルのスプリットラインを作成します。

ブートストラップに写真を挿入する方法 ブートストラップに写真を挿入する方法 Apr 07, 2025 pm 03:30 PM

ブートストラップに画像を挿入する方法はいくつかあります。HTMLIMGタグを使用して、画像を直接挿入します。ブートストラップ画像コンポーネントを使用すると、レスポンシブ画像とより多くのスタイルを提供できます。画像サイズを設定し、IMG-Fluidクラスを使用して画像を適応可能にします。 IMGボーダークラスを使用して、境界線を設定します。丸い角を設定し、IMGラウンドクラスを使用します。影を設定し、影のクラスを使用します。 CSSスタイルを使用して、画像をサイズ変更して配置します。背景画像を使用して、背景イメージCSSプロパティを使用します。

ブートストラップのフレームワークをセットアップする方法 ブートストラップのフレームワークをセットアップする方法 Apr 07, 2025 pm 03:27 PM

Bootstrapフレームワークをセットアップするには、次の手順に従う必要があります。1。CDNを介してブートストラップファイルを参照してください。 2。独自のサーバーでファイルをダウンロードしてホストします。 3。HTMLにブートストラップファイルを含めます。 4.必要に応じてSASS/LESSをコンパイルします。 5。カスタムファイルをインポートします(オプション)。セットアップが完了したら、Bootstrapのグリッドシステム、コンポーネント、スタイルを使用して、レスポンシブWebサイトとアプリケーションを作成できます。

ブートストラップの日付を確認する方法 ブートストラップの日付を確認する方法 Apr 07, 2025 pm 03:06 PM

ブートストラップの日付を確認するには、次の手順に従ってください。必要なスクリプトとスタイルを紹介します。日付セレクターコンポーネントを初期化します。 Data-BV-Date属性を設定して、検証を有効にします。検証ルール(日付形式、エラーメッセージなどなど)を構成します。ブートストラップ検証フレームワークを統合し、フォームが送信されたときに日付入力を自動的に検証します。

ブートストラップナビゲーションバーの設定方法 ブートストラップナビゲーションバーの設定方法 Apr 07, 2025 pm 01:51 PM

ブートストラップは、ナビゲーションバーをセットアップするための簡単なガイドを提供します。ブートストラップライブラリを導入してナビゲーションバーコンテナを作成するブランドアイデンティティの作成ナビゲーションリンクの作成他の要素の追加(オプション)調整スタイル(オプション)

See all articles