CSS Properties Related to User Interface
This article explains CSS properties related to user interface.
You can learn about the content, cursor, pointer-events, and resize properties, including their use cases and how to write them.
YouTube Video
HTML for Preview
css-ui.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>CSS Properties Example</title>
7 <link rel="stylesheet" href="css-base.css">
8 <link rel="stylesheet" href="css-ui.css">
9</head>
10<body>
11 <!-- Header -->
12 <header>
13 <h1>CSS Properties For Animation</h1>
14 </header>
15
16 <!-- Main content -->
17 <main>
18 <header>
19 <h2>User Inferface Related Properties</h2>
20 </header>
21 <article>
22 <h3>content</h3>
23 <section>
24 <h4>Content Examples</h4>
25 <header><h4>content: "Note: ";</h4></header>
26 <section class="sample-view">
27 <div class="content-note">Solid Red Outline</div>
28 </section>
29 <header><h4>content: " (End)";</h4></header>
30 <section class="sample-view">
31 <div class="content-end">Dashed Blue Outline</div>
32 </section>
33 </section>
34 </article>
35 <article>
36 <h3>content</h3>
37 <section>
38 <h4>Content Value Examples</h4>
39 <!-- Text -->
40 <header><h4>content: "Hello, world!";</h4></header>
41 <section class="sample-view">
42 <div class="content-text">This is a sample element.</div>
43 </section>
44 <!-- Image -->
45 <header><h4>content: url(image.png);</h4></header>
46 <section class="sample-view">
47 <div class="content-image">Image inserted before this text.</div>
48 </section>
49 <!-- Counter -->
50 <header><h4>content: counter(item);</h4></header>
51 <section class="sample-view">
52 <div class="content-counter">This is a counted item.</div>
53 </section>
54 <!-- Attribute -->
55 <header><h4>content: attr(title);</h4></header>
56 <section class="sample-view">
57 <div class="content-attr" title="Tooltip text">This displays title attribute as content.</div>
58 </section>
59 <!-- None -->
60 <header><h4>content: none;</h4></header>
61 <section class="sample-view">
62 <div class="content-none">No generated content is shown.</div>
63 </section>
64 </section>
65 </article>
66 <article>
67 <h3>cursor</h3>
68 <section>
69 <h4>Cursor Examples</h4>
70 <header><h4>cursor: default</h4></header>
71 <section class="sample-view">
72 <div class="default-cursor">This is the default cursor.</div>
73 </section>
74 <header><h4>cursor: pointer</h4></header>
75 <section class="sample-view">
76 <div class="pointer-cursor">This is the pointer cursor (hand).</div>
77 </section>
78 <header><h4>cursor: text</h4></header>
79 <section class="sample-view">
80 <div class="text-cursor">This is the text cursor (I-bar).</div>
81 </section>
82 <header><h4>cursor: move</h4></header>
83 <section class="sample-view">
84 <div class="move-cursor">This is the move cursor (cross-shaped).</div>
85 </section>
86 <header><h4>cursor: crosshair</h4></header>
87 <section class="sample-view">
88 <div class="crosshair-cursor">This is the crosshair cursor (precision cross).</div>
89 </section>
90 <header><h4>cursor: not-allowed</h4></header>
91 <section class="sample-view">
92 <div class="not-allowed-cursor">This is the not-allowed cursor (prohibited).</div>
93 </section>
94 <header><h4>cursor: help</h4></header>
95 <section class="sample-view">
96 <div class="help-cursor">This is the help cursor (question mark).</div>
97 </section>
98 <header><h4>cursor: wait</h4></header>
99 <section class="sample-view">
100 <div class="wait-cursor">This is the wait cursor (hourglass or spinner).</div>
101 </section>
102 <header><h4>cursor: progress</h4></header>
103 <section class="sample-view">
104 <div class="progress-cursor">This is the progress cursor<br>(loading, but user can still interact).</div>
105 </section>
106 <header><h4>cursor: grab</h4></header>
107 <section class="sample-view">
108 <div class="grab-cursor">This is the grab cursor (ready to drag).</div>
109 </section>
110 <header><h4>cursor: grabbing</h4></header>
111 <section class="sample-view">
112 <div class="grabbing-cursor">This is the grabbing cursor<br>(dragging in progress).</div>
113 </section>
114 <header><h4>cursor: resize</h4></header>
115 <section class="sample-view">
116 <div class="n-resize-cursor">This is the n-resize cursor (resize up).</div>
117 <div class="s-resize-cursor">This is the s-resize cursor (resize down).</div>
118 <div class="e-resize-cursor">This is the e-resize cursor (resize right).</div>
119 <div class="w-resize-cursor">This is the w-resize cursor (resize left).</div>
120 <div class="ne-resize-cursor">This is the ne-resize cursor (resize top-right).</div>
121 <div class="nw-resize-cursor">This is the nw-resize cursor (resize top-left).</div>
122 <div class="se-resize-cursor">This is the se-resize cursor<br>(resize bottom-right).</div>
123 <div class="sw-resize-cursor">This is the sw-resize cursor<br>(resize bottom-left).</div>
124 </section>
125 </section>
126 </article>
127 <article>
128 <h3>pointer-events</h3>
129 <section>
130 <h4>Pointer Events Examples</h4>
131 <header><h4>pointer-events: auto</h4></header>
132 <section class="sample-view">
133 <div class="pointer-events-auto" onclick="document.getElementById('message').innerHTML = 'Auto: This box is clickable!'">
134 Auto (Clickable)
135 </div>
136 </section>
137 <header><h4>pointer-events: none</h4></header>
138 <section class="sample-view">
139 <div class="pointer-events-none" onclick="document.getElementById('message').innerHTML = 'None: This box is not clickable!'">
140 None (Not Clickable)
141 </div>
142 </section>
143 <div id="message">Message Box</div>
144 </section>
145 </article>
146 <article>
147 <h3>resize</h3>
148 <section>
149 <header><h4>resize: both</h4></header>
150 <section class="sample-view">
151 <textarea class="resizable-both">Resizes both horizontally and vertically</textarea>
152 </section>
153 <header><h4>resize: horizontal</h4></header>
154 <section class="sample-view">
155 <textarea class="resizable-horizontal">Resizes horizontally</textarea>
156 </section>
157 <header><h4>resize: vertical</h4></header>
158 <section class="sample-view">
159 <textarea class="resizable-vertical">Resizes vertically</textarea>
160 </section>
161 <header><h4>resize: none</h4></header>
162 <section class="sample-view">
163 <textarea class="non-resizable">Cannot resize</textarea>
164 </section>
165 </section>
166 </article>
167 </main>
168</body>
169</html>User Interface Related
content property
1.content-note::before {
2 content: "Note: ";
3 color: red;
4 background-color: steelblue;
5 }
6
7.content-end::after {
8 content: " (End)";
9 color: blue;
10 background-color: lightsteelblue;
11}The content property is used to add content to pseudo-elements, mainly ::before or ::after. This property is used to define text, images, counters, etc., that are not directly displayed inside the element. Its main role is to allow control of decorative content or supplementary information not written directly in HTML through stylesheets.
In this example, "Note: " is added before the element, and "(End)" is added after. These use the pseudo-elements ::before and ::after respectively.
Values of the content property
1/* Text */
2content: "Hello, world!";
3
4/* Image */
5content: url(image.png);
6
7/* Counter */
8content: counter(item);
9
10/* Attribute */
11content: attr(title);
12
13/* None */
14content: none;The content property can take the following values:.
1/* Text */
2.content-text::before {
3 content: "Hello, world!";
4 display: inline-block;
5 margin-right: 0.5em;
6 color: #333;
7 font-weight: bold;
8}- Text
- You can add text by enclosing a string directly in double quotes (
"").
- You can add text by enclosing a string directly in double quotes (
1/* Image */
2.content-image::before {
3 content: url('custom-bullet.png');
4 display: inline-block;
5 margin-right: 0.5em;
6 vertical-align: middle;
7}- Image
- You can insert an image using the
url()function.
- You can insert an image using the
1/* Counter */
2.content-counter {
3 counter-reset: item;
4}
5.content-counter::before {
6 counter-increment: item;
7 content: counter(item) ". ";
8 margin-right: 0.5em;
9 font-weight: bold;
10}- Counter
- Use the
counter()function to display a counter.
- Use the
1/* Attribute */
2.content-attr[title]::before {
3 content: attr(title);
4 display: inline-block;
5 margin-right: 0.5em;
6 color: darkgreen;
7}- Attribute
- The
attr()function can be used to display the attribute value of an HTML element. For example, you can display thetitleattribute.
- The
1/* None */
2.content-none::before {
3 content: none;
4}- none
- Specifies that no content should be displayed. This is the default state.
Usage Notes
When using the content property, keep the following points in mind:.
- The
contentproperty applies only to pseudo-elements, not regular elements. - Since it is not added to the DOM, it cannot be directly manipulated with JavaScript.
- It might affect layout, so it is commonly used for displaying decorative or supplementary information.
cursor Property
The cursor property is used to specify the type of cursor to be displayed when the mouse pointer is placed over an element. You can specify various cursor styles, and it's often applied to interactive elements to improve user experience.
Main Cursor Types
The following values can be specified as cursor types:.
1.default-cursor { cursor: default; }
2.pointer-cursor { cursor: pointer; }
3.text-cursor { cursor: text; }
4.move-cursor { cursor: move; }
5.crosshair-cursor { cursor: crosshair; }
6.not-allowed-cursor { cursor: not-allowed; }
7.help-cursor { cursor: help; }
8.wait-cursor { cursor: wait; }
9.progress-cursor { cursor: progress; }
10.grab-cursor { cursor: grab; }
11.grabbing-cursor { cursor: grabbing; }
12.n-resize-cursor { cursor: n-resize; }
13.s-resize-cursor { cursor: s-resize; }
14.e-resize-cursor { cursor: e-resize; }
15.w-resize-cursor { cursor: w-resize; }
16.ne-resize-cursor { cursor: ne-resize; }
17.nw-resize-cursor { cursor: nw-resize; }
18.se-resize-cursor { cursor: se-resize; }
19.sw-resize-cursor { cursor: sw-resize; }default
defaultis the normal arrow cursor (the browser's default cursor).
pointer
pointeris a hand-shaped cursor displayed when placed over a link.
text
textis an I-beam cursor displayed in areas where text can be selected.
move
- `move` is a cross-shaped cursor used when an element can be dragged.
crosshair
crosshairis a crosshair cursor for precise selection.
not-allowed
not-allowedis a cursor for regions or actions that are not allowed.
help
helpis a cursor with a question mark displayed when placed over elements that can provide help information.
wait
waitis an hourglass or circular cursor representing a processing state.
progress
progressis a cursor representing an operation in progress. However, it indicates that the user can perform other operations.
grab
grabis a cursor for grabbing draggable elements.
grabbing
grabbingis a cursor indicating an element is being dragged.
resize
resize is a cursor used when a window or element can be resized. There are different types depending on the direction.
-
n-resize: A resize cursor pointing upward. -
s-resize: A resize cursor pointing downward. -
e-resize: A resize cursor pointing to the right. -
w-resize: A resize cursor pointing to the left. -
ne-resize: A resize cursor pointing to the upper right. -
nw-resize: A resize cursor pointing to the upper left. -
se-resize: A resize cursor pointing to the lower right. -
sw-resize: A resize cursor pointing to the lower left.
Custom cursor
1element {
2 cursor: url('custom-cursor.png'), auto;
3}It is also possible to specify a custom cursor using url().
- In this example,
custom-cursor.pngis the image file for the cursor. If that image is not available, the browser's default cursor is displayed withauto.
Summary
- The
cursorproperty specifies which cursor should be displayed when the user is over an element. - There are various cursor styles available depending on use, and custom cursors can also be set.
- By selecting appropriate cursor styles according to interactive elements and restricted operations, a more user-friendly UI can be provided.
pointer-events property
1.pointer-events-auto {
2 pointer-events: auto;
3 background-color: lightblue;
4 cursor: pointer;
5}
6
7.pointer-events-none {
8 pointer-events: none;
9 background-color: lightcoral;
10 cursor: pointer;
11}The pointer-events property is used to control how an element handles events from pointer devices such as mouse, touch, and stylus. Normally, when an element is clicked or hovered over by a user, it receives pointer events, but this behavior can be changed using this property.
-
In the
pointer-events-autoclass, thepointer-eventsproperty is set toauto, allowing normal click and hover events to be processed. The element is clickable, so a message is displayed when it is clicked. -
In the
pointer-events-autoclass, thepointer-eventsproperty is set tonone, so the element does not receive pointer events. Even if thecursorproperty is set topointer, the mouse cursor does not change, and other elements underneath become clickable.
Value types
- The
pointer-eventsproperty specifies whether and how an element receives pointer events. You can specify the following values.
auto
autois the default value, where the element receives pointer events normally.
none
- When
noneis specified, the element does not receive pointer events. The element disables interactions such as clicking and hovering, but other elements underneath can receive pointer events.
visiblePainted, visibleFill, visibleStroke, visible, painted, fill, stroke, all, inherit
1pointer-events: visiblePainted;
2pointer-events: visibleFill;
3pointer-events: visibleStroke;
4pointer-events: visible;
5pointer-events: painted;
6pointer-events: fill;
7pointer-events: stroke;
8pointer-events: all;
9pointer-events: inherit;- These values are mainly used for SVG elements. Each value controls whether specific parts of an element (such as fill, stroke, etc.) respond to pointer events. It is not commonly used with regular HTML elements.
Key points for usage
Here are some examples of how to use the pointer-events property.
-
Selecting elements you want to disable
- The
nonevalue is useful for temporarily disabling elements like buttons or links.
- The
-
Usage with overlaid elements
- When the
positionproperty is set toabsoluteor elements are layered using thez-indexproperty, settingpointer-eventstononeon the top element allows pointer events to be sent to the element below.
- When the
resize property
1.resizable-both {
2 resize: both;
3 overflow: auto;
4 width: 200px;
5 height: 100px;
6 border: 1px solid black;
7}
8
9.resizable-horizontal {
10 resize: horizontal;
11 overflow: auto;
12 width: 200px;
13 height: 100px;
14 border: 1px solid black;
15}
16
17.resizable-vertical {
18 resize: vertical;
19 overflow: auto;
20 width: 200px;
21 height: 100px;
22 border: 1px solid black;
23}
24
25.non-resizable {
26 resize: none;
27 overflow: auto;
28 width: 200px;
29 height: 100px;
30 border: 1px solid black;
31}The resize property is a CSS property that specifies in which direction an element can be resized by the user. By using this property, you can allow elements to be resized vertically or horizontally by dragging, or disable resizing entirely.
Value types
- The
resizeproperty specifies the directions in which an element can be resized. You can specify the following values.
both
- Specifying
bothallows the element to be resized in both vertical and horizontal directions.
horizontal
- Specifying
horizontalallows the element to be resized only in the horizontal direction (width).
vertical
- Specifying
verticalallows the element to be resized only in the vertical direction (height).
none
- Specifying
nonedisables resizing of the element. This is the default value.
inherit
- Specifying
inheritmakes the element inherit theresizeproperty value from its parent.
Notes
- To make an element resizable, you need to set the
overflowproperty along with theresizeproperty. Resizable elements may require scrollbars, andoverflow: autois typically set. - Resizing is generally used with block elements such as
divandtextarea.
You can follow along with the above article using Visual Studio Code on our YouTube channel. Please also check out the YouTube channel.